1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu và giải thuật II - Chương 4 ppsx

67 392 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 67
Dung lượng 460 KB

Nội dung

CHƯƠNG 4 – B-TREE VÀ BỘ NHỚ NGOÀI Đối với cây nhị phân, mỗi node chỉ có một mục dữ liệu và có thể có hai node con. Nếu chúng ta cho phép một node có nhiều mục dữ liệu và nhiều node con thì kết quả là ta được cây nhiều nhánh. Cây 2-3-4 là cây nhiều nhánh mà mỗi node của nó có thể có đến bốn node con và có 3 mục dữ liệu. Để bước đầu làm quen với B-tree chúng ta khảo sát cây 2-3-4. Cây 2-3-4 là cây cân bằng giống như cây đỏ-đen. Tuy nhiên, ít hiệu quả hơn cây đỏ-đen nhưng ngược lại chúng lại dễ lập trình. B-tree là một dạng của cây nhiều nhánh, B-tree đặc biệt hữu dụng đối với việc tổ chức dữ liệu ở bộ nhớ ngoài. Một node trong B-tree có thể có hàng chục thậm chí hàng trăm node con. Chúng ta sẽ thảo luận về bộ nhớ ngoài và B-tree trong phần tiếp theo. 1. CÂY 2-3-4 1.1. Giới thiệu về cây 2-3-4 Chúng ta sẽ xem xét các đặc tính của cây 2-3-4 và mối quan hệ khá gần gũi giữa cây 2-3-4 và cây đỏ-đen. Hình 4.1 trình bày một cây 2-3-4 đơn giản. Mỗi node có thể lưu trữ 1, 2 hoặc 3 mục dữ liệu. Hình 4.1 cây 2-3-4 Các số 2, 3 và 4 trong cụm từ cây 2-3-4 có ý nghĩa là khả năng có bao nhiêu liên kết đến các node con có thể có được trong một node cho trước. Đối với các node không phải là lá, có thể có 3 cách sắp xếp sau: Một node với một mục dữ liệu thì luôn luôn có 2 con. Một node với hai mục dữ liệu thì luôn luôn có 3 con. Một node với ba mục dữ liệu thì luôn luôn có 4 con. Như vậy, một node không phải là lá phải luôn luôn có số node con nhiều hơn 1 so với số mục dữ liệu của nó. Nói cách khác, đối với mọi node với số con là l và số mục dữ liệu là d, thì : l = d + 1 Hình 4.2. các trường hợp của cây 2-3-4 Với mọi node lá thì không có node con nhưng có thể chứa 1, 2 hoặc 3 mục dữ liệu, không có node rỗng. Một cây 2-3-4 có thể có đến 4 cây con nên được gọi là cây nhiều nhánh bậc 4. Trong cây 2-3-4 mỗi node có ít nhất là 2 liên kết ,trừ lnode lá (node không có liên kết nào). Hình 4.2 trình bày các trường hợp của cây 2-3-4. Một node với 2 liên kết gọi là một 2-node, một node với 3 liên kết gọi là một 3-node, và một node với 4 liên kết gọi là một 4-node, nhưng ở đây không có loại node nào là 1-node. 1.2. Tổ chức cây 2-3-4 Các mục dữ liệu trong mỗi node được sắp xếp theo thứ tự tăng dần từ trái sang phải (sắp xếp từ thấp đến cao). Một đặc tính quan trọng của bất kỳ cấu trúc cây là mối liên hệ giữa các liên kết với giá trị khóa của các mục dữ liệu. Trong cây tìm kiếm nhị phân, tất cả node của cây con bên trái có khoá nhỏ hơn khóa của node đang xét và tất cả node của cây con bên phải có khoá lớn hơn hoặc bằng khóa của node đang xét. Trong cây 2-3-4 thì nguyên tắc cũng giống như trên, nhưng có thêm một số điểm sau: Tất cả các node con của cây con có gốc tại node con thứ 0 thì có các giá trị khoá nhỏ hơn khoá 0. Tất cả các node con của cây con có gốc tại node con thứ 1 thì có các giá trị khoá lớn hơn khoá 0 và nhỏ hơn khoá 1. Tất cả các node con của cây con có gốc tại node con thứ 2 thì có các giá trị khoá lớn hơn khoá 1 và nhỏ hơn khoá 2. Tất cả các node con của cây con có gốc tại node con thứ 3 thì có các giá trị khoá lớn hơn khoá 2. Trong tất cả cây 2-3-4, các lá đều nằm trên cùng một mức. Các node ở mức trên thường không đầy đủ, nghĩa là chúng có thể chứa chỉ 1 hoặc 2 mục dữ liệu thay vì 3 mục. Lưu ý rằng cây 2-3-4 là cây cân bằng. Nó vẫn giữ được sự cân bằng khi thêm vào các phần tử có thứ tự (tăng dần hoặc giảm dần). 1.3. Tìm kiếm Thao tác tìm kiếm trong cây 2-3-4 tương tự như thủ tục tìm kiếm trong cây nhị phân. việc tìm kiếm bắt đầu từ node gốc và chọn liên kết dẫn đến cây con với phạm vi giá trị phù hợp. Ví dụ, để tìm kiếm mục dữ liệu với khoá là 64 trên cây ở hình 4.1, bạn bắt đầu từ gốc. Tại node gốc không tìm thấy mục khoá này. Bởi vì 64 lớn 50, chúng ta đi đến node con 1, (60/70/80)(lưu ý node con 1 nằm bên phải, bởi vì việc đánh số của các node con và các liên kết bắt đầu tại 0 từ bên trái). Tại vị trí này vẫn không tìm thấy mục dữ liệu, vì thế phải đi đến node con tiếp theo. Tại đây bởi vì 64 lớn hơn 60 nhưng nhỏ hơn 70 nên đi tiếp đến node con 1. Tại thời điểm chúng ta tìm được mục dữ liệu đã cho với liên kết là 62/64/66. 1.4. Thêm vào Các mục dữ liệu mới luôn luôn được chèn vào tại các node lá . Nếu mục dữ liệu được thêm vào node mà có node con, thì số lượng của các node con cần thiết phải được chuyển đổi để duy trì cấu trúc cho cây, đây là lý do tại sao phải có số node con nhiều hơn 1 so với các mục dữ liệu trong một nút. Việc thêm vào cây 2-3-4 trong bất cứ trường hợp nào thì quá trình cũng bắt đầu bằng cách tìm kiếm node lá phù hợp. Nếu không có node đầy nào (node có đủ 3 mục dữ liệu) được bắt gặp trong quá trình tìm kiếm, việc chèn vào khá là dễ dàng. Khi node lá phù hợp được tìm thấy, mục dữ liệu mới đơn giản là thêm vào nó. Hình 4.3 trình bày một mục dữ liệu với khoá 18 được thêm vào cây 2-3-4. Việc chèn vào có thể dẫn đến phải di chuyển một hoặc hai mục dữ liệu trong node vì thế các khoá sẽ nằm với trật tự đúng sau khi mục dữ liệu mới được thêm vào. Trong ví dụ này số 23 phải được đẩy sang phải để nhường chỗ cho 18. Hình 4.3 Chèn vào không làm tách cây (i) trước khi chèn vào (ii) sau khi chèn vào Tách nút Việc thêm vào sẽ trở nên phức tạp hơn nếu gặp phải một node đầy (node có số mục dữ liệu đầy đủ) trên nhánh dẫn đến điểm thêm vào. Khi điều này xảy ra, node này cần thiết phải được tách ra. Quá trình tách nhằm giữ cho cây cân bằng. Loại cây 2-3-4 mà chúng ta đề cập ở đây thường được gọi là cây 2-3-4 top-down bởi vì các node được tách ra theo hướng đi xuống điểm chèn. Giả sử ta đặt tên các mục dữ liệu trên node bị phân chia là A, B và C. Sau đây là tiến trình tách (chúng ta giả sử rằng node bị tách không phải là node gốc; chúng ta sẽ kiểm tra việc tách node gốc sau này): Một node mới và rỗng được tạo. Nó là anh em với node sẽ được tách và được đưa vào bên phải của nó. Mục dữ liệu C được chuyển vào node mới. Mục dữ liệu B được chuyển vào node cha của node được tách. Mục dữ liệu A không thay đổi. Hai node con bên phải nhất bị hủy kết nối từ node được tách và kết nối đến node mới. Một ví dụ về việc tách node trình bày trên hình 4.4. Một cách khác để mô tả sự tách node là một 4-node được chuyển đổi sang hai 2-nút. Chú ý rằng ảnh hưởng của sự tách node là dịch chuyển dữ liệu đi lên về bên phải. Sự sắp xếp lại này nhằm mục đích giữ cho cây cân bằng. Hình 4.4: Tách một nút (i ) Trước khi chèn vào (ii) Sau khi chèn vào Tách node gốc Khi gặp phải node gốc đầy tại thời điểm bắt đầu tìm kiếm điểm chèn, kết quả của việc tách thực hiện như sau: Node mới được tạo ra để trở thành gốc mới và là cha của node được tách. Node mới thứ hai được tạo ra để trở thành anh em với node được tách. Mục dữ liệu C được dịch chuyển sang node anh em mới. Mục dữ liệu B được dịch chuyển sang node gốc mới. Mục dữ liệu A vẫn không đổi. Hai node con bên phải nhất của node được phân chia bị hủy kết nối khỏi nó và kết nối đến node mới bên phải. Hình 4.5 Tách node gốc i) Trước khi thêm vào ii) Sau khi thêm vào Hình 4.5 chỉ ra việc tách node gốc. Tiến trình này tạo ra một node gốc mới ở mức cao hơn mức của node gốc cũ. Kết quả là chiều cao tổng thể của cây được tăng lên 1. Đi theo node được tách này, việc tìm kiếm điểm chèn tiếp tục đi xuống phía dưới của cây. Trong hình 4.5 mục dữ liệu với khoá 41 được thêm vào lá phù hợp. Tách theo hướng đi xuống Chú ý rằng, bởi vì tất cả các node đầy được tách trên đường đi xuống nên việc tách node không gây ảnh hưởng gì khi phải đi ngược lên trên của cây. Node cha của bất cứ node nào bị tách phải đảm bảo rằng không phải là node đầy, để đảm bảo node cha này có thể chấp nhận mục dữ liệu B mà không cần thiết nó phải tách ra. Tất nhiên nếu node cha này đã có hai con thì khi node con bị tách, nó sẽ trở thành node đầy. Tuy nhiên điều này chỉ có nghĩa là nó có thể sẽ bị tách ra khi lần tìm kiếm kế tiếp gặp nó. Hình 4.6 trình bày một loạt các thao tác chèn vào một cây rỗng. Có 4 node được tách, 2 node gốc và 2 node lá. Thêm vào 70, 30, 50 Thêm 40 Thêm vào 20, 80 Thêm vào 25, 90 Thêm vào 75 Thêm vào 10 Hình 4.6 Minh họa thêm một node vào cây 2-3-4 1.5. Cây 2-3-4 và cây Đỏ-Đen Cây 2-3-4 và cây đỏ-đen hầu như là các thực thể khác nhau hoàn toàn. Tuy nhiên, ở một ngữ cảnh nào đó chúng có sự tương đương với nhau. Cây này có thể chuyển sang cây khác bằng một chương trình với một số quy tắc đơn giản, và thậm chí các thao tác để giữ cho chúng cân bằng cũng tương đương. Các nhà toán học gọi chúng là đồng đẳng. Bạn có thể sẽ không cần chuyển đổi một cây 2-3-4 sang cây đỏ-đen, nhưng sự tương đương của các cấu trúc này đưa ra thêm một quan niệm trên thao tác của chúng và điều này cũng hữu dụng trong việc phân tích tính hiệu quả của chúng. Trong lịch sử thì cây 2-3-4 phát triển trước; Sau đó cây đỏ-đen suy ra từ nó. 1.6. Chuyển từ cây 2-3-4 sang cây Đỏ-Đen Một cây 2-3-4 có thể được chuyển sang cây đỏ-đen bằng cách áp dụng các luật sau: Chuyển đổi bất kỳ 2-node ở cây 2-3-4 sang node đen ở cây đỏ-đen. Chuyển đổi bất kỳ 3-node sang node con C (với hai con của chính nó) và node cha P (với các node con C và node con khác). Không có vấn đề gì ở đây khi một mục trở thành node con và mục khác thành node cha. C được tô màu đỏ và P được tô màu đen. Chuyển đổi bất kỳ 4-node sang node cha P và cả hai node con C1, C2 màu đỏ. Hình 4.7 trình bày các chuyển đổi này. Các node con trong các cây con được tô màu đỏ; tất cả các node khác được tô màu đen. Hình 4.8 trình bày cây 2-3-4 và cây đỏ-đen tương ứng với nó bằng cách áp dụng các chuyển đổi này. Các đường chấm xung quanh các cây con được tạo ra từ 3- node và 4-nút. Các luật của cây đỏ-đen tự động thoả mãn với sự chuyển đổi này. Kiểm tra rằng: Hai node đỏ không bao giờ được kết nối, và số lượng các node đen là như nhau ở mọi đường dẫn từ gốc đến lá (hoặc node con null). Bạn có thể nghĩ rằng một 3-node ở cây 2-3-4 là tương đương với node cha có một node con màu đỏ ở cây đỏ-đen, và một 4-node là tương đương với node cha có hai node con đỏ. Điều này nghĩa là node cha màu đen với node con đen ở cây đỏ- đen không biểu diễn một 3-node ở cây 2-3-4; nó chỉ biểu diễn một 2-node với node con 2-node khác. Tương tự, một node cha màu đen với 2 con màu đen không biểu diễn cho 4-nút. Hình 4.7 Chuyển đổi từ cây 2-3-4 sang cây đỏ-đen [...]... thành hai 2-nút Trong cây đ - en bạn thực hiện việc lật màu Làm thế nào mà các thao tác này là tương đương với nhau? Hình 4. 9 Tách 4- node và lật màu Trong hình 4. 9.i trình bày một 4- node trong cây 2-3 -4 trước khi bị tách nút; Hình 4. 9 .ii trình bày tình trạng sau khi tách nút 2-node (là cha của 4nút) trở thành 3-nút Trong hình 4. 9.iii trình bày cây đ - en tương đương với cây 2-3 -4 ở hình 4. 9.i, Đường... 4. 8 Cây 2-3 -4 và cây đ - en tương ứng Sự tương đương Không những cấu trúc của cây đ - en phù hợp với cây 2-3 -4 , mà các thao tác hoạt động của hai loại cây này cũng tương đương nhau Trong cây 2-3 4 nó được giữ cân bằng bằng việc tách nút Trong cây đ - en hai phương thức cân bằng là sự lật và quay màu Việc tách 4- node và lật màu Trong cây 2-3 -4 khi bạn tìm xuống điểm chèn cho node mới, bạn tách mỗi 4- node... hơn Hình 4. 10-i trình bày cây 2-3 -4 còn hình 4. 10 -ii, và 4. 10-iii trình bày các cây đ - en tương đương được suy ra từ cây 2-3 -4 bằng cách áp dụng các luật chuyển đổi ở trên Sự khác nhau giữa chúng là cách lựa chọn hai mục dữ liệu nào trong 3-node để tạo node cha; Trong hình ii, 80 là node cha, trong hình iii, 70 là node cha Mặc dù cách sắp xếp này là hợp lệ, bạn có thể thấy rằng cây trong hình ii là không... trong cây 2-3 -4 , nhưng cây 2-3 -4 thì ngắn hơn (có ít mức hơn) so với cây đ - en khi số lượng các mục dữ liệu như nhau Xem hình 4. 8, ở đây cây 2-3 -4 có ba mức còn cây đ - en có năm mức Cụ thể hơn, trong cây 2-3 -4 có đến 4 con trên một nút Nếu mỗi node là đầy, chiều cao của cây phải tỷ lệ với log4(N) Logarith với cơ số 2 và cơ số 4 khác nhau bởi một thừa số hằng của 2 Kết quả, chiều cao của cây 2-3 -4 sẽ thấp... chức lưu dữ liệu trên đĩa hiệu quả hơn 2.2 B-TREE Chúng ta đã biết cây là một cách tiếp cận hoàn chỉnh để tổ chức dữ liệu trong bộ nhớ Như vậy cây có làm việc tốt với hệ thống tập tin hay không? B-tree là cấu trúc dữ liệu phù hợp cho việc lưu trữ ngoài do R.Bayer và E.M.McCreight đưa ra năm 1972 Bên trong mỗi nút, dữ liệu được xếp thứ tự một cách tuần tự bởi khoá, như trong cây 2-3 -4 Thực ra, cấu trúc. .. quanh sự tương đương của 4- nút Lật màu đưa đến kết quả cây đ - en ở hình 4. 9.iv Bây giờ các node 40 và 60 là màu đen và 50 là màu đỏ Kết quả 50 và node cha của nó hình thành sự tương đương với một 3-nút, như trình bày bằng đường chấm Điều này tương tự 3-node định dạng bằng việc tách node trong hình 4. 9 .ii Kết quả chúng ta thấy rằng việc tách một 4- node trong quá trình chèn ở cây 2-3 -4 là tương đương với... proot -> numtress-1; i++) { traverse (proot -> Branch[i]); printf ("%8d", proot -> key[i]); } //duyet nhanh cay con cuoi cung cua node proot traverse (proot -> Branch[proot -> numtrees-1]); } } • Thêm vào : Trước khi đưa ra giải thuật thêm một phần tử mới vào B-Tree, ta xem tình huống cụ thể qua các ví dụ sau : Ví dụ 1: - Thêm x=22 vào B-Tree ở hình 4. 15a Khóa 22 chưa có trong cây Nhưng không thể thêm vào... việc tách node: Hình 4. 16 c Thêm vào 5 cũng có sự đầy node (node đang chứa 4 khóa 7, 10, 15, 18) dẫn đến việc tách node : Hình 4. 16 d Thêm vào các khóa 42 , 13, 46 , 27 và 8 Đến khi thêm 32 có sự tách node : Hình 4. 16 e Thêm vào 38, 24 va 45 Thêm 25 vào có sự tách node và cho thấy sự lan truyền tách node ngược lên về phía gốc : 25 thêm vào node (22, 24 26, 27) làm node này bị tách và 25 được đưa lên node... bình của các mục dữ liệu trên một nút Kết quả là thời gian tìm kiếm xấp xỉ M*log4(N) Một vài node chỉ chứa 1 mục dữ liệu, một vài node chứa 2, và một vài node chứa 3 Nếu chúng ta ước lượng trung bình là 2, thời gian tìm kiếm sẽ xấp xỉ là 2*log4(N) Đây là hằng số nhỏ có thể bỏ qua trong biễu diễn độ phức tạp theo ký hiệu Big-O Kết quả, với cây 2-3 -4 số lượng tăng lên của các mục dữ liệu trên node dẫn... tìm kiếm của cây 2-3 -4 và cây nhị phân cân bằng như cây đ - en là xấp xỉ bằng nhau, và cả hai đều bằng O (log(N)) Yêu cầu lưu trữ Mỗi node trong cây 2-3 -4 lưu trữ 3 tham chiếu đến các mục dữ liệu và 4 tham chiếu đến các node con của nó Không gian lưu trữ này có thể được định dạng trong các mảng Không phải tất cả không gian lưu trữ này đều được sử dụng Một node với chỉ một mục dữ liệu sẽ bỏ trống 2/3 . 2-3 -4 và mối quan hệ khá gần gũi giữa cây 2-3 -4 và cây đ - en. Hình 4. 1 trình bày một cây 2-3 -4 đơn giản. Mỗi node có thể lưu trữ 1, 2 hoặc 3 mục dữ liệu. Hình 4. 1 cây 2-3 -4 Các số 2, 3 và. tình huống trong ngữ cảnh lớn hơn. Hình 4. 10-i trình bày cây 2-3 -4 còn hình 4. 10 -ii, và 4. 10-iii trình bày các cây đ - en tương đương được suy ra từ cây 2-3 -4 bằng cách áp dụng các luật chuyển. một 2-node với node con 2-node khác. Tương tự, một node cha màu đen với 2 con màu đen không biểu diễn cho 4- nút. Hình 4. 7 Chuyển đổi từ cây 2-3 -4 sang cây đ - en Hình 4. 8 Cây 2-3 -4 và cây đ - en

Ngày đăng: 22/07/2014, 14:21

TỪ KHÓA LIÊN QUAN

w