Chiều cao trung bình của cây nhị phân là gì?


10

Có định nghĩa chính thức nào về chiều cao trung bình của cây nhị phân không?

Tôi có một câu hỏi hướng dẫn về việc tìm chiều cao trung bình của cây nhị phân bằng hai phương pháp sau:

  1. Giải pháp tự nhiên có thể là lấy chiều dài trung bình của tất cả các đường dẫn có thể từ gốc đến lá, đó là

    avh1(T)=1# leaves in Tv leaf of Tdepth(v) .

  2. Một tùy chọn khác là định nghĩa nó một cách đệ quy, đó là chiều cao trung bình của một nút là trung bình trên độ cao trung bình của các cây con cộng với một, đó là

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    với cho các lá và cho các vị trí trống.l avh 2 ( _ ) = 0avh2(l)=1lavh2(_)=0

Dựa trên hiểu biết hiện tại của tôi, ví dụ chiều cao trung bình của câyT

    1    
   / \
  2   3
 /
4

là theo phương thức thứ hai, đó là sử dụng đệ quy.avh2(T)=1.25

Tuy nhiên, tôi vẫn không hiểu cách thực hiện cái đầu tiên. không đúng.avh1(T)=(1+2)/2=1.5


1
Bạn có thể cung cấp một số bối cảnh? Không có thứ gọi là định nghĩa toán học "đúng"; bạn có thể định nghĩa "chiều cao trung bình của cây nhị phân" theo cách bạn muốn. (Trung bình của những gì trên những gì phân phối ?) Nhưng định nghĩa khác nhau sẽ ít nhiều hữu ích cho các ứng dụng khác nhau.
JeffE

@JeffE "Không rõ ràng ngay lập tức làm thế nào để xác định chiều cao trung bình của cây nhị phân. Có lẽ giải pháp tự nhiên nhất có thể là có độ dài trung bình của các đường dẫn có thể từ gốc đến lá. Một giải pháp đơn giản hơn (thậm chí đơn giản hơn) là để nói rằng chiều cao trung bình của một nút là trung bình so với chiều cao trung bình của các cây con cộng với một. Bạn điền vào sẽ dễ dàng hơn để viết mã thay thế này. Bạn có thể đưa ra ví dụ để chứng minh sự khác biệt không? "
Vô tận

Tôi đã cố gắng làm cho bài viết của bạn rõ ràng hơn bằng cách đưa ra các định nghĩa chính xác về hai biến thể. Vui lòng kiểm tra xem tôi đã giải thích chính xác văn bản của bạn. Cụ thể, bạn đã thiếu neo cho biến thể thứ hai; dù bạn lấy lá để có chiều cao một hay không đều tạo nên sự khác biệt.
Raphael

Câu trả lời:


3

Không có lý do để tin rằng cả hai định nghĩa mô tả cùng một biện pháp. Bạn cũng có thể viết đệ quy:avh1

avh1(N(l,r))=lv(l)(avh1(l)+1)+lv(r)(avh1(r)+1)lv(l)+lv(r)

với cho lá . Nếu bạn không tin rằng điều này giống nhau, hãy mở ra định nghĩa của ở phía bên tay phải hoặc thực hiện bằng chứng cảm ứng.l avh 1avh1(l)=0lavh1

Bây giờ chúng ta thấy rằng hoạt động hoàn toàn khác với . Trong khi cân bằng độ cao đệ quy của một nút con bằng nhau (thêm và chia cho hai), cân chúng theo số lượng lá mà chúng chứa. Vì vậy, chúng giống nhau (modulo neo) cho cây cân bằng lá, được cân bằng theo nghĩa là cây anh chị em có nhiều lá như nhau. Nếu bạn đơn giản hóa hình thức đệ quy của với thì điều này ngay lập tức rõ ràng. Trên cây không cân bằng, tuy nhiên, chúng là khác nhau.avh 2 avh 2 avh 1 avh 1 lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)

Tính toán của bạn là thực sự chính xác (đưa ra định nghĩa của bạn); lưu ý rằng cây ví dụ không cân bằng lá.


Có thể hiển thị mã triển khai cho , tôi không hiểu ý tưởng làm thế nào để thực hiện đệ quyavh1
Vô thời gian

@null: Xin lỗi, tôi không hiểu câu hỏi. Ý bạn là làm thế nào để chứng minh rằng định nghĩa đệ quy của tương đương với bạn? avh1
Raphael

Ý tôi là mã triển khai sử dụng đệ quy
Vô tận

@null: Bạn có thể sao chép công thức gần như theo nghĩa đen , miễn là bạn kết hợp trường hợp cơ sở. Làm thế nào để làm điều đó chính xác phụ thuộc vào ngôn ngữ lập trình và thực hiện cây của bạn. Tôi khuyên bạn nên thực hiện tái phát cho Stack Overflow nếu việc triển khai là một trở ngại cho bạn.
Raphael

2

Chỉnh sửa: Jeffe làm cho một điểm tốt trong bình luận của mình ở trên. Có lẽ bạn nên đọc "chính xác so với không chính xác" trong câu trả lời sau là "thuận tiện / nhất quán và không nhất quán".

Có vẻ như tính toán thứ hai của bạn là không chính xác. Đặt chiều cao của cây con với một nút (tức là một chiếc lá) là 0. Sau đó, chiều cao của gốc cây con tại:

  • chiều cao ở 4 là 0
  • chiều cao ở 3 là 0
  • chiều cao ở 2 là chiều cao trung bình ở 3 + 1 = 0 + 1 = 1
  • chiều cao ở 1 là trung bình của chiều cao ở 2 và 3 = (0 + 1) / 2 + 1 = 1,5

Tôi nghĩ rằng bạn đang thực hiện phép tính đầu tiên một cách chính xác và 1,5 là câu trả lời đúng.


ý tưởng là nút null có chiều cao -1, dựa trên cách tiếp cận thứ 2, chiều cao trung bình của nút là trung bình của cây con cộng với 1, chiều cao trung bình của nút 4 là ((-1) + (- 1)) / 2 + 1 = 0 , chiều cao trung bình của nút 2 là (0 + (- 1)) / 2 + 1 = 0,5, và do đó chiều cao trung bình của gốc là 1,25.
Vô tận

@null Bạn có thể định nghĩa nó theo cách đó nếu bạn nhấn mạnh, nhưng sau đó hai định nghĩa sẽ không nhất quán.
Joe
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.