Dengeli Ağacın Tanımı


104

Birisi benim için dengeli bir ağacın tanımını açıklığa kavuşturabilir mi diye merak ediyorum. "Her bir alt ağacın dengeli olması ve iki alt ağacın yüksekliği en fazla bir tane farklı olması durumunda bir ağaç dengelenir.

Bu aptalca bir soruysa özür dilerim, ancak bu tanım bir ağacın yapraklarına kadar her düğüm için mi yoksa kökten hemen uzaktaki sol ve sağ alt ağaçlar için mi geçerli? Sanırım bunu çerçevelemenin başka bir yolu da, bir ağacın iç düğümlerinin dengesiz olması ve tüm ağacın dengeli kalması mümkün müdür?


6
Comp hakkında konuştuğumuzu eklemek istedim. Bir alt ağacın bilimsel tanımı: T ağacının bir alt ağacı, T'deki bir düğümden ve T'deki tüm soyundan gelen bir ağaçtır. .
TT_

Yanıtlar:


125

Kısıtlama genellikle her alt ağaca yinelemeli olarak uygulanır. Yani, ağaç yalnızca şu durumlarda dengelenir:

  1. Sol ve sağ alt ağaçların yükseklikleri en fazla bir farklılık gösterir VE
  2. Sol alt ağaç dengelidir, VE
  3. Doğru alt ağaç dengelidir

Buna göre bir sonraki ağaç dengelidir:

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

Bir sonraki, dengeli değildir çünkü C'nin alt ağaçlarının boyları 2 farklıdır:

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

Bununla birlikte, ilk noktanın belirli kısıtlaması ağacın türüne bağlıdır. Yukarıda listelenen, AVL ağaçları için tipiktir .

Örneğin kırmızı-siyah ağaçlar daha yumuşak bir sınırlama getirir.


53

"Dengeli" yi tanımlamanın birkaç yolu vardır. Ana amaç, tüm düğümlerin derinliklerini korumaktır O(log(n)).

Bana öyle geliyor ki bahsettiğiniz denge durumu AVL ağacı için . AVL ağacının denge durumunun
resmi tanımı şöyledir :

AVL'deki herhangi bir düğüm için, sol alt ağacının yüksekliği, sağ alt ağacının yüksekliğinden en fazla 1 farklılık gösterir .

Sonraki soru, " boy " nedir?

İkili bir ağaçtaki bir düğümün " yüksekliği ", o düğümden bir yaprağa giden en uzun yolun uzunluğudur.

Garip ama yaygın bir durum var:

İnsanlar boş bir ağacın yüksekliğini tanımlarlar (-1).

Örneğin, kökün sol çocuğu null:

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

Belirlenecek iki örnek daha:

Evet, Dengeli Bir Ağaç Örneği:

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

Hayır, Dengeli Ağaç Değil Örneği:

        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
Bu tanımın, dengeli ağaçların dengesiz alt ağaçlarına izin verdiğini unutmayın. (ör. D'ye bir çocuk ve G'ye bir tane daha ekleyerek yukarıdaki dengeli ağaç örneğini genişletin) Bu amaçlanıyor mu?
gen

2
Hayır değil. " AVL'deki herhangi bir düğüm için, sol alt ağacının yüksekliği, sağ alt ağacının yüksekliğinden en fazla 1 farklıdır." D'ye bir çocuk eklerseniz, B yukarıdaki kurala uymayacaktır. Dolayısıyla ağaç BBT olmayacak.
John Red

1
cevabınız çok ayrıntılı ve doğru değil
Marwen Trabelsi

9

Bu iki şey arasında hiçbir fark yok. Bunu düşün.

Daha basit bir tanım alalım, "Pozitif bir sayı sıfır olsa bile veya bu sayı eksi iki çifttir." Bu, 6 bile olsa 8 eşit mi diyor? Yoksa bu, 6, 4, 2 ve 0 çift olsa 8 bile mi diyor?

Fark yok. 8 eşittir 6 eşittir diyorsa 6 eşittir 4 eşittir diyor. Ve böylece 4 eşittir 2 eşittir diyor. Ve böylece, 0 çift olsa bile 2'dir diyor. Öyleyse 8 eşittir 6 eşittir derse, (dolaylı olarak) 6, 4, 2 ve 0 bile olsa 8 eşittir der.

Burada da aynı şey var. Herhangi bir dolaylı alt ağaç, bir doğrudan alt ağaç zinciri tarafından bulunabilir. Dolayısıyla, yalnızca doğrudan alt ağaçlara uygulansa bile, yine de dolaylı olarak tüm alt ağaçlara (ve dolayısıyla tüm düğümlere) uygulanır.


1
Diyelim ki kökün değeri 15. Sağ altta 16,17,18 var. Solda 14,13,12 var. Bu dengeli bir ağaç mı? Düğüm dışındaki her bir alt ağacın yüksekliği bir içindedir. Ancak kökün altındaki ilk düğümü sağa alın, sol çocuğu yoktur ama sağ çocuklarının yüksekliği 2'dir. Böylece bu düğüm dengeli değildir. Bu doğru mu?
Mark Soric

1
Doğru. Böylece ağaç dengeli değildir.
David Schwartz

1
Yani bir ağacın dengelenmesi için - her düğümün dengelenmesi gerekir. Güzellik - Yardımın için çok teşekkürler.
Mark Soric

1
@DavidSchwartz neden dengeli bir ağaç kullanmaya çalışıyoruz? Bir ağacın dengeli olup olmaması neden umurumuzda olsun?
Dejell

3
Bu, SO'da gördüğüm en karmaşık cevap - herhangi bir soruya. Bunu söylediğim için üzgünüm.
Trevor

4

Dengeli ağaç, yüksekliği log sırası (ağaçtaki eleman sayısı) olan bir ağaçtır.

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

"Her bir alt ağacın bir ağacı dengelenir ve iki alt ağacın yüksekliği en fazla bir tane değişir" tanımını AVL ağaçları takip eder.

AVL ağaçları dengeli olduğu, ancak tüm dengeli ağaçlar AVL ağaçları olmadığı için dengeli ağaçlar bu tanımı tutmaz ve iç düğümler dengesiz olabilir. Ancak, AVL ağaçları tüm dahili düğümlerin dengelenmesini gerektirir.


3

Dengeli ağacın amacı yaprağa minimum çaprazlamada (minimum yükseklik) ulaşmaktır. Ağacın derecesi, dal sayısı eksi 1'dir. Dengeli bir ağaç İkili olmayabilir.


0
  1. Bir ağaçtaki bir düğümün yüksekliği, yolun hem başlangıç ​​hem de bitiş köşelerini sayarak, o düğümden aşağıya doğru en uzun yolun uzunluğudur.
  2. Bir ağaçtaki bir düğümün, alt ağaçlarının yükseklikleri 1'den fazla farklılık göstermiyorsa, yükseklik dengelidir.
  3. Bir ağacın tüm düğümlerinin yüksekliği dengeli ise, ağacın yüksekliği dengelenir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.