Java sınıfımda, farklı koleksiyon türlerinin karmaşıklığını öğreniyoruz.
Yakında üzerinde okuduğum ikili ağaçları tartışacağız. Kitap, ikili bir ağacın minimum yüksekliğinin, ancak daha fazla açıklama sunmaz.
Birisi nedenini açıklayabilir mi?
Java sınıfımda, farklı koleksiyon türlerinin karmaşıklığını öğreniyoruz.
Yakında üzerinde okuduğum ikili ağaçları tartışacağız. Kitap, ikili bir ağacın minimum yüksekliğinin, ancak daha fazla açıklama sunmaz.
Birisi nedenini açıklayabilir mi?
Yanıtlar:
Bir ikili ağacın yapraksız düğümlerde 1 veya 2 çocuğu ve yaprak düğümlerinde 0 düğümü vardır. Bırak olsun Bir ağaçtaki düğümler ve onları hala geçerli bir ikili ağaç oluşturacak şekilde düzenlemeliyiz.
Kanıtlamadan, yüksekliği en üst düzeye çıkarmak için verilen düğümlerin doğrusal olarak düzenlenmesi gerektiğini, yani her bir yaprak olmayan düğümün sadece bir çocuğu olması gerektiğini belirtiyorum:
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
Burada, düğüm sayısı açısından yükseklik ilişkisini hesaplamak için formül basittir. Eğer ağacın yüksekliği o zaman .
Şimdi, eğer bir ikili ağaç inşa etmeye çalışırsak minimum yüksekliğe sahip düğümler (her zaman tam bir ikili ağaca indirgenebilir), bir sonraki seviyeye geçmeden önce üst seviyelerde mümkün olduğunca çok sayıda düğüm paketlemeliyiz. Böylece, ağaç aşağıdaki ağaç biçimini alır:
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
Belirli bir vaka ile başlayalım, .
Biz biliyoruz ki,
Ayrıca, bunu kanıtlamak kolaydır. en fazla olabilir içindeki düğümler.
Bu sonucu yukarıdaki toplamda kullanarak, her seviye için , itibaren için , karşılık gelen bir terim var genişlemesinde . Bu, tam bir ikili ağacın düğümler tamamen dolu ve yüksekliği var, , nerede ile tam bir ikili ağacın yüksekliği düğümleri.
Bu sonucu kullanarak, , ağaçtan beri düğümler tamamen dolu ve böylece düğümler ekstra düğümü bir sonraki aşamada karşılamak zorundadır , yüksekliği 1'den artırarak için .
Şimdiye kadar kanıtladık,
Böylece,
Ancak, her iki tarafta log (taban 2) alarak,
Böylece,
Ve bu sonucu genelleştirebiliriz indüksiyon kullanarak.
PS: Tam bir ikili ağacın yüksekliğini şöyle gösteren kitap herkes için geçerli değil Çünkü çoğu tamsayı için integral olmayan değerler verir (yani mükemmel ikili ağaçlar hariç herkes için), ancak bir ağacın yüksekliği tamamen ayrılmazdır.
Bunu varsayıyorum , ikili ağaçtaki toplam düğüm sayısını kastediyorsunuz. İkili ağacın yüksekliği (veya derinliği), kök düğümden (ebeveynsiz düğüm) en derin yaprak düğümüne giden yolun uzunluğudur. Bu yüksekliği en aza indirmek için, ağacın en çok doygun olması gerekir (son katman hariç), yani belirli bir katmanın çocuklu düğümleri varsa, üst katmandaki tüm düğümlerin iki çocuğu olmalıdır.
Yani tamamen doymuş bir ikili ağaç katmanlar sahip olacak maksimum düğüm ve derinliğe sahip olacak . Böylece, bir ikili ağacın derinliğine sahipsek, maksimum düğüm sayısını (ağaç tamamen doygun olduğunda ortaya çıkan) kolayca bulabiliriz. Cebir sınıflarınızdan hatırlarsanız, bu sadece geometrik bir seridir ve bu nedenle şu şekilde temsil edilebilir:
Şimdi yeniden düzenleyelim:
Yüksekliği minimumda tutmak için, sonuncusu hariç tüm seviyeleri doldurmamız gerektiğini görmek kolaydır. Neden? aksi takdirde, son seviye düğümlerini üst seviyelerde boş yuvalara taşıyabiliriz.
Şimdi, belirtilmemiş sayıda fasulyem olduğunu ve size her seferinde bir fasulye verdiğimizi ve mümkün olan en düşük yükseklikte bir ikili ağaç inşa etmenizi istediğimizi hayal edin. Ya son seviyeyi tamamen doldurduğunda ya da en azından son seviyede bir çekirdeğe sahip olduğum zaman fasulye tükenebilir. Diyelim ki bu noktada h ağaç yüksekliğiniz var .
Her iki durumda da, h değişmez. Yani bu , benim kısıtlamamla birlikte h yüksekliğinde tam bir ikili ağaca sahip olduğunuz anlamına gelir . Ama son seviyede hayali fasulye varsaydım (eğer son seviyeyi dolduramazsan). Yani aslında,