Giáo trình Cấu trúc dữ liệu - thuật toán – PGS. TS. Đinh Mạnh Tường

159 8 0
Giáo trình Cấu trúc dữ liệu - thuật toán – PGS. TS. Đinh Mạnh Tường

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nội dung của giáo trình Cấu trúc dữ liệu - thuật toán bao gồm 8 chương với các nội dung: thuật toán và phân tích thuật toán; kiểu dữ liệu, cấu trúc dữ liệu và mô hình dữ liệu; danh sách; cây; tập hợp; bảng; các cấu trúc dữ liệu ở bộ nhớ ngoài.

GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mnh Tng Lời nói đầu Sách trình bày cấu trúc liệu (CTDL) thuật toán Các kiến thức CTDL thuật toán đóng vai trò quan trọng việc đào tạo cử nhân tin học Sách đựơc hình thành sở giảng CTDL thuật toán mà đà đọc nhiều năm khoa Toán-Cơ-Tin học khoa Công nghệ thông tin Đại học khoa học tự nhiên, Đại học quốc gia Hà nội Sách viết chủ yếu để làm tài liệu tham khảo cho sinh viên Khoa Công nghƯ th«ng tin, nh­ng nã cịng rÊt bỉ Ých cho độc giả khác cần có hiểu biết đầy đủ CTDL thuật toán Chúng mô tả CTDL thuật toán ngôn ngữ Pascal, Pascal ngôn ngữ nhiều người biết đến ngôn ngữ sử dụng nhiều để trình bày thuật toán sách báo Sách gồm hai phần Phần nói CTDL, phần nói thuật toán Nội dung phần gồm chương sau Chương trình bày khái niệm thuật toán phân tích thuật toán Chương trình bày khái niệm CTDL, mô hình liệu, kiểu liệu trừu tượng (DLTT) Chương trình bày mô hình liệu, danh sách phương pháp cài đặt danh sách (bởi mảng CTDL danh sách liên kết) Hai kiểu DLTT đặc biệt quan trọng hàng ngăn xếp (stack) xét chương Chương trình bày số ứng dụng danh sách, hàng, ngăn xếp thiết kế thuật toán Chương trình bày mô hình liệu cây, phương pháp cài đặt cây, nhị phân, tìm kiếm nhị phân cân Chương nói mô hình liệu tập hợp, phương pháp cài đặt tập hợp, từ điển cài đặt từ điển bảng băm, hàng ưu tiên cài đặt hàng ưu tiên heap Chương đề cập đến phương pháp cài đặt dạng bảng khác Các CTDL nhớ (file băm, file số, B-cây) trình bày chương Tác giả PTS Đinh Mạnh Tường Su Tm Bởi : daihoc.com.vn GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường mơc lơc Ch­¬ng I: Thuật toán phân tích thuật toán 1.1 Thuật toán 1.1.1 Kh¸i niƯm tht to¸n 1.1.2 BiĨu diƠn tht to¸n 1.1.3 Các vấn đề liên quan đến thuật toán 1.2 Phân tích thuật toán 1.2.1 Tính hiệu thuật toán 1.2.2 Tại lại cần thuật toán có hiệu 1.2.3 Đánh giá thòi gian thực thuật toán náo 1.2.4 Ký hiệu ô lớn đánh gi¸ thêi gian thùc hiƯn tht to¸n b»ng ký hiƯu ô lớn 1.2.5 Các qui tắc đánh giá thời gian thực thuật toán 1.2.6 Phân tích số thuật toán Chương II: Kiểu liệu, cấu trúc liệu mô hình liệu 2.1 Biểu diễn liệu 2.2 Kiểu liệu cấu trúc liệu 2.3 Hệ kiểu ngôn ngữ Pascal 2.4 Mô hình liệu kiểu liệu trừu tượng Chương III: Danh sách 3.1 Danh sách 3.2 Cài đặt danh sách mảng 3.3 Tìm kiếm danh sách 3.3.1 Vấn đề tìm kiếm 3.3.2 Tìm kiếm 3.3.3 Tìm kiếm nhị phân 3.4 Cấu trúc liệu danh sách liên kết 3.4.1 Danh sách liên kết 3.4.2 Các phép toán danh sách liên kết 3.4.3 So sánh hai phương pháp 3.5 Các dạng danh sách liên kết khác 3.5.1 Danh sách vòng tròn 3.5.2 Danh sách hai liên kết 3.6 øng dơng danh s¸ch 3.7 Stack 3.7.1 Stack 3.7.2 Cài đặt stack mảng 3.7.3 Cài đặt stack danh sách liên kết 3.8 Giá trị biểu thøc 3.9 Hµng Sưu Tầm Bởi : daihoc.com.vn 5 9 10 11 12 14 17 20 20 21 23 27 32 32 34 37 37 38 39 41 41 42 47 47 47 51 53 57 57 58 60 63 68 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường 3.9.1 Hàng 3.9.2 Cài đặt hàng mảng 3.9.3 Cài đặt hàng mảng vòng tròn 3.9.4 Cài đặt hàng danh sách liên kết Chương IV: Cây 4.1 Cây khái niệm 4.2 Các phép toán 4.2.1 Các phép toán 4.2.2 Đi qua cây(Diệt cây) 4.3 Cài đặt 4.3.1 Biểu diễn danh sách đỉnh 4.3.2 Biểu diễn trưởng em liền kề đỉnh 4.3.3 Biểu diễn cha đỉnh 4.4 Cây nhị phân 4.5 Cây tìm kiếm nhị phân 4.6 Thời gian thực phép toán tìm kiếm nhị phân 4.7 Cây cân 4.8 Thời gian thực phép toán cân Chương V: Tập hợp 5.1 Tập hợp phép toán tập hợp 5.2 Cài đặt tập hợp 5.2.1 Cài đặt tập hợp vecto bit 5.2.2 Cài đặt tập hợp danh sách 5.3 Từ điển 5.4 Cấu trúc liệu bảng băm Cài đặt từ điển bảng băm 5.4.1 Bảng băm mở 5.4.2 Bảng băm đóng 136 5.5 Phân tích đánh giá phương pháp băm 5.6 Hàng ưu tiên 5.7 Heap cài đặt hàng ưu tiên heap Chương VI: Bảng 6.1 Kiểu liệu trừu tượng bảng 6.2 Cài đặt bảng 6.3 Bảng chữ nhật 6.3.1 Bảng tam giác bảng lược 6.3.2 Bảng thưa thớt 6.4 Trò chơi đời sống Chương VII: Các cấu trúc liệu nhớ 7.1 Mô hình tổ chức liệu nhớ 7.2 File băm 174 7.3 File cã chØ sè 7.4 B-c©y Sưu Tầm Bởi : daihoc.com.vn 68 68 71 73 76 76 79 79 80 84 84 90 92 93 99 106 109 120 122 122 125 125 126 131 131 132 142 145 146 154 154 155 157 158 160 162 172 172 175 178 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- inh Mnh Tng Chương I Thuật toán phân tích tht to¸n 1.1 Tht to¸n 1.1.1 Kh¸i niƯm tht to¸n Thuật toán (algorithm) khái niệm quan trọng tin học Thuật ngữ thuật toán xuất phát từ nhà toán học A rập Abu Ja'far Mohammed ibn Musa al Khowarizmi (khoảng năm 825) Tuy nhiên lúc nhiều kỷ sau, không mang néi dung nh­ ngµy chóng ta quan niƯm Tht to¸n nỉi tiÕng nhÊt, cã tõ thêi cỉ Hy lạp thuật toán Euclid, thuật toán tìm ước chung lớn hai số nguyên Có thể mô tả thuật toán sau : Thuật toán Euclid Input : m, n nguyên dương Output : g, ước chung lớn m n Phương pháp : Bước : Tìm r, phần dư phép chia m cho n B­íc : NÕu r = O, th× g n (gán giá trị n cho g) dừng lại Trong trường hợp ngược lại (r 0), m n, n r quay lại bước Chúng ta quan niệm bước cần thực để làm ăn, mô tả sách dạy chế biến ăn, thuật toán Cũng xem bước cần tiến hành để gấp đồ chơi giấy, trình bầy sách dạy gấp đồ chơi giấy, thuật toán Phương pháp thực phép cộng, nhân số nguyên, đà học cấp I thuật toán Trong sách cần đến định nghĩa không hình thức thuật toán : Thuật toán dÃy hữu hạn bước, bước mô tả xác phép toán hành động cần thực hiện, để giải số vấn đề (Từ điểm Oxford Dictionary định nghĩa, Algorithm: set of well - defined rules for solving a problem in a finite number of steps.) Định nghĩa này, tất nhiên, chứa đựng nhiều điều chưa rõ ràng Để hiểu đầy đủ ý nghĩa khái niệm thuật toán, nêu đặc trưng sau thuËt to¸n (Xem D.E Knuth [1968] The Art of Computer Programming, vol I Fundamental Algorithms) Input Mỗi thuật toán cần có số (có thể không) liệu vào (input) Đó giá trị cần đưa vào thuật toán bắt đầu làm việc Các liệu cần lấy từ tập hợp giá trị cụ thể Chẳng hạn, thuật toán Euclid trên, m n liệu vào lấy từ tập số nguyên dương Output Mỗi thuật toán cần có nhiều liệu (output) Đó giá trị có quan hệ hoàn toàn xác định với liệu vào kết qu¶ cđa sù thùc hiƯn tht Sưu Tầm Bởi : daihoc.com.vn GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường to¸n Trong thuËt to¸n Euclid cã liệu ra, g, thực đến bước phải dừng lại (trường hợp r = 0), giá trị g ước chung lớn m n Tính xác định Mỗi bước thuật toán cần phải mô tả c¸ch chÝnh x¸c, chØ cã mét c¸ch hiĨu nhÊt Hiển nhiên, đòi hỏi quan trọng Bëi v×, nÕu mét b­íc cã thĨ hiĨu theo nhiỊu cách khác nhau, liệu vào, ng­êi thùc hiƯn tht to¸n kh¸c cã thĨ dÉn đến kết khác Nếu ta mô tả thuật toán ngôn ngữ thông thường, ®¶m b¶o ng­êi ®äc hiĨu ®óng ý cđa ng­êi viÕt thuật toán Để đảm bảo đòi hỏi này, thuật toán cần mô tả ngôn ngữ lập trình (ngôn ngữ máy, hợp ngữ ngôn ngữ bậc cao Pascal, Fortran, C, ) Trong ngôn ngữ này, mệnh đề tạo thành theo qui tắc cú pháp nghiêm ngặt có ý nghĩa Tính khả thi Tất phép toán có mặt bước thuật toán phải đủ đơn giản Điều có nghĩa là, phép toán phải cho, nguyên tắc thực người giấy trắng bút chì khoảng thời gian hữu hạn Chẳng hạn thuật toán Euclid, ta cần thực phép chia số nguyên, phép gán phép so sánh để biết r = hay r  TÝnh dõng Víi mäi liệu vào thoả mÃn điều kiện liệu vào (tức lấy từ tập giá trị liệu vào), thuật toán phải dừng lại sau số hữu hạn bước thực Chẳng hạn, thuật toán Euclid thoả mÃn điều kiện Bởi giá trị r nhỏ n (khi thùc hiƯn b­íc 1), nÕu r  giá trị n bước giá trÞ cđa r ë b­íc tr­íc, ta cã n > r = n1 > r1 = n2 > r2 DÃy số nguyên dương giảm dần cần phải kết thúc 0, sau số bước giá trị r phải 0, thuật toán dừng Với vấn đề đặt ra, có nhiều thuật toán giải Một vấn đề có thuật toán giải gọi vấn đề giải (bằng thuật toán) Chẳng hạn, vấn đề tìm nghiệm hệ phương trình tuyến tính vấn đề giải Một vấn đề không tồn thuật toán giải gọi vấn đề không giải (bằng thuật toán) Một thành tựu xuất sắc toán học kỷ 20 đà tìm vấn đề không giải thuật toán Trên đà trình bày định nghĩa không hình thức thuật toán Có thể xác định khái niệm thuật toán cách xác cách sử dụng hệ hình thức Có nhiều hệ hình thức mô tả thuật toán : máy Turing, hệ thuật toán Markôp, văn phạm Chomsky dạng 0, Song vấn đề không thuộc phạm vi vấn đề mà quan tâm Đối với chúng ta, hiểu biết trực quan, không hình thức khái niệm thuật toán đủ 1.1.2 Biểu diễn thuật toán Có nhiều phương pháp biểu diễn thuật toán Cã thĨ biĨu diƠn tht to¸n b»ng danh s¸ch c¸c bước, bước diễn đạt ngôn ngữ thông thường ký hiệu toán học Có thể biểu diễn thuật toán sơ đồ khối Tuy nhiên, đà nói, để đảm bảo tính xác định thuật toán, thuật toán cần viết ngôn ngữ lập trình Một chương trình biểu diễn thuật toán ngôn ngữ lập trình đà chọn Để đọc dễ dàng phần tiếp theo, độc giả cần làm quen với ngôn ngữ lập trình Pascal Đó ngôn ngữ thường chọn để trình bày thuật toán sách báo Trong sách trình bày thuật toán thủ tục hàm ngôn ngữ tựa Pascal Nói tựa Pascal, nhiều trường hợp, ngắn gọn, không hoàn toàn tuân theo qui định Pascal Ngoài ra, có trường Su Tm Bi : daihoc.com.vn GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường hỵp, chóng ta xư dơng ký hiệu toán học mệnh đề ngôn ngữ tự nhiên (tiếng Anh tiếng Việt) Sau số ví dụ Ví dụ : Thuật toán kiểm tra số nguyên n(n > 2) có số nguyên tố hay không function var begin NGTO (n : integer) : boolean ; a : integer ; NGTO : = true ; a:=2; while a 1, ta gäi Mij ma trận cấp n -1, nhận từ ma trận M cách loại bỏ dòng thứ i vµ cét thø j, vµ n  det( M )   ( 1) 1 j a1 j det M j  j 1 DƠ dµng thÊy r»ng, ta tính định thức trực tiếp dựa vào công thức đệ qui này, cần thực n! phép nhân Một số khổng lồ với n không lấy làm lớn Ngay với Su Tm Bi : daihoc.com.vn GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- inh Mnh Tng tốc độ máy tính lớn đại, để tính định thức ma trận cấp n = 25, cần hàng triệu năm ! Một thuật toán cổ điển khác, thuật toán Gauss - Jordan thuật toán tính định thức cấp n thời gian n3 Để tính định thức cấp n = 100 thuật toán máy tính lớn ta cần đến giây Ví dụ : Bài toán tháp Hà Nội Trong ví dụ 2, mục 1.1 ta đà đưa thuật toán để chuyển n ®Üa tõ cäc A sang cäc B Ta thö tÝnh xem, cần thực lần chuyển đĩa từ cọc sang cọc khác (không đặt đĩa to lên đĩa nhỏ) để chuyển n đĩa từ cọc A sang cọc B Gọi số F(n) Từ thuËt to¸n, ta cã : F(1) = 1, F(n) = 2F(n-1) + víi n > víi n = 1, 2, ta cã F(1) = 1, F(2) = 3, F(3) = Bằng cách qui nạp, ta chứng minh F(n) = 2n - Với n = 64, ta có F(64) = 264 -1 lần chuyển Giả sử lần chuyển đĩa từ cọc sang cọc khác, cần giây Khi để thực 264 -1 lần chuyển, ta cần x 1011 năm Nếu tuổi vũ trụ 10 tỉ năm, ta cần 50 lần tuổi vũ trụ để chuyển 64 ®Üa ! §èi víi mét vÊn ®Ị cã thĨ cã nhiều thuật toán, số thuật toán hiệu (chạy nhanh hơn) thuật toán Tuy nhiên, có vấn đề không tồn thuật toán hiệu quả, tức có thuật toán, song thời gian thực lớn, thực tế thực được, dù máy tính lớn đại 1.2.3 Đánh giá thời gian thực thuật toán ? Có hai cách tiếp cận để đánh giá thời gian thực thuật toán.Trong phương pháp thử nghiệm, viết chương trình cho chạy chương trình với liệu vào khác máy tính Thời gian chạy chương trình phụ thuộc vào nhân tố sau : Các liệu vào Chương trình dịch để chuyển chương trình nguồn thành mà máy Tốc độ thực phép toán máy tính sử dụng để chạy chương trình Vì thời gian chạy chương trình phụ thuộc vào nhiều nhân tố, nên ta biểu diễn xác thời gian chạy đơn vị thời gian chuẩn, chẳng hạn giây Trong phương pháp lý thuyết (đó phương pháp sử dụng sách này), ta coi thời gian thực thuật toán hàm số cỡ liệu vào Cỡ liệu vào tham số đặc trưng cho liệu vào, có ảnh hưởng định đến thời gian thực chương trình Cái mà chọn làm cỡ liệu vào phụ thuộc vào thuật toán cụ thể Đối với thuật toán xếp mảng, cỡ liệu số thành phần mảng Đối với thuật toán giải hệ n phương trình tuyến tính với n ẩn, ta chọn n cỡ Thông thường cỡ liệu vào số nguyên dương n Ta sử dụng hàm số T(n), n cỡ liệu vào, để biểu diễn thời gian thùc hiƯn cđa mét tht to¸n Sưu Tầm Bởi : daihoc.com.vn 10 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường Thêi gian thùc hiƯn tht to¸n T(n) nói chung không phụ thuộc vào cỡ liệu vào, mà phụ thuộc vào liệu vào cá biệt Chẳng hạn, ta xét toán xác định đối tượng a có mặt danh sách n phần tử (a1, a2, an) hay không Thuật toán là, so sánh a với phần tử danh sách từ đầu đến cuối danh sách, gặp phần tử = a dừng lại, đến hết danh sách mà không gặp a, trường hợp a danh sách Các liệu vào a danh sách (a1, a2, , an) (có thể biểu diễn danh sách mảng, chẳng hạn) Cỡ liệu vào n Nếu a1 = a cần phép so sánh Nếu a1a, a2 = a, cần phép so sánh Còn  a, i = 1, , n-1 vµ an = a, a danh sách, ta cần n phÐp so s¸nh NÕu xem thêi gian thùc hiƯn T(n) số phép toán so sánh, ta có T(n) , = phép toán sơ cấp Phép toán so sánh hai xâu ký tự xem phép toán sơ cấp, thời gian thực phụ thuộc vào độ dài xâu 1.2.4 Ký hiệu ô lớn đánh giá thời gian thực thuật toán ký hiệu ô lớn Khi đánh giá thời gian thực phương pháp toán học, bỏ qua nhân tố phụ thuộc vào cách cài đặt tập trung vào xác định độ lín cđa thêi gian thùc hiƯn T(n) Ký hiƯu to¸n học ô lớn sử dụng để mô tả độ lớn hàm T(n) Giả sử n số nguyên không âm, T(n) f(n) hàm thực không âm Ta viết T(n) = 0(f(n)) (đọc : T(n) ô lớn f(n)), tồn số dương c no cho T(n)  c f(n), víi mäi n  no NÕu mét tht to¸n cã thêi gian thùc hiƯn T(n) = 0(f(n)), chóng ta sÏ nãi r»ng tht to¸n cã thêi gian thực cấp f(n) Từ định nghĩa ký hiệu ô lín, ta cã thĨ xem r»ng hµm f(n) lµ cËn T(n) Ví dụ : Giả sử T(n) = 3n2 + 5n + Ta cã 3n2 + 5n + nil begin with p ^ with entry ^ begin if (state = dead) and (count = 3) then begin state : = alive; for i : = row -1 to row + for j : = col - to col + if (i row) and (j < > col) then begin GetTable (i, j, q); Sưu Tầm Bởi : daihoc.com.vn 149 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường q ^ count : = q ^ count + 1; Add (q, NextChange) end end else if (state = alive) and ( (count < = 1) or (count > = 4) ) then bigin state : = dead; for i : = row - to row + for j : = col - to col + if (i < > row) and (j < > col) then begin Get Table ( i, j, q); q ^ count : = q ^ count - 1; Add (q, NextChange) end end end; {hÕt lÖnh with} p : = p; p : = p ^ next; dispose (p1); end {hết vòng lặp while} end; {hết thủ tục Traverse} Trong chương trình LifeGame, ta đà dùng danh sách Change ghi lại tế bào mà số tế bào sống lân cận chúng hệ có thay đổi so với hệ trước Chúng ta cần phải qua danh sách Change để tìm tế bào ®ang chÕt sÏ trë thµnh sèng vµ ®ang sèng sÏ trở thành chết hệ sau Do lÃng phí nhiều thời gian Bây thay cho dïng danh s¸ch Change, nÕu chóng ta sư dơng hai danh sách BecomeLive ghi lại tế bào chết có khả thành sống BecomeDead ghi lại tế bào sống có khả thành chết ta thu hẹp phạm vi tế bào cần xem xét Chúng để lại cho bạn đọc tiếp tục phát triển viết chương trình thực đề án nµy Sưu Tầm Bởi : daihoc.com.vn 150 GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường Ch­¬ng Các cấu trúc liệu nhớ Chương giành để trình bày mô hình tổ chức liệu nhớ ngoài, cấu trúc liệu để lưu giữ tìm kiếm thông tin nhớ : file băm, file có số, B Với phương pháp tổ chức file, trình bày thuật toán để thực phép toán tìm kiếm, xen vào, loại bỏ sửa đổi file 7.1 Mô hình tổ chức liệu nhớ : Các cấu trúc liệu (CTDL) mà xét từ đầu tới CTDL lưu giữ nhớ Nhưng nhiều áp dụng, số liệu cần lưu giữ vượt khả nhớ Các máy tính trang bị thiết bị nhớ ngoài, thông thường đĩa Nó có khả lưu giữ khối lượng lớn liệu Tuy nhiên thiết bị nhớ có đặc trưng truy cập hoàn toàn khác nhớ Sau trình bày mô hình tổng quát mà hệ điều hành đại sử dụng để quản lý liệu nhớ Trong mục sau xét CTDL để lưu giữ file cho phép toán file thực cách hiệu Đó file băm, file có số, B - Các hệ điều hành đại cho khả tổ chức liệu nhớ dạng file Chúng ta quan niệm file tập hợp liệu (các ghi) lưu giữ nhớ Các ghi file có độ dài cố định (số trường ghi cố định) có độ dài thay đổi Các file với ghi có độ dài cố định sử dụng nhiều hệ quản trị sở liệu Các file với ghi có độ dài thay đổi hay sử dụng để lưu giữ thông tin văn Chúng ta xét file với ghi có độ dài cố định Các kỹ thuật mà trình bày để lưu giữ thao tác với file sửa đổi để áp dụng cho file với ghi có độ dài thay đổi Trong chương hiểu khoá ghi tập hợp trường ghi hoàn toàn xác định ghi, tức hai ghi khác phải có giá trị khác trường thuộc khoá Trên file cần thực phép toán sau : Tìm kiếm : tìm file ghi với giá trị cho trước nhóm trường ghi Xen vào : xen vào file ghi Loại bỏ : loại bỏ khỏi file tất ghi với giá trị cho trước nhóm trường ghi Sửa đổi : sửa tất ghi với giá trị cho trước nhóm trường cách đặt lại giá trị trường định giá trị đà cho Su Tm Bi : daihoc.com.vn 151 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường VÝ dơ : gi¶ sư chóng ta cã file với ghi chứa trường (tên sản phẩm, nơi sản xuất, giá) Ta cần tìm tất ghi với tên sản phẩm = bóng đèn 60W; thêm vào file ghi (quạt bàn, nhà máy điện cơ, 69.000); loại bỏ tất ghi với nơi sản xuất = nhà máy X; sửa tất ghi với nơi sản xuất = nhà máy Z cách thay giá cũ giá Hệ điều hành chia nhớ thành khối vật lý (physical block) có cỡ nhau, ta gọi tắt khối Cỡ khối thay đổi tuỳ theo hệ điều hành, thông thường từ 29 byte đến 212 byte Mỗi khối có địa chỉ, địa tuyệt đối khối đĩa, tức byte khối File lưu giữ số khối, khối lưu giữ số ghi file Trong mét khèi cã thĨ cßn mét sè byte ch­a sử dụng đến Mỗi ghi có địa chỉ, địa bảnghi cặp (k, s), k địa khối chứa ghi, s số byte khối đứng trước byte bắt đầu ghi (s gọi offset) sau nói đến trỏ tới khối (tới ghi) ta hiểu địa khối (bản ghi) File lưu giữ danh sách liên kết khối Điển hình hơn, file lưu giữ khối tổ chức dạng Các khối không chứa trỏ tới số khối Trong khối giành số byte (phần gọi đầu khối) để chứa thông tin cần thiết khối, chẳng hạn để ghi số ghi khối Trong khối, không gian để lưu trữ ghi gọi khối Cần phần biệt khối đầy rỗng Khối đầy khối có chứa ghi, ngược lại khối rỗng Để khối đầy rỗng, đầu khối ta giành cho khối bit (gọi bit đầy), bit nhận giá trị (0) khối tương ứng đầy (rỗng) Một cách khác, khối ta giành bit (bit xoá), bit nhận giá trị có nghĩa ghi đà bị xoá Đánh giá thời gian thực phép toán file Các phép toán file (tìm kiếm, xen vào, loại bỏ, sửa đổi) thực thông qua phép toán bản, đọc khối liệu nhớ vào vùng đệm nhớ viết liệu vùng đệm nhớ vào khối nhớ Ta gọi phép toán phép toán truy cập khối (block access) Cần chó ý r»ng, viƯc chun mét khèi d÷ liƯu ë nhớ vào nhớ đòi hỏi nhiều thời gian việc tìm kiếm đữ liệu khối đà nhớ Cũng cần biết , liệu cần phải có nhớ trước sử dụng cách Vì đánh giá thời gian thực thuật toán thao tác với liệu lưu giữ file, phải tính số lần cần thiết phải thực phép toán truy cập khối Số lần thực phép toán truy cập khối dùng để biểu diễn tính hiệu thuật toán file Tổ chức file đơn giản Phương pháp đơn giản nhất, đồng thời hiệu để lưu giữ ghi file là, xếp ghi file vào sè khèi cÇn thiÕt theo mét trËt tù tuú ý Các khối liên kết với trỏ tạo thành danh sách liên kết khèi Mét c¸ch kh¸c, ta cịng cã thĨ sư dơng bảng để lưu giữ địa khối Phép toán tìm kiếm ghi theo giá trị đà biết số trường thực cách đọc ghi khối Việc xen vào file ghi thực cách xen vào khối cuối file Su Tm Bi : daihoc.com.vn 152 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- inh Mnh Tng chỗ, không thêm vào file khối đặt ghi cần xen vào Muốn loại bỏ ghi, trước hết ta cần định vị ghi cần loại bỏ, sau ta tiến hành xoá bỏ Việc xoá bỏ ghi thực nhiều cách Chẳng hạn đặt lại giá trị bit xoá ghi Trong trường hợp việc sử dụng lại không gian ghi để lưu giữ ghi cần phải thận trọng Nếu hệ sở liệu có sử dụng trỏ trỏ tới ghi (trường hợp này, ghi xem bị đóng chặt), ta không sử dụng không gian để lưu giữ ghi Với cách tổ chức file trên, phép toán file chậm, chúng đòi hỏi phải xem xét toàn ghi file Trong mục sau trình bày tổ chức file ưu việt hơn, cho phép ta lần cần truy cập đến ghi, cần đọc vào nhớ phần nhỏ file Chúng ta viết Pascal ngôn ngữ khác thủ tục có đề cập đến liệu mức khối vật lý địa khối Do phương pháp tổ chức file trình bày sau đây, ta mô tả cách không hình thức thuật toán thực phép toán file 7.2 File băm : Cấu trúc file băm hoàn toàn tương tự cấu trúc bảng băm mở nhớ đà đề cập đến chương Tư tưởng tổ chức file băm sau : ta chia tập hợp ghi file thành K lớp Với lớp, tạo danh sách liên kết khối, khối chứa ghi lớp Ta sư dơng mét b¶ng gåm K trá, (b¶ng chØ dẫn) trỏ trỏ tới khối danh sách liên kết khối lớp Hình 7.1 biểu diễn cấu trúc file băm 21 15 i 32 25 11 41 K-1 Hình 7.1 Cấu trúc file băm Việc phân phối ghi file vào lớp thực hàm băm h Đó hàm xác định tập giá trị khoá ghi nhận giá trị nguyên từ đến K-1 Nếu x giá trị khoá h(x) = i, i K-1, ghi với khoá x thuộc lớp thứ i Để tìm kiếm ghi với khoá x cho trước, ta tính h(x), trỏ chứa thành phần thứ i = h(x) bảng dẫn ta tìm đến khối lớp i đọc khối, ta tìm ghi với khoá x, đọc hết khối mà không thấy có nghĩa ghi không cã ë file Sưu Tầm Bởi : daihoc.com.vn 153 GT Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mnh Tng Muốn xen vào file ghi với khoá x, ta cÇn kiĨm tra xem nã cã ë file hay ch­a NÕu ch­a ta cã thÓ xen nã vào khối danh sách khối h (x), đủ chỗ cho ghi Nếu tất khối lớp h(x) đầy, ta thêm vào danh sách khối lớp h(x) khối đặt ghi vào Để loại bỏ ghi với khoá x, trước hết ta cần xác định vị trí ghi file cách áp dụng thủ tục tìm kiếm Sau xoá bỏ ghi cách, chẳng hạn cho bit xoá nhận giá trị Cấu trúc file băm cấu trúc có hiệu phép toán file đòi hỏi đến việc truy cập ghi theo khoá Giả sử file có n ghi, hàm băm thiết kế tốt, trung bình lớp chứa n/k ghi Giả sử khối chứa m ghi Như lớp gồm khoảng n/mk khối Tức phép toán file băm k lần nhanh so với tổ chức file 7.3 File có số ( indexed file) Cấu trúc file băm tạo dựa khoá ghi Trong mục trình bày phương pháp tổ chức file khác dựa vào khoá ghi cách xếp ghi theo thứ tự tăng dần giá trị khoá Cấu trúc file có số hình thành sau : Ta xếp ghi file theo thứ tự khoá tăng dần vào số khối cần thiết Ta xếp ghi vào khối khối đầy Song thông thường, khối người ta để giành lại không gian cho ghi thêm vào file sau Lý để phép toán xen vào file thực dễ dàng Ta gọi file gồm ghi chứa khối file chính, để phân biệt với file số tạo sau Chỉ số khối cặp (v, b), b địa khối, v giá trị khoá nhỏ ghi khèi b Tõ c¸c khèi cđa file chÝnh, ta sÏ t¹o file chØ sè (index file), file gồm số khối file Các số khối xếp theo thứ tự tăng dần khoá vào số khối cần thiết Các khối móc nối với tạo thành danh sách liên kết Trong trường hợp file số gồm danh sách liên kết khèi, c¸c khèi chøa c¸c chØ sè khèi cđa file chÝnh Mét c¸ch kh¸c ta cịng cã thĨ sư dơng bảng để lưu giữ địa khối file số Hình 7.2 minh hoạ cấu trúc cña file cã chØ sè file chØ sè file chÝnh 17 12 17 35 21 33 35 49 37 42 49 51 H×nh 7.2 CÊu tróc file có số Sau xét thực phép toán file tổ chức dạng file có số Tìm kiếm : Su Tầm Bởi : daihoc.com.vn 154 56 GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường Gi¶ sư ta cần tìm ghi x với khoá v cho trước Trước hết ta cần tìm file số số (v1, b1) cho v1 giá trị khoá lớn file số thoả mÃn ®iỊu kiƯn v1  v Ta sÏ nãi v1 phđ v Việc tìm kiếm file số giá trị khoá v1 phủ giá trị khoá v cho trước thực cách tìm kiếm tìm kiếm nhị phân Trong tìm kiếm tuần tự, ta cần xem xét tất ghi file chØ sè cho tíi t×m thÊy mét chØ sè (v1, b1) víi v1 phđ v NÕu v nhá giá trị khoá ghi file số điều có nghĩa file số không chứa giá trị khoá phủ v Phương pháp có hiệu tìm kiếm nhị phân Giả sử ghi file số xếp vào khối đánh số từ đến m Xét khối thứ m/2 Giả sử (v2, b2) ghi khối So sánh giá trị khoá cho trước v với giá trị khoá v2 Nếu v < v2 ta tiến hành tìm kiếm khối 1,2, , m/2 - Còn v v2, ta tiến hành tìm kiếm khối m/2 , m/2 + 1, , m Quá trình lặp lại ta cần tìm kiếm khối Lúc ta việc so sánh giá trị khoá v cho trước với giá trị khoá chứa khối Để tìm ghi x với khoá v cho trước, trước hết ta tìm file số số (v1, b1) với v1 phủ v Sau xét ghi khối có địa b1 để phát ghi có khoá v, không khối ghi với khoá v Nếu file số không chứa giá trị khoá v1 phủ v, file không chứa ghi có khoá v Xen vào : Giả sử ta cần thêm vào file ghi r với giá trị khoá v Giả sử file chứa c¸c khèi B1, B2, , B k giá trị khoá ghi khối Bi nhỏ giá trị khoá khối B i +1 Trước hết ta cần tìm khối Bi cần phải xếp ghi r vào Muốn ta áp dụng thủ tục tìm kiếm file số để tìm số (v1, b1) với v1 phủ v Nếu tìm thấy B i khối có địa b 1, ngược lại B i khối B Trong trường hợp B i chưa đầy r chưa có khối B i ta xếp ghi r vào vị trí nó, tức phải đảm bảo trật tự tăng dần theo khoá Nếu Bi B1 sau thêm vào ghi r, trở thành ghi khối B1, ta cần phải tiến hành sửa đổi số khối B1 file số Trong trường hợp B i đà đầy, ta tiến hành xếp ghi r vào vị trí B i, thừa ghi Tìm đến khối B i + (ta biết địa khối B i + cách tìm số) Nếu B i + chưa đầy ta xếp ghi thừa B i vào vị trí khối B i + đồng thời sửa l¹i chØ sè cđa B i + file số Nếu khối đầy không tồn B i B k ta thêm vào file khối xếp ghi r vào khối Chỉ số khối thêm vào cần phải xen vào file số Loại bỏ : Để loại bỏ ghi r với khoá v, ta cần áp dụng thủ tục tìm kiếm để định vị ghi file Sau tiến hành xoá bỏ r nhiều cách khác nhau, chẳng hạn đặt lại giá trị bit đầy/rỗng tương ứng với ghi cần xoá đầu khối Sưu Tầm Bởi : daihoc.com.vn 155 GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường Sưa ®ỉi : Giả sử ta cần sửa đổi ghi với khoá v Nếu giá trị cần sửa không giá trị trường thuộc khoá, ta cần áp dụng thủ tục tìm kiếm để tìm ghi tiến hành sửa đổi cần thiết Nếu giá trị cần sửa thuộc khoá việc sửa đổi thực cách loại bỏ ghi cũ, xen vào ghi 7.4 B - Mục đích nghiên cứu cấu trúc liệu biểu diễn file cho phép toán file thực hiệu quả, tức với số lần thực phép toán truy cập khối được, cần phải tìm kiếm, xen vào, loại bỏ sửa đổi ghi file B - cấu trúc liệu đặc biệt thích hợp để biểu diễn file Trong mục trình bày B - kỹ thuật để thực phép toán tìm kiếm, xen vào loại bỏ B - Cây tìm kiếm đa nhánh ( Multiway Search Trees) Cây tìm kiếm m nhánh tổng quát hoá tìm kiếm nhị phân, đỉnh có nhiều m Các đỉnh gắn với giá trị khoá ghi Nếu đỉnh a có r ( r m) chứa r - kho¸ ( k1, k2, , kr1), ®ã k1 < k2< < kr-1 (Chóng ta giả thiết giá trị khoá xÕp thø tù tun tÝnh) Tỉng qu¸t ho¸ tÝnh chÊt khoá gắn với đỉnh tìm kiếm nhị phân, tìm kiếm m nhánh phải thoả mÃn tính chất sau Nếu đỉnh a có r chứa khoá ( k1, k2, , kr-1) khoá chứa đỉnh thứ đỉnh a nhỏ k1, khoá chứa đỉnh thø i ( i = 2, , r1) phải lớn k i - nhỏ k i, khoá chứa đỉnh thứ r phải lớn k r-1 Mỗi chứa số khoá, tối đa s Các phép toán tìm kiếm, xen vào loại bỏ tìm kiếm m nhánh thực kỹ thuật tương tự tìm kiếm nhị phân B - ( B - Trees) B - loại đặc biệt tìm kiếm m nhánh cân (xem lại khái niệm cân mục 7, chương 4) Cụ thể, B - định nghĩa sau : B - cấp m tìm kiếm m nhánh thoả mÃn tính chất sau Nếu gåm cã gèc th× gèc cã Ýt nhÊt hai nhiều m Mỗi đỉnh cây, trừ gốc, có m/2 nhiều m Tất mức (Nói cách khác, tất đường từ gốc tới có ®é dµi) T­ t­ëng cđa viƯc tỉ chøc file d­íi dạng B - sau Ta xếp ghi file (file chính) vào số khối cần thiết Mỗi khối B - Trong khối ghi xếp theo thứ tự tăng dần khoá Các số khối (các lá) lại xếp vào số khối Trong khối này, số xếp theo thứ tự tăng dần khoá Trong B - cây, khối đỉnh mức mức Ta lại lấy số khối vừa tạo xếp vào số khối Các khối lại đỉnh mức mức từ tạo Quá trình Su Tầm Bởi : daihoc.com.vn 156 GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường trªn sÏ tiÕp tơc cho tíi c¸c chØ sè cã thĨ xÕp gọn vào khối Khối đỉnh B - Như vậy, đỉnh B - khối Mỗi đỉnh B - có dạng (p0, v1, p1, v2, p2, , vn, pn) ®ã v1 < v2 < < vµ ( vi, pi),  i  n, lµ chØ sè cđa mét khèi, tøc vi giá trị khoá nhỏ khối, pi trỏ trỏ tới khối chứa khoá nhỏ vi, tức trỏ trỏ tới ®Ønh thø i cđa ®Ønh ®ang nãi tíi Cần lưu ý rằng, giá trị khoá v0 không lưu giữ đỉnh trong, lý ®Ĩ tiÕt kiƯm bé nhí VÝ dơ : H×nh 7.3 biĨu diƠn mét B - c©y cÊp B - tạo thành từ 11 khối đánh số B1, B2, , B 11 Mỗi khối đỉnh chứa số Mỗi khối chứa bảng ghi ( số nguyên) File file số nguyên lưu giữ khối từ B5 đến B11 B1 B2 -  B5 - B6 15 - B3 21 143 58 92 B7 21 36 49 B8 58 - B4 195 _ B9 92 121 - B10 143 169 B11 195 211 232 Hình 7.3 B - Sau nghiên cứu thực phép toán tìm kiếm, xen vào loại bỏ B - Tìm kiếm Giả sử cần tìm ghi r có khoá v cho trước Chúng ta cần phải tìm đường từ gốc B - tới lá, cho cần phải chứa ghi r nÕu nã cã ë file Sưu Tầm Bởi : daihoc.com.vn 157 GT Cấu Trúc Dữ Liệu – Thuật Toỏn PTS- inh Mnh Tng Trong trình tìm kiếm, giả sử thời điểm ta đạt tới đỉnh B Nếu khối B lá, ta tìm khèi B xem nã cã chøa b¶n ghi r hay không Nhớ lại ghi file xếp vào khối theo thứ tự tăng dần khoá, tìm kiếm khối B tiến hành kỹ thuật tìm kiếm tìm kiếm nhị phân Nếu B ®Ønh chøa ( p0, v1, p1, , vn, pn) ta cần xác định vị trí giá trị khoá v dÃy giá trị khoá v1, v2, , NÕu v < v1 ta xuống đỉnh trỏ po NÕu vi  v < v i + th× ta xuống đỉnh trỏ pi ( i = 1, 2, n - 1) Cßn < v xuống đỉnh trỏ pn Xen vào : Giả sử ta cần phải xen vào B - ghi r với khoá v Đầu tiên ta áp dụng thủ tục tìm kiếm để tìm khối B cần phải xen ghi r vào Nếu khối B đủ chỗ cho ghi r ta xếp ghi r vào khối B cho thứ tự tăng dần khoá bảo tồn Chú ý rằng, r ghi khối B, trừ B bên trái Nếu B bên trái giá trị khoá nhỏ khối B mặt đỉnh tiền thân đỉnh B Vì trường hợp cần thêm ghi r vào khối B xong, không cần sửa đổi với đỉnh tiền thân khối B Nếu khối B không đủ không gian để lưu giữ ghi r ta thêm vào B - mới, khối B' Chuyển nửa số ghi ë ci cđa khèi B sang khèi B' Sau ®ã xếp ghi r vào khối B khối B' cho đảm bảo tính tăng dần giá trị khoá Giả sử Q cha B, ta biết Q trình tìm kiếm, ta lưu lại vết đường tõ gèc tíi B Gi¶ sư chØ sè cđa khèi B' (v', p'), v' giá trị khoá nhỏ B', p' địa khối B' áp dụng thủ tục để xen _v', p') vào khối Q Nếu khối Q không đủ chỗ cho (v', p') ta lại phải thêm vào B - đỉnh Q', em liền kề Q Sau lại phải tìm ®Õn cha cđa ®Ønh Q ®Ĩ ®­a vµo chØ sè khối Q' Quá trình tiếp diễn dẫn đến việc phải phân đôi số giá trị khoá gốc, nửa sau chuyển vào khối Trong trường hợp này, ta phải tạo gốc có hai con, gốc cũ, đỉnh đưa vào Ví dụ Giả sử ta cần xen vào B - hình 7.3 ghi có khoá 32 Trước hết ta phải tìm khối cần phải đưa ghi vào Bắt đầu từ gốc B1, 21 < 32 < 143, ta xuống B3 Tại B3, 32 < 58, ta xuống B7 B7 lá, cần phải đưa ghi với khoá 32 vào B7 Nhưng khối B7 đà đầy Ta thêm vào khối B12 xếp ghi với khoá 21, 32 vào khối B7, xếp ghi với khoá 36, 49 vào khối B12 Chỉ số khối B12 chứa giá trị khoá 36 Cần phải xếp số B12 vào cha B7 B3 Nhưng B3 đầy Thêm vào khối B13 Sau số khối B7, B12 xếp vào B3 số khối B8, B9 xếp vào B13 Bây số khối B13 58 địa khối B13 cần xếp vào khối B1 Nhưng B1 đầy thêm vào B - khối B14 Xếp số B2, B3 vào B1, số B 13, B4 vào B14 Vì B1 gốc, ta phải thêm vào gốc mới, khối B15 xếp số B1 B14 vào B15 Kết ta có B - hình 7.4 B15 58 - B1 B14 21 B2 -  143 B3  -   - B13 36 -  B4 92 -  Sưu Tầm Bởi : daihoc.com.vn - 15 - 21 32 - -195 - 158 36 49 - 58 - - 92 121 - 143169 169169 GT Cấu Trúc Dữ Liệu – Thuật Toán B5 B6 B7 PTS- Đinh Mạnh Tường B12 B8 B9 B10 195 211 232 Hình 7.4 B - sau thêm vào B - hình 7.3 ghi với giá trị khoá 32 Loại bỏ Giả sử ta cần loại khỏi B - ghi r với khoá v Đầu tiên áp dụng thủ tục tìm kiếm để tìm B chứa ghi r Sau loại bỏ b¶n ghi r khèi B Gi¶ sư sau loại bỏ B không rỗng Trong trường hợp này, r ghi B, ta làm thêm Nếu r ghi B, sau xoá r, chØ sè cđa B ®· thay ®ỉi Do ®ã ta cần tìm đến đỉnh Q cha B Nếu B trưởng Q giá trị khoá v' chØ sè (v', p') cđa B kh«ng cã Q Trong trường hợp ta cần tìm đến tiền thân A B cho A trưởng cha A' Khi giá trị khoá nhỏ B chứa A' Do A', ta cần thay giá trị khoá cũ v giá trị v' Giả sử sau loại bỏ ghi r, B trở thành rỗng Loại bỏ B khỏi Điều dẫn đến cần loại bỏ số B đỉnh cha Q B B - Nếu sau loại bỏ, số đỉnh Q m/2 ta tìm đến đỉnh Q' anh em liền kề đỉnh Q Nếu Q' có nhiều m/2 ta phân phối lại giá trị khoá Q Q' cho hai có m/2 Khi số Q Q' thay đổi Ta lại phải tìm đến tiền thân Q đến phản ánh thay đổi Nếu Q' có m/2 con, ta kết hợp hai đỉnh Q Q' thành đỉnh, hai đỉnh bị loại khỏi cây, khoá chứa đỉnh chuyển sang đỉnh lại Điều dẫn đến cần loại bỏ số đỉnh bị loại khỏi cha Q Sự loại bỏ thực cách áp dụng thủ tục loại bỏ đà trình bày Quá trình loại bỏ dẫn đến việc loại bỏ gốc cây, cần kết hợp hai gốc thành đỉnh, đỉnh trở thành gốc B-cây Ví dụ Giả sử cần loại ghi với khoá 58 khỏi B-cây hình 7.4 Đầu tiên tìm chứa khoá 58, khối B8 Xoá ghi 58, khối B8 thành rỗng Tìm đến cha B8 B13 Loại bỏ chØ sè cđa B8 khái B13, B13 chØ cßn mét Sè cđa B13 Ýt h¬n  m/2 (ë m/2 = 3/2 = 2) Tìm đến em liỊn kỊ cđa B13 lµ B4, sè cđa B4 hai Kết hợp hai đỉnh thành đỉnh B13 Cần phải loại bỏ số khối B4 khái B14 B14 trë thµnh chØ cã mét Tìm đến anh liền kề B14 B1 Số B1 hai Kết hợp B1 B14 thành đỉnh B1 B1 trở thành gốc B - Hình 7.5 minh hoạ B-cây nhận từ B-cây hình 7.4 sau loại đỉnh có kho¸ 58 Sưu Tầm Bởi : daihoc.com.vn 159 GT Cấu Trúc Dữ Liệu – Thuật Toán Sưu Tầm Bởi : daihoc.com.vn PTS- Đinh Mạnh Tường 160 ... Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường Ch­¬ng I Thuật toán phân tích thuật toán 1.1 Thuật toán 1.1.1 Khái niệm thuật toán Thuật toán (algorithm) khái niệm quan trọng tin học Thuật ngữ thuật toán. .. Thuật toán Fibo2 chưa phải thuật toán hiệu Bạn thử tìm thuật toán hiệu Su Tầm Bởi : daihoc.com.vn 17 GT Cấu Trúc Dữ Liệu – Thuật Tốn PTS- Đinh Mạnh Tường Ch­¬ng II kiĨu liệu, cấu trúc liệu mô... Cấu Trúc Dữ Liệu – Thuật Toán PTS- Đinh Mạnh Tường tèc độ máy tính lớn đại, để tính định thøc cđa ma trËn cÊp n = 25, cịng cÇn hàng triệu năm ! Một thuật toán cổ điển khác, thuật toán Gauss -

Ngày đăng: 11/07/2020, 02:47

Tài liệu cùng người dùng

Tài liệu liên quan