Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
437,5 KB
Nội dung
PHẦN II CÁC CẤU TRÚC DỮ LIỆU CAO CẤP 40 CHƯƠNG 11 CÁCCÂYTÌMKIẾMCÂNBẰNG Trong mục 8.4 chúng ta đã nghiên cứu CTDL câytìmkiế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âytìmkiế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âytìmkiếmcâ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áccâytìmkiếmcânbằ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áccâ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âytìmkiếm nhị phân, tức là chúng đều phải thoả mãn tính chất tìmkiế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ânbằ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âybằ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ìmkiế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ìmkiế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ìmkiế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âytìmkiế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áccâ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áccâ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âytìmkiếm nhị phân, nên các phép toán hỏi: tìmkiế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âytìmkiế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âytìmkiếm nhị phân, bởi vì sau khi xen (loại) tính cânbằ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âybằng cách sử dụng các phép quay để thiết lập lại sự cânbằ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âytìmkiế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ânbằ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ânbằ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ânbằ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ânbằ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áccâ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ânbằ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ânbằ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âytìmkiế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ìmkiế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ânbằ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ìmkiế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ânbằ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ìmkiế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âycânbằ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ânbằ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âytìmkiếm nhị phân Sau đó, đi từ đỉnh bị cắt bỏ lên gốc cây, gặp đỉnh mất cânbằng thì áp dụng các mẫu điều chỉnh để làm cho đỉnh đó trở thành cânbằng Trong trường hợp xấu nhất, sự mất cânbằ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ânbằ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ìmkiế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âytìmkiế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ânbằng thì đỉnh cha nó có thể lại mất cânbằ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ânbằ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ìmkiế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