Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
817,17 KB
Nội dung
Giải thuật Kĩ thuật thiết kế giải thuật BÀI TẬP CHƯƠNG Bài 1: Giả sử có hai đội A B tham gia trận thi đấu thể thao, đội thắng trước n hiệp thắng Chẳng hạn trận thi đấu bóng chuyền hiệp, đội thắng trước hiệp tháng Giả sử hai đội ngang tài ngang sức Đội A cần thắng thêm i hiệp để thắng đội B cần thắng thêm j hiệp Gọi P(i,j) xác suất để đội A cần i hiệp để chiến thắng, B cần j hiệp Dĩ nhiên i,j số ngun khơng âm Ðể tính P(i,j) ta thấy i=0, tức đội A thắng nên P(0,j) = Tương tự j=0, tức đội B thắng nên P(i,0) = Nếu i j lớn khơng cịn hiệp phải đấu hai đội có khả ăn, thua hiệp Như P(i,j) trung bình cộng P(i-1,j) P(i,j-1) Trong P(i-1,j) xác suất để đội A thắng thắng hiệp P(i,j-1) xác suất để A thắng thua hiệp Tóm lại ta có cơng thức tính P(i,j) sau: P(i,j) = Nếu i = P(i,j) = Nếu j = P(i,j) = (P(i-1,j) + P(i,j-1))/2 Nếu i > j > Viết hàm đệ quy để tính P(i,j) Tính độ phức tạp hàm Dùng kĩ thuật quy hoạch động để viết hàm tính P(i,j) Tính độ phức tạp hàm Viết hàm P(i,j) kĩ thuật quy hoach động dùng mảng chiều (để tiết kiệm nhớ) Bài 2: Bài tốn phân cơng lao động: Có n cơng nhân làm n cơng việc Công nhân i làm công việc j khoảng thời gian tij Phải tìm phương án phân công để công việc hồn thành, cơng nhân có việc làm, công nhân làm công việc công việc công nhân thực đồng thời tổng thời gian nhỏ Mô tả kĩ thuật “tham ăn” (greedy) cho tốn phân cơng lao động Tìm phương án theo giải thuật “háu ăn” cho tốn phân cơng lao động cho bảng sau Trong dịng cơng nhân, cột công Nguyễn Văn Linh Trang 82 Sưu t m b i: www.daihoc.com.vn Giải thuật Kĩ thuật thiết kế giải thuật việc, ô (i,j) ghi thời gian tij mà cơng nhân i cần để hồn thành cơng việc j (Cần rõ công nhân làm công việc tổng thời gian ) Công việc Công nhân 5 5 5 4 2 Bài 3: Bài tốn tơ màu đồ giới Người ta muốn tô màu đồ nước giới, nước tô màu hai nước có biên giới chung khơng có màu giống (các nước khơng chung biên giới tơ màu giơng nhau) Tìm phương án tơ màu cho số loại màu phải dùng Người ta mơ hình hóa đồ giới đồ thị khơng có hướng, đỉnh biểu diễn cho nước, biên giới hai nước biểu diễn cạnh nối hai đỉnh Bài tốn tơ màu đồ giới trở thành tốn tơ màu đỉnh đồ thi: Mỗi đỉnh đồ thị phải tô màu hai đỉnh có chung cạnh khơng tơ màu (cá đỉnh khơng chung cạnh tơ màu) Tìm phương án tơ màu cho số loại màu phải dùng Hãy mô tả kĩ thuật “tham ăn” (Greedy) để giải tốn tơ màu cho đồ thị Áp dụng kĩ thuật háu ăn để tô màu cho đỉnh đồ thị sau (các màu sử dung để tô là: ÐỎ, CAM, VÀNG, XANH, ÐEN, NÂU, TÍM) G A E B F C D Bài 4: Dùng kĩ thuật cắt tỉa alpha-beta để định trị cho nút gốc trò chơi sau (các số nút giá trị gán cho chúng) Nguyễn Văn Linh Trang 83 Sưu t m b i: www.daihoc.com.vn Giải thuật Kĩ thuật thiết kế giải thuật MAX A MIN B MAX MIN E L F M N D C G O 3 H Q P K I S T 5 R U V Bài 5: Xét trị chơi có viên bi, hai người thay phiên nhặt từ đến viên Người phải nhặt viên bi cuối bị thua Vẽ tốn trị chơi Sử dụng kĩ thuật cắt tỉa alpha-beta định trị cho nút gốc Ai thắng trò chơi hai người nước tốt Hãy cho nhận xét trường hợp tổng quát ban đầu có n viên bi lần nhặt từ đến m viên Bài 6: Xét trị chơi có đĩa Người chơi chia thành chồng có số đĩa khơng Người chơi chọn chồng số chồng chia tiếp tục chia thành hai chồng không Hai người luân phiên chia đĩa khơng thể chia thua Vẽ tồn trị chơi Sử dụng kĩ thuật cắt tỉa alpha-beta định trị cho nút gốc Ai thắng trò chơi hai người nước tốt Bài 7: Cho tốn ba lơ với trọng lượng ba lô W = 30 loại đồ vật cho bảng bên Tất loại đồ vật có Giải tốn kỹ thuật “Tham ăn” (Greedy) Giải toán kỹ thuật nhánh cận Loại đồ vật A B C D E Trọng lượng 15 10 Nguyễn Văn Linh Giá trị 30 25 24 Trang 84 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ CHƯƠNG 4: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT LƯU TRỮ NGOÀI 4.1 TỔNG QUAN 4.1.1 Mục tiêu Sau học chương này, sinh viên cần nắm vấn đề sau: • Tiêu chuẩn đế đánh giá giải thuật xử lý • Giải thuật xếp trộn để xếp phương pháp cải tiến tốc độ xếp trộn • Cách thức tổ chức lưu trữ giải thuật tìm kiếm, xen, xố thơng tin tập tin tuần tự, tập tin mục, tập tin bảng băm đặc biệt tập tin Bcây 4.1.2 Kiến thức cần thiết • Cấu trúc liệu danh sách liên kết • Các cấu trúc liệu bảng băm • Vấn đề tìm kiếm tìm kiếm nhị phân • Các thao tác kiểu liệu tập tin 4.1.3 Tài liệu tham khảo A.V Aho, J.E Hopcroft, J.D Ullman; Data Structures and Algorithms; AddisonWesley; 1983 (Chapter 10) Đinh Mạnh Tường; Cấu trúc liệu & Thuật toán; Nhà xuất khoa học kĩ thuật; Hà nội-2001 (Chương 7) 4.1.4 Nội dung cốt lõi Trong chương nghiên cứu hai vấn đề xếp liệu lưu nhớ kĩ thuật lưu trữ tập tin Trong kĩ thuật lưu trữ tập tin sử dụng cấu trúc liệu tuần tự, bảng băm, tập tin mục cấu trúc B-cây 4.2 MƠ HÌNH XỬ LÝ NGỒI Trong giải thuật mà đề cập từ trước tới nay, giả sử số lượng liệu vào nhỏ để chứa hết nhớ (main memory) Nhưng điều xảy ta muốn xử lý phiếu điều tra dân số tồn quốc hay thơng tin quản lý đất đai nước chẳng hạn? Trong toán vậy, số lượng liệu vượt khả lưu trữ nhớ Ðể giải tốn phải dùng nhớ để lưu trữ xử lý Các thiết Nguyễn Văn Linh Trang 85 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ bị lưu trữ băng từ, đĩa từ có khả lưu trữ lớn đặc điểm truy nhập hoàn toàn khác với nhớ Chúng ta cần tìm cấu trúc liệu giải thuật thích hợp cho việc xử lý liệu lưu trữ nhớ Kiểu liệu tập tin kiểu thích hợp cho việc biểu diễn liệu lưu nhớ Hệ điều hành chia nhớ ngồi thành khối (block) có kích thước nhau, kích thước thay đổi tùy thuộc vào hệ điều hành nói chung từ 512 bytes đến 4096 bytes Trong trình xử lý, việc chuyển giao liệu nhớ nhớ ngồi tiến hành thơng qua vùng nhớ đệm (buffer) Bộ đệm vùng dành riêng nhớ mà kích thước với kích thước khối nhớ ngồi Có thể xem tập tin bao gồm nhiều mẩu tin lưu khối Mỗi khối lưu số nguyên vẹn mẩu tin, khơng có mẩu tin bị chia cắt để lưu hai khối khác Trong thao tác đọc, nguyên khối tập tin chuyển vào đệm đọc mẩu tin có đệm đệm rỗng lại chuyển khối từ nhớ ngồi vào đệm Ðể ghi thông tin nhớ ngoài, mẩu tin xếp vào đệm đầy đệm nguyên khối chuyển nhớ ngồi Khi đệm trở nên rỗng lại xếp tiếp mẩu tin vào Ghi Bộ nhớ Ghi Bộ nhớ đệm Đọc Mỗi lần đọc mẩu tin Đọc Bộ nhớ Mỗi lần đọc khối Hình 4-1: Mơ hình giao tiếp nhớ trong, nhớ vùng nhớ đệm Như đơn vị giao tiếp nhớ đệm mẩu tin đệm nhớ ngồi khối Hình 4-1 mơ tả họat động nhớ trong, đệm nhớ thao tác đọc ghi tập tin 4.3 ÐÁNH GIÁ CÁC GIẢI THUẬT XỬ LÝ NGOÀI Ðối với nhớ ngồi thời gian tìm khối để đọc vào nhớ lớn so với thời gian thao tác liệu khối Ví dụ giả sử ta có khối lưu 1000 số nguyên lưu đĩa quay với vận tốc 1000 vịng/ phút thời gian để đưa đầu từ vào rãnh chứa khối quay đĩa để đưa khối đến chỗ đầu từ hết khoảng 100 mili giây Với thời gian máy thực 100000 lệnh, tức đủ để xếp số nguyên theo giải thuật QuickSort Vì đánh giá Nguyễn Văn Linh Trang 86 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ giải thuật thao tác nhớ ngoài, tập trung vào việc xét số lần đọc khối vào nhớ số lần ghi khối nhớ ta gọi chung phép truy xuất khối (block access) Vì kích thước khối cố định nên ta khơng thể tìm cách tăng kích thước khối mà phải tìm cách giảm số lần truy xuất khối 4.4 SẮP XẾP NGOÀI Sắp xếp liệu tổ chức tập tin tổng quát hơn, xếp liệu lưu nhớ gọi xếp 4.4.1 Sắp xếp trộn (merge sorting) 4.4.1.1 Khái niệm đường Ðường độ dài k tập hợp k mẩu tin đựoc thứ tự theo khoá tức là, mẩu tin r1,r2, ,rk có khố k1,k2, ,kk tạo thành đường k1≤ k2 ≤ ≤ kk Cho tập tin chứa mẩu tin r1,r2, ,rn, ta nói tập tin tổ chức thành đường có độ dài k ta chia tập tin thành đoạn k mẩu tin liên tiếp đoạn đường, đoạn cuối khơng có đủ k mẩu tin, trường hợp ta gọi đoạn (tail) Ví dụ 4-1: Tập tin gồm 14 mẩu tin có khóa số nguyên tổ chức thành đường độ dài có độ dài 13 26 27 12 14 17 23 25 4.4.1.2 Giải thuật Ðể xếp tập tin F có n mẩu tin ta sử dụng tập tin F1, F2, G1 G2 Khởi đầu ta phân phối mẩu tin tập tin cho F luân phiên vào hai tập tin F1 F2 Như hai tập tin xem tổ chức thành đường độ dài Bước 1: Ðọc đường, đường độ dài từ hai tập tin F1, F2 trộn hai đường thành đường độ dài ghi luân phiên vào hai tập tin G1, G2 Ðổi vai trò F1 cho G1, F2 cho G2 Bước 2: Ðọc đường, đường độ dài từ hai tập tin F1, F2 trộn hai đường thành đường độ dài ghi luân phiên vào hai tập tin G1, G2 Ðổi vai trò F1 cho G1, F2 cho G2 Quá trình tiếp tục sau i bước độ dài đường 2I Nếu 2I ( n giải thuật kết thúc, lúc tập tin G2 rỗng tập tin G1 chứa mẩu tin 4.4.1.3 Ðánh giá giải thuật xếp trộn Ta thấy giải thuật kết thúc sau i bước với i ≥ logn Mỗi bước phải đọc từ tập tin ghi vào tập tin, tập tin có trung bình n/2 mẩu tin Giả sử khối lưu trữ Nguyễn Văn Linh Trang 87 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ ngồi b mẩu tin bước cần đọc ghi logn bước tổng cộng cần * * n 2n = khối mà cần 2*b b 2n logn phép truy xuất khối b Ví dụ 4-2: Cho tập tin F có 23 mẩu tin với khóa số nguyên sau: 31 13 98 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 Ðể bắt đầu ta phân phối mẩu tin F luân phiên vào hai tập tin F1 F2 tổ chức thành đường có độ dài 13 98 10 54 65 30 90 10 69 31 96 40 85 39 13 77 22 10 F1 F2 Bước 1: Trộn đường độ dài F1 F2 đường độ dài ghi luân phiên vào hai tập tin G1, G2: G1 31 96 98 54 85 30 39 10 G2 13 10 40 65 13 90 69 77 10 22 F1 F2 Bước 2: Ðổi vai trò F1 G1, F2 G2 cho Trộn đường độ dài hai tập tin F1 F2 đường độ dài ghi luân phiên vào hai tập tin G1 G2: G1 13 31 54 65 85 10 69 G2 10 40 96 98 13 30 39 90 10 77 22 F1 F2 Bước 3: Ðổi vai trò F1 G1, F2 G2 cho Trộn đường độ dài hai tập tin F1 F2 đường độ dài ghi luân phiên vào hai tập tin G1 G2: G1 10 13 31 40 96 98 G2 13 30 39 54 65 85 90 8 10 10 22 69 77 F1 F2 Bước 4: Ðổi vai trò F1 G1, F2 G2 cho Trộn đường độ dài hai tập tin F1 F2 đường độ dài 16 ghi luân phiên vào tập tin G1 G2 G1 10 13 13 30 31 39 G2 8 10 10 22 69 77 40 54 Nguyễn Văn Linh 65 85 90 96 98 F2 Trang 88 Sưu t m b i: www.daihoc.com.vn F1 Giải thuật CTDL giải thuật lưu trữ ngồi Bước 5: Ðổi vai trị F1 G1, F2 G2 cho Trộn đường độ dài 16 hai tập tin F1 F2 đường độ dài 23 ghi vào tập tin G1 G1 8 10 10 10 13 13 22 30 31 39 40 54 65 69 77 85 90 96 98 Tập tin G1 chứa mẩu tin tập tin G2 rỗng 4.4.1.4 Chương trình procedure Merge(k:integer; f1,f2,g1,g2: File of RecordType); {Thủ tục trộn đường độ dài k hai tập tin f1 f2 thành đường đọ dài 2k ghi luân phiên vào hai tập tin g1 g2} var OutSwithh : boolean; {Nếu OutSwitch = TRUE tin g1, ngược lại ghi vào g2} ghi vào tập Winner: integer; {Ðể định mẩu tin hành hai tập tin f1 f2 ghi tập tin g1 g2} Used: array[1 2] of integer; { Used[ij] ghi số mẩu tin đọc đường tập tin fj } Fin : array[1 2] Of boolean; {Fin[j] có giá trị TRUE đọc hết mẩu tin đường hành fj họac đx dến cuối tập tin fj } Current: array[1 2] Of RecordType; { Current[j] để lưu mẩu tin hành tập tin f[j]} procedure GetRecord(i:integer); {Nếu đọc hết mẩu tin đường hành tập tin fi đến cuối tập tin fi đặt fin[i] = TRUE khơng đọc mẩu tin tập tin fi vào current[i]} begin Used[i] := Used[i] + 1; if (Used[i] = k+1 ) or (i = 1) and ( eof(f1)) or (i = and ( eof(f2)) then fin[i] := TRUE else if i=1 then Read(f1, current[1]) else read(f2, current[2]); end; begin { Khởi tạo } OutSwitch := TRUE; ReSet(f1); ReSet(f2); Nguyễn Văn Linh Trang 89 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ ReWrite(g1); ReWrite(g2); while (not eof(f1)) or (not eof(f2)) begin {Bắt đầu đọc mẩu tin từ hai đường hành hai tập tin f1,f2 } Used[1] := 0; Used[2] := 0; Fin[1] := FALSE ; Fin[2] := FALSE ; GetRecord(1) ; GetRecord(2); while ( not fin[1] ) or (not fin[2]) begin {Trộn hai đường } { Chọn Winner } if Fin[1] then Winner := else if Fin[2] then Winner := else if current[1].key < Current[2].key then Winner := else Winner := 2; if OutSwitch then Write(g1, Current[winner] ) else Write(g2, current[winner] ); GetRecord(Winner); end; OutSwitch := Not OutSwitch; end; end; 4.4.2 Cải tiến xếp trộn Ta thấy q trình xếp trộn nói đường độ dài phải sau logn bước giải thuật kết thúc Chúng ta tiết kiệm thời gian cách chọn số k thích hợp cho k mẩu tin đủ chứa nhớ Mỗi lần đọc vào nhớ k mẩu tin, dùng xếp (chẳng hạn dùng QuickSort) để xếp k mẩu tin ghi luân phiên vào hai tập tin F1 F2 Như bắt đầu xếp trộn với tập tin tổ chức thành đường độ dài k Sau i bước độ dài đường k.2i Giải thuật kết thúc k2i ≥ n hay i ≥ n log k Do số phép truy xuất khối 2n n 2n n 2n < logn tức log Dễ thấy log b k b k b ta tăng tốc độ xếp trộn Ví dụ 4-3: Lấy tập tin F có 23 mẩu tin với khóa số nguyên ví dụ 42: 31 13 98 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 Ta giả sử nhớ chứa mẩu tin, ta đọc mẩu tin F vào nhớ , dùng xếp để xếp chúng ghi phiên vào tập tin F1 F2 F1 13 31 10 40 54 30 39 90 69 77 Nguyễn Văn Linh Trang 90 Sưu t m b i: www.daihoc.com.vn Giải thuật 96 98 CTDL giải thuật lưu trữ 65 85 10 13 F2 10 22 Bước 1: Trộn đường độ dài F1 F2 đường độ dài ghi luân phiên vào hai tập tin G1, G2: G1 13 31 96 98 10 13 30 39 90 F1 G2 10 40 54 65 85 10 22 69 77 F2 Bước 2: Ðổi vai trò F1 G1, F2 G2 cho Trộn đường độ dài tập tin F1 F2 đường độ dài 12 ghi luân phiên vào tập tin G1 G2: G1 10 13 31 40 54 65 85 96 98 F1 G2 8 10 10 13 22 30 39 69 77 90 F2 Bước 3: Ðổi vai trò F1 G1, F2 G2 cho Trộn đường độ dài 12 tập tin F1 F2 đường ghi vào tập tin G1, G2 rỗng G1 8 10 10 10 13 13 22 30 31 39 40 54 65 77 85 90 96 98 Tập tin G1 chứa mẩu tin tập tin G2 rỗng 4.4.3 Trộn nhiều đường (multiway merge) 4.4.3.1 Giải thuật Ðể xếp tập tin F có n mẩu tin ta sử dụng m tập tin (m số chẵn) F[1], F[2], , F[m] Trong trường hợp m=4 ta có giải thuật xếp trộn bình thường Gọi h = m/2, ta có nội dung phương pháp sau (ta giả sử nhớ chứa k mẩu tin) Khởi đầu: Mỗi lần đọc từ tập tin F vào nhớ k mẩu tin, sử dụng xếp để xếp k mẩu tin thành đường ghi luân phiên vào tập tin F[1], F[2], , F[h] Bước 1: Trộn đường độ dài k h tập tin F[1], F[2], , F[h] thành đường độ dài k.h ghi luân phiên vào h tập tin F[h+1], F[h+2], , F[m] Ðổi vai trò F[i] F[h+i]] cho (với 1≤ i ≤ h) Bước 2: Trộn đường độ dài kh h tập tin F[1], F[2], , F[h] thành đường độ dài k.h2 ghi luân phiên vào h tập tin F[h+1], F[h+2], , F[m] Ðổi vai trò F[i] F[h+i]] cho (với ≤ i ≤ h) Sau i bước độ dài đường k.hi giải thuật kết thúc k.hi ≥ n tập tin đường ghi F[h+1] Nguyễn Văn Linh Trang 91 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ 4.4.3.2 Ðánh giá giải thuật xếp trộn nhiều đường n k Theo giải thuật kết thúc sau i bước, với ≥ n hay i ≥ logh Mỗi bước ta phải đọc từ h tập tin ghi vào h tập tin, trung bình tập tin có n mẩu tin h Ta giả sử khối lưu b mẩu tin bước phải truy xuất n n 2n * h * n 2n k khối Do cần logh k bước nên tổng cộng ta cần = log h h*b b b n n 2n 2n k log thủ tục mergeSort nói phép truy xuất khối.Ta thấy rõ ràng log h < b b k trường hợp đặc biêt h = Ví dụ 4-4: Lấy tập tin F có 23 mẩu tin với khóa số nguyên ví dụ 42 31 13 98 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 Sử dụng tập tin để xếp tập tin F Ta giả sử nhớ chứa mẩu tin, ta đọc mẩu tin F vào nhớ , dùng xếp để xếp chúng ghi phiên vào tập tin F[1], F[2] F[3] sau: F[1] 13 31 F[2] 96 98 30 39 90 10 22 F[3] 10 40 54 65 85 69 77 10 13 Bước 1: Trộn đường độü dài tập tin F[1], F[2], F[3] thành đường độ dài ghi vào tập tin F[4], F[5] F[6] F[4] 10 13 31 40 54 96 98 F[1] F[5] 10 13 30 39 65 85 90 F[2] F[6] 10 22 69 77 F[3] Bước 2: Ðổi vai trò F[1] cho F[4], F[2] cho F[5] F[3] cho F[6] Trộn đường độ dài tập tin F[1], F[2], F[3] thành đường độ dài 23 ghi vào tập tin F[4] F[4] 8 10 10 10 13 13 22 30 31 39 40 54 65 69 77 85 90 96 98 Tập tin F[4] chứa mẩu tin F[5] F[6] rỗng Nguyễn Văn Linh Trang 92 Sưu t m b i: www.daihoc.com.vn ... lệnh, tức đủ để xếp số nguyên theo giải thuật QuickSort Vì đánh giá Nguyễn Văn Linh Trang 86 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ giải thuật thao tác nhớ ngoài, tập trung... dài đường k.hi giải thuật kết thúc k.hi ≥ n tập tin đường ghi F[h+1] Nguyễn Văn Linh Trang 91 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ 4.4.3.2 Ðánh giá giải thuật xếp trộn... toán vậy, số lượng liệu vượt khả lưu trữ nhớ Ðể giải tốn phải dùng nhớ để lưu trữ xử lý Các thiết Nguyễn Văn Linh Trang 85 Sưu t m b i: www.daihoc.com.vn Giải thuật CTDL giải thuật lưu trữ bị lưu