Định nghĩa về cây cân bằng


100

Tôi chỉ đang tự hỏi nếu ai đó có thể làm rõ định nghĩa của một cây cân bằng cho tôi. Ta có rằng “một cây là cân đối nếu mỗi cây con cân đối và chiều cao của hai cây con chỉ chênh lệch nhau nhiều nhất một cây.

Tôi xin lỗi nếu đây là một câu hỏi ngớ ngẩn, nhưng liệu định nghĩa này có áp dụng cho mọi nút từ tận đến lá của cây hay chỉ cho các cây con bên trái và bên phải ngay lập tức khỏi gốc? Tôi đoán một cách khác để tạo khung cho điều này là, liệu các nút bên trong của cây có thể không cân bằng và toàn bộ cây vẫn cân bằng không?


6
Chỉ muốn nói thêm rằng chúng ta đang nói về Comp. Định nghĩa khoa học về cây con: Cây con của cây T là một cây bao gồm một nút trong T và tất cả các nút con của nó trong T. Đối với một định nghĩa toán học thông thường (một đồ thị con của cây mà bản thân nó là một cây) thì không đúng. .
TT_

Câu trả lời:


123

Ràng buộc thường được áp dụng đệ quy cho mọi cây con. Tức là cây chỉ cân bằng nếu:

  1. Chiều cao của cây con bên trái và bên phải chỉ khác nhau nhiều nhất là một, VÀ
  2. Cây con bên trái là cân bằng, VÀ
  3. Cây con bên phải được cân bằng

Theo điều này, cây tiếp theo được cân bằng:

     A
   /   \
  B     C  
 /     / \  
D     E   F  
     /  
    G  

Cái tiếp theo không cân bằng vì các cây con của C khác nhau 2 về chiều cao:

     A
   /   \
  B     C   <-- difference = 2
 /     /
D     E  
     /  
    G  

Điều đó nói rằng, ràng buộc cụ thể của điểm đầu tiên phụ thuộc vào loại cây. Cái được liệt kê ở trên là điển hình cho cây AVL .

Ví dụ, cây đỏ-đen áp đặt một hạn chế nhẹ nhàng hơn.


50

Có một số cách để định nghĩa "Cân bằng". Mục tiêu chính là duy trì độ sâu của tất cả các nút O(log(n)).

Có vẻ như với tôi rằng điều kiện cân bằng mà bạn đang nói đến là đối với cây AVL .
Đây là định nghĩa chính thức về điều kiện cân bằng của cây AVL :

Đối với bất kỳ nút nào trong AVL, chiều cao của cây con bên trái của nó khác với chiều cao của cây con bên phải nhiều nhất là 1.

Câu hỏi tiếp theo, " chiều cao " là gì?

" Chiều cao " của một nút trong cây nhị phân là độ dài của đường đi dài nhất từ ​​nút đó đến lá.

Có một trường hợp kỳ lạ nhưng phổ biến:

Người ta xác định chiều cao của một cây trống là (-1).

Ví dụ, con bên trái của root là null:

              A  (Height = 2)
           /     \
(height =-1)       B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
                    \
                     C (Height = 0)

Hai ví dụ khác để xác định:

Có, Ví dụ về cây cân bằng :

        A (h=3)
     /     \
 B(h=1)     C (h=2)        
/          /   \
D (h=0)  E(h=0)  F (h=1)
               /
              G (h=0)

Không, Không phải Cây Cân bằng Ví dụ:

        A (h=3)
     /     \
 B(h=0)     C (h=2)        <-- Unbalanced: 2-0 =2 > 1
           /   \
        E(h=1)  F (h=0)
        /     \
      H (h=0)   G (h=0)      

1
Lưu ý rằng định nghĩa này cho phép cây con cân bằng không cân bằng. (ví dụ: mở rộng ví dụ cây cân bằng ở trên bằng cách thêm một con vào D và một con khác vào G) Điều này có nhằm mục đích không?
gen

