CHƯƠNG 11: CÁC CÂY TÌM KIẾM CÂN BẰNG pot

45 500 0
CHƯƠNG 11: CÁC CÂY TÌM KIẾM CÂN BẰNG pot

Đ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

PHẦN II CÁC CẤU TRÚC DỮ LIỆU CAO CẤP 40 CHƯƠNG 11 CÁC CÂY TÌM KIẾM CÂN BẰNG Trong mục 8.4 chúng ta đã nghiên cứu CTDL cây tìm kiếm nhị phân và sử dụng CTDL này để cài đặt KDLTT tập động. Chúng ta đã chỉ ra rằng, các phép toán tập động trên cây tìm kiếm nhị phân, trong trường hợp xấu nhất, sẽ đòi hỏi thời gian O(n), trong đó n là số đỉnh của cây. Đó là trường hợp cây suy biến thành danh sách liên kết, tức là tất cả các nhánh trái (phải) của mọi đỉnh đều rỗng. Trường hợp này sẽ xảy ra khi chúng ta xen vào cây một dãy dữ liệu đã được sắp xếp theo thứ tự tăng (giảm), một hoàn cảnh thường gặp trong thực tiễn. Trong chương này chúng ta sẽ nghiên cứu một số loại cây tìm kiếm cân bằng, khắc phục được sự chênh lệch nhiều về số đỉnh giữa nhánh trái và nhánh phải tại mọi đỉnh, và do đó thời gian thực hiện các phép toán tập động, trong trường hợp xấu nhất, cũng chỉ là O(logn). Các cây tìm kiếm cân bằng mà chúng ta sẽ đưa ra là cây AVL và cấy đỏ - đen. Chúng ta sẽ đưa vào chương này phương pháp phân tích mới, từ trước đến nay chúng ta chưa bao giờ sử dụng tới, đó là phân tích trả góp. Phương pháp này cho phép ta đánh giá cận trên chặt của thời gian thực hiện một dãy phép toán trên CTDL tự điều chỉnh. Cuối chương này chúng ta sẽ nghiên cứu CTDL cây tán loe: một dạng CTDL tự điều chỉnh, và sử dụng phương pháp phân tích trả góp để đánh giá thời gian thực hiện một dãy phép toán tập động trên cây tán loe. Trước hết chúng ta đưa vào các phép toán quay trên cây nhị phân. Các phép quay này sẽ được sử dụng đến trong các mục tiếp theo. 11.1 CÁC PHÉP QUAY Các cây AVL, cây đỏ - đen, cây tán loe mà chúng ta sẽ lần lượt xét trong chương này đều là cây tìm kiếm nhị phân, tức là chúng đều phải thoả mãn tính chất tìm kiếm nhị phân (hay tính chất được sắp): dữ liệu chứa trong một đỉnh bất kỳ có khoá lớn hơn khoá của mọi dữ liệu chứa trong cây con trái và nhỏ hơn khoá của mọi dữ liệu chứa trong cây con phải. Chúng chỉ khác nhau bởi các điều kiện áp đặt nhằm giảm độ cao của cây hoặc không làm mất cân bằng giữa nhánh trái và nhánh phải tại mọi đỉnh. Mỗi khi thực hiện một phép toán (xen hoặc loại) làm cho cây không còn thoả mãn các điều kiện áp đặt, chúng ta sẽ cấu tạo lại cây bằng cách sử dụng các phép quay. 41 Có hai phép quay cơ bản là quay trái và quay phải được chỉ ra trong hình 11.1. Giả sử p là một đỉnh trong cây nhị phân, và đỉnh con trái của nó là v. Phép quay phải đỉnh p sẽ đặt v vào vị trí của đỉnh p, p trở thành con phải của v và cây con phải của đỉnh v trở thành cây con trái của đỉnh p. Trong hình 11.1, phép quay phải đỉnh p sẽ biến cây ở vế trái thành cây ở vế phải. Đối xứng qua gương của phép quay phải là phép quay trái, như được chỉ ra trong hình 11.1. P P quay phải p quay trái v Hình 11.1. Các phép quay cơ bản. Bây giờ chúng ta chứng minh một khẳng định quan trọng: các phép quay cơ bản (trái hoặc phải) không phá vỡ tính chất tìm kiếm nhị phân. Chúng ta chứng minh cho phép quay phải tại đỉnh p. Phép quay này chỉ tác động đến đỉnh p và v, và do đó ta chỉ cần chỉ ra rằng, sau khi quay đỉnh p và v vẫn còn thoả mãn tính chất tìm kiếm nhị phân. Ta có nhận xét rằng, phép quay không ảnh hưởng gì đến cây con trái của v và cây con phải của đỉnh p.Trước khi quay, cây con phải của v là T 2 thuộc cây con trái của đỉnh p,do đó, khoá của mọi đỉnh trong cây con T 2 lớn hơn khoá của đỉnh v và nhỏ hơn khoá của đỉnh p; mặt khác, khoá của mọi đỉnh trong cây con T 3 lớn hơn khoá của đỉnh p, và do đó lớn hơn khoá của đỉnh v, vì khóa của đỉnh p lớn hơn khoá của đỉnh v. Từ các kết luận đó, ta thấy ngay rằng, các đỉnh p và v sau phép quay phải vẫn còn thoả mãn tính chất tìm kiếm nhị phân. 11.2 CÂY AVL Trong mục này chúng ta nghiên cứu CTDL cây AVL, do các nhà toán học Nga Adelson- Velskii và Landis đề xuất. Nhớ lại rằng, chúng ta xác định 42 p v v p T 3 T 1 T 1 T 2 T 3 T 2 độ cao của cây nhị phân là số đỉnh trên đường đi dài nhất từ gốc tới lá, và độ cao của cây rỗng bằng 0. Cây AVL được định nghĩa như sau: Định nghĩa 11.1. Cây AVL là cây tìm kiếm nhị phân, trong đó độ cao của cây con trái và độ cao của cây con phải của mỗi đỉnh khác nhau không quá 1. Như vậy, mỗi đỉnh của cây AVL sẽ ở một trong ba trạng thái: cây con trái và phải có độ cao bằng nhau (ta ký hiệu trạng thái này là EH), cây con trái cao hơn cây con phải 1 (trạng thái LH) và cây con phải cao hơn cây con trái 1 (trạng thái RH). Sau này chúng ta sẽ nói đỉnh ở một trong ba trạng thái trên là đỉnh cân bằng. Còn nếu một đỉnh có độ cao cây con trái lớn hơn độ cao cây con phải 2 thì nó được xem là đỉnh lệch bên trái. Tương tự, ta có khái niệm đỉnh lệch bên phải. Hình 11.1 cho ta một ví dụ về cây AVL Hình 11.1. Một cây AVL Bây giờ chúng ta chứng minh một tính chất quan trọng về độ cao của cây AVL. Định lý 11.1. Độ cao của cây AVL có n đỉnh là O(logn). Thay cho đánh giá độ cao lớn nhất của cây AVL chứa n đỉnh, ta đánh giá số đỉnh ít nhất của cây AVL với độ cao h. Ta ký hiệu N(h) là số đỉnh ít nhất của cây AVL có độ cao h. Các cây AVL có số đỉnh ít nhất với độ cao h = 1, 2, 3 được chỉ ra trong hình 11.2a. Như vậy N(0) = 0, N(1) = 1, N(2) = 2, N(3) = 3. Cây AVL có số đỉnh ít nhất với độ cao h là cây trong hình 11.2b, nó có cây con trái là cây AVL có số đỉnh ít nhất với độ cao h-1, và cây con phải là cây AVL có số đỉnh ít nhất với độ cao h-2. Do đó N(h) = N(h-1) + N(h-2) + 1 (1) 43 1 0 1 3 5 1 1 3 8 6 h = 1 h = 2 h = 3 h-1 h-2 Hình 11.2. Các cây AVL có số đỉnh ít nhất. Từ đẳng thức (1) và tính chất của dãy só Fibonacci, bằng quy nạp ta chứng minh được N(h) = F(h + 1) – 1 (2) trong đó F(m) là số thứ m trong dãy số Fibonacci. Nhưng F(m) = ) ˆ ( 5 1 mm φφ − , trong đó )51( 2 1 += φ và )51( 2 1 ˆ −= φ , do đó N(h) = 1) ˆ ( 5 1 11 −− ++ hh φφ Chú ý rằng )51( 2 1 ˆ −= φ < 1. Do đó hạng thức 1 ˆ +h φ sẽ gần với 0 khi h lớn. Do đó, ta có đánh giá N(h) 1 5 1 + ≈ h φ Từ đó ta có 44 h = O(log N(h)) Vì N(h) là số đỉnh ít nhất của cây AVL có độ cao h, do đó độ cao h của cây AVL có n đỉnh là h = O(logn). Chúng ta sẽ sử dụng tính chất về độ cao của cây AVL để đánh giá thời gian thực hiện các phép toán tập động trên cây AVL. 12.2.1 Các phép toán tập động trên cây AVL Bởi vì cây AVL là cây tìm kiếm nhị phân, nên các phép toán hỏi: tìm kiếm dữ liệu có khoá k cho trước, tìm dữ liệu có khoá nhỏ nhất (lớn nhất) được thực hiện theo các thuật toán như trên cây tìm kiếm nhị phân. Chúng ta đã chỉ ra rằng, độ cao của cây AVL chứa n đỉnh là O(logn), do đó thời gian thực hiện các phép toán hỏi trên cây AVL là O(logn). Nhưng nếu chúng ta thực hiện phép toán xen (hoặc phép loại) trên cây AVL thì chúng ta không thể chỉ tiến hành như trên cây tìm kiếm nhị phân, bởi vì sau khi xen (loại) tính cân bằng tại một số đỉnh có thể bị phá vỡ, tức là độ cao của cây con trái (phải) lớn hơn độ cao cây con phải (trái) 2. Trong các trường hợp đó, chúng ta cần phải cấu trúc lại cây bằng cách sử dụng các phép quay để thiết lập lại sự cân bằng của các đỉnh. Phép toán xen. Việc xen vào cây AVL một đỉnh mới trước hết được thực hiện theo thuật toán xen vào cây tìm kiếm nhị phân. Khi đó các đỉnh nằm trên đường đi từ đỉnh mới xen vào lên gốc có thể không còn cân bằng nữa. Vì vậy chúng ta cần phải đi từ đỉnh mới lên gốc, gặp đỉnh nào mất cân bằng thì sử dụng các phép quay để làm cho nó trở thành cân bằng. Một đỉnh mất cân bằng chỉ có thể là lệch bên trái hoặc lệch bên phải. Chúng ta xét trường hợp đỉnh lệch bên trái. Gải sử a là đỉnh đầu tiên trên đường đi từ đỉnh mới lên gốc bị lệch bên trái. Giả sử P là con trỏ liên kết trong cây trỏ tới đỉnh a. Giả sử đỉnh con trái của a là đỉnh b, cây con trái của b là T 1 , cây con phải của b là T 2 , cây con phải của đỉnh a là T 3 . Trường hợp đỉnh a bị lệch trái chỉ xảy ra khi mà trước khi xen vào đỉnh mới, độ cao cây con trái của đỉnh a lớn hơn độ cao cây con phải 1 và đỉnh mới được xen vào cây con trái của a, làm tăng độ cao cây con trái của a lên 1. Do đó nếu cây con T 3 có độ cao h, thì một trong hai cây con T 1 , T 2 phải có độ cao h + 1, còn cây kia có độ cao là h. Chúng ta xét từng trường hợp. • Mẫu quay phải. Trường hợp cây con T 1 có độ cao h + 1 và cây con T 2 có độ cao h (h ≥ 0), như trong hình 11.3a, chúng ta chỉ cần thực hiện phép quay phải đỉnh a. Kết quả ta nhận được cây trong hình 11.3b. Dễ dàng thấy rằng sau phép quay phải, cả hai đỉnh a và b đều ở 45 trạng thái cân bằng EH và độ cao của cây P giảm đi 1 so với trước khi quay. P h h + 1 h (a) P (b) Hình 11.3. Mẫu quay phải 46 a b T 3 T 1 T 2 b a T 1 T 3 T 2 • Mẫu quay kép trái - phải. Trường hợp cây con T 1 có độ cao h, và cây con T 2 có độ cao h + 1, nếu chúng ta thực hiện phép quay phải đỉnh a thì đỉnh P lại trở thành lệch phải (hãy thử xem). Trong trường hợp này chúng ta phải tiến hành phép quay kép. Giả sử cây con T 2 có gốc là đỉnh c, cây con trái của c là T l , cây con phải là T r . Để cho T 2 có độ cao h + 1, thì ít nhất một trong hai cây con T l và T r phải có độ cao h, còn cây kia có thể có độ cao h hoặc h – 1. Chúng ta có cây như trong hình 11.4a. Đầu tiên ta quay trái đỉnh b để nhận được cây trong hình 11.4b Sau đó ta quay phải đỉnh a, cây kết quả là cây trong hình 11.4c. Dễ dàng thấy sau hai phép quay liên tiếp trái, phải này thì cả ba đỉnh a, b, c đều trở thành cân bằng, đỉnh c ở trạng thái EH, đỉnh b ở trạng thái EH hoặc EH, còn đỉnh a ở trạng thái EH hoặc RH. Chúng ta thấy rằng, sau phép quay kép trái - phải này thì độ cao của cây P cũng giảm đi 1 so với trước khi thực hiện phép quay. P h h h-1 h (a) 47 a T 3 T 1 T r c b T l P (b) P (c) Hình 11.4. Mẫu quay kép trái - phải 48 a T 3 c b T r T l T 1 c ab T 1 T l T 3 T r Chúng ta có một nhận xét quan trọng: cả hai mẫu quay, quay phải hoặc quay kép trái - phải, đều làm giảm độ cao của cây P đi 1, tức là trở lại độ cao của cây P trước khi ta thực hiện phép xen vào. Trường hợp đỉnh a bị lệch bên phải, ta cũng có hai trường hợp riêng. Đó là các cây là đối xứng qua gương của cây trong hình 11.3a và 11.4a. Nếu đỉnh a lệch phải và có dạng đối xứng qua gương cúa cây trong hình 11.3a, ta chỉ cần thực hiện phép quay trái đỉnh a. Nếu đỉnh a lệch phải và có dạng đối xứng qua gương của cây trong hình 11.4a, ta thực hiện phép quay phải – trái (đầu tiên quay phải đỉnh b, sau đó quay trái đỉnh a). Từ nhận xét ở trên, ta suy ra rằng, khi xen vào một đỉnh mới, ta đi từ đỉnh mới lên gốc cây, gặp đỉnh đầu tiên mất cân bằng ta chỉ cần thực hiện một phép quay đơn (phải hoặc trái) hoặc một phép quay kép (trái - phải hoặc phải – trái) là cây trở thành cân bằng. Ví dụ. Khi xen vào cây AVL đỉnh mới 8, ta có cây ở vế trái trong hình 11.5a. Đi từ đỉnh 8 lên, ta thấy đỉnh đầu tiên mất cân bằng là đỉnh 15. Quay phải đỉnh 15 ta nhận được cây AVL ở vế phải hình 11.5a. Bây giờ thay cho đỉnh 8 ta xen vào đỉnh mới 12, ta có cây ở vế trái hình 11.5b. Trường hợp này, đỉnh lệch bên trái cũng là đỉnh 15. Nhưng trong hoàn cảnh này, chúng ta phải sử dụng phép quay kép trái - phải. Đầu tiên quay trái đỉnh 10, sau đó quay phải đỉnh 15 ta nhận được cây AVL ở vế phải hình 11.5b. 49 [...]... tập dữ liệu được cài đặt dưới dạng cây đỏ - đen thì các phép toán tập động sẽ được thực hiện như thế nào Bởi vì cây đỏ - đen là cây tìm kiếm nhị phân, nên các phép toán hỏi được tiến hành như trên cây tìm kiếm nhị phân Từ định lý 11.2 ta suy ra rằng, các phép toán hỏi trên cây đỏ - đen chỉ cần thời gian O(logn) Cũng như trên cây AVL, các phép toán xen, loại trên cây đỏ - đen khá phức tạp Điều đó là... về sự cân bằng hoặc về màu của đỉnh đó Trong mục này, chúng ta sẽ đưa vào một cấu trúc dữ liệu rất đặc biệt được sử dụng để cài đặt KDLTT tập động, đó là cây tán loe (splay tree) Cây tán loe là cây tìm kiếm nhị phân, song mỗi phép toán trên cây đi kèm theo thao tác cấu trúc lại cây, được gọi là làm loe cây Làm loe cây nhằm mục đích giảm bớt tổng thời gian truy cập dữ liệu bằng cách dịch chuyển các dữ... mất cân bằng Ví dụ Giả sử chúng ta cần loại khỏi cây AVL trong hình 11.5a đỉnh chứa khoá 7 Tìm đến đỉnh ngoài cùng bên phải của cây con trái đỉnh 7 là đỉnh 5 Chép dữ liệu từ đỉnh 5 lên đỉnh 7 và cắt bỏ đỉnh 5 ta nhận được cây tìm kiếm nhị phân như trong hình 11.5b Trong cây hình 11.5b, đỉnh 4 mất cân bằng, thực hiện phép quay phải tại đỉnh 4, ta nhận được cây trong hình 11.5c Đến đây đỉnh 5 lại mất cân. .. trên cây AVL bởi các hàm đệ quy Có thể cài đặt các phép toán xen, loại bởi các hàm không đệ quy được không? Đương nhiên là có, nhưng chúng ta cần phải sử dụng một ngăn xếp để lưu lại các đỉnh trên đường đi từ gốc tới đỉnh mới xen vào, hoặc đường đi từ gốc tới đỉnh bị cắt bỏ 11.3 CÂY ĐỎ - ĐEN Trong mục này chúng ta trình bày một dạng cây cân bằng khác: cây đỏ - đen Trong cây đỏ - đen, các đỉnh của cây. .. ánh được hiệu ứng của các phép toán làm thay đổi trạng thái của cấu trúc dữ liệu 11.6 CÂY TÁN LOE Với cây AVL hoặc cây đỏ - đen, chúng ta không quan tâm tới tần suất truy cập của các phần tử dữ liệu, mà thay cho điều đó chúng ta luôn luôn đảm bảo cây không bao giờ mất cân bằng tại mọi đỉnh, và do đó thời gian thực hiện các phép toán trên cây là O(logn) Để cài đặt cây AVL hoặc cây đỏ - đen, ta cần phải... xứng qua gương của 4 mẫu điều chỉnh trên 70 Tóm lại, thuật toán loại trên cây đỏ - đen như sau Trước hết áp dụng thuật toán loại trên cây tìm kiếm nhị phân Sau đó, đi từ đỉnh bị cắt bỏ lên gốc cây, gặp đỉnh mất cân bằng thì áp dụng các mẫu điều chỉnh để làm cho đỉnh đó trở thành cân bằng Trong trường hợp xấu nhất, sự mất cân bằng có thể truyền lên tận gốc Chú ý rằng, thời gian thực hiện mỗi mẫu điều... gốc cây, và vì vậy sự truy cập tới các dữ liệu đó sẽ nhanh hơn Ưu điểm của cây tán loe là chúng ta không cần lưu thông tin về sự cân bằng của các đỉnh, và do đó, tiết kiệm được bộ nhớ và sự cài đặt cũng đơn giản hơn Việc chuyển một đỉnh v bất kỳ lên gốc cây là rất đơn giản bằng cách sử dụng các phép quay cây (trái hoặc phải), mỗi lần quay đỉnh v được chuyển lên 1 mức Chẳng hạn, chuyển đỉnh 5 lên gốc cây. .. trên cây tìm kiếm nhị phân thì luật đỏ và luật đường có thể bị vi phạm, và lúc đó chúng ta cần phải biến đổi cây để cho cây tuân thủ hai luật đó Phép toán xen Giả sử chúng ta cần xen vào cây đỏ - đen một đỉnh mới v chứa dữ liệu là d Đầu tiên ta áp dụng thuật toán xen vào cây tìm kiếm nhị phân để xen vào cây đỏ - đen đỉnh v và sơn đỏ đỉnh v Như vậy, luật đường vẫn được thoả mãn Nếu ta xen vào cây rỗng,... giảm độ cao của cây con gốc u đi 1, và do đó khi ta thực hiện phép quay đơn (kép) làm cho đỉnh u trở lại cân bằng thì đỉnh cha nó có thể lại mất cân bằng Do đó, không giống như khi thực hiện phép xen, chỉ cần một lần quay đơn (hoặc quay kép) tại một đỉnh là cây trở lại cân bằng, khi thực hiện phép loại sự mất cân bằng được truyền từ đỉnh bị cắt bỏ lên gốc Trong trường hợp xấu nhất, tất cả các đỉnh trên... phép loại là tỉ lệ với độ cao của cây đỏ đen Do đó, theo định lý 11.2, thời gian thực hiện phép loại trên cây đỏ - đen là O(logn) 11.4 CẤU TRÚC DỮ LIỆU TỰ ĐIỀU CHỈNH Các CTDL mà chúng ta đã đưa ra từ trước tới nay, điển hình là cây tìm kiếm nhị phân, cây AVL, cây đỏ - đen, đều có các điểm chung sau Các phép toán hỏi không làm thay đổi CTDL, chỉ khi chúng ta thực hiện các phép toán, như phép xen hoặc . PHẦN II CÁC CẤU TRÚC DỮ LIỆU CAO CẤP 40 CHƯƠNG 11 CÁC CÂY TÌM KIẾM CÂN BẰNG Trong mục 8.4 chúng ta đã nghiên cứu CTDL cây tìm kiếm nhị phân và sử dụng CTDL này để. động trên cây AVL. 12.2.1 Các phép toán tập động trên cây AVL Bởi vì cây AVL là cây tìm kiếm nhị phân, nên các phép toán hỏi: tìm kiếm dữ liệu có khoá k cho trước, tìm dữ liệu có khoá nhỏ nhất. cao cây con phải (trái) 2. Trong các trường hợp đó, chúng ta cần phải cấu trúc lại cây bằng cách sử dụng các phép quay để thiết lập lại sự cân bằng của các đỉnh. Phép toán xen. Việc xen vào cây

Ngày đăng: 01/07/2014, 21:20

Mục lục

  • CÁC CẤU TRÚC DỮ LIỆU CAO CẤP

  • Hình 11.4. Mẫu quay kép trái - phải

  • Hình 11.5. Xen vào cây AVL một đỉnh mới

    • Hình 11.5. Loại khỏi cây AVL

    • Hình 11.6. Một cây đỏ đen

    • Hình 11.16. Làm loe cây tại đỉnh 20

      • R’(g) + R(v) < 2R’(v) – 2

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

Tài liệu liên quan