2
Không, không. " Đối với bất kỳ nút nào trong AVL , chiều cao của cây con bên trái của nó chênh lệch nhiều nhất 1 so với chiều cao của cây con bên phải." Nếu bạn thêm một đứa trẻ vào D, thì B sẽ không tuân theo quy tắc trên. Do đó, cây sẽ không phải là BBT.
John Red

1
Câu trả lời của bạn là rất dài dòng và không chính xác
Marwen Trabelsi

9

Không có sự khác biệt giữa hai điều này. Hãy suy nghĩ về nó.

Hãy lấy một định nghĩa đơn giản hơn, "Một số dương là số chẵn nếu nó là số 0 hoặc số đó trừ đi hai là số chẵn." Điều này nói rằng 8 là chẵn nếu 6 là chẵn? Hay điều này nói rằng 8 là chẵn nếu 6, 4, 2 và 0 là chẵn?

Không có gì khác biệt. Nếu nó nói 8 là chẵn nếu 6 là chẵn, nó cũng nói 6 là chẵn nếu 4 là chẵn. Và do đó nó cũng nói 4 là chẵn nếu 2 là chẵn. Và do đó nó nói 2 là chẵn nếu 0 là chẵn. Vì vậy, nếu nó nói 8 là chẵn nếu 6 là chẵn, nó (gián tiếp) nói 8 là chẵn nếu 6, 4, 2 và 0 là chẵn.

Ở đây cũng vậy. Bất kỳ cây con gián tiếp nào cũng có thể được tìm thấy bởi một chuỗi các cây con trực tiếp. Vì vậy, ngay cả khi nó chỉ áp dụng trực tiếp cho các cây con trực tiếp, nó vẫn áp dụng gián tiếp cho tất cả các cây con (và do đó tất cả các nút).


1
Giả sử giá trị của gốc là 15. Xuống bên phải, tôi có 16,17,18. Xuống bên trái tôi có 14,13,12. Đó có phải là cây cân bằng không? Chiều cao của mỗi cây con ngoài nút nằm trong một. Nhưng lấy nút đầu tiên ở dưới gốc bên phải thì nó không có con bên trái mà chiều cao của các con bên phải của nó là 2. Như vậy nút đó không cân đối. Đúng không?
Mark Soric

1
Chính xác. Như vậy cây không cân đối.
David Schwartz

1
Vì vậy, để một cây cân bằng - mọi nút phải được cân bằng. Beauty - Cảm ơn rất nhiều vì sự giúp đỡ của bạn.
Mark Soric

1
@DavidSchwartz tại sao chúng ta lại cố gắng sử dụng cây cân bằng? Tại sao chúng ta quan tâm xem cây có cân đối hay không?
Dejell

3
Đây là câu trả lời phức tạp nhất mà tôi từng thấy trên SO - cho bất kỳ câu hỏi nào. Xin lỗi khi nói điều này.
Trevor

4

Cây cân đối là cây có chiều cao theo thứ tự khúc gỗ (số phần tử trong cây).

height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree

Định nghĩa được đưa ra "một cây là cân đối của mỗi cây con là cân bằng và chiều cao của hai cây con chỉ chênh lệch nhau nhiều nhất là một" được tuân theo bởi các cây AVL.

Vì cây AVL là cây cân bằng nhưng không phải tất cả cây cân bằng đều là cây AVL, cây cân bằng không giữ định nghĩa này và các nút bên trong có thể không cân bằng trong chúng. Tuy nhiên, cây AVL yêu cầu tất cả các nút bên trong phải được cân bằng.


3

Mục đích của cây cân đối là đạt được lá với chiều ngang tối thiểu (chiều cao tối thiểu). Độ của cây là số cành trừ đi 1. Cây Cân bằng có thể không phải là Binary.


0
  1. Chiều cao của một nút trong cây là chiều dài của đường đi dài nhất từ ​​nút đó xuống đến lá, tính cả đỉnh đầu và đỉnh cuối của đường đi.
  2. Một nút trong cây được cân bằng chiều cao nếu chiều cao của các cây con của nó khác nhau không quá 1.
  3. Một cây cân bằng về chiều cao nếu tất cả các nút của nó đều có chiều cao cân đối.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.