Ağaçlar ve indeksler · 18 / 53
Binary tree, BST ve sıra istatistikleri
Anla → iz sür → uygula → gerekçelendir
2 dk okuma · uygulama için ayrıca zaman ayırBinary tree her düğüme en fazla iki çocuk verir; BST bunun üstüne bir arama düzeni ekler. Sol alt ağaç küçük, sağ büyük anahtarlardan oluşur; tekrarların nasıl tutulacağı sözleşmedir. Sadece doğrudan çocukları kontrol etmek bütün BST invariant'ını doğrulamaz: derindeki düğüm üst atanın sınırını da sağlamalıdır.
Arama root'tan bir yola iner; maliyet height h'ye bağlıdır. Sıralı ekleme ağacı zincire çevirebilir ve h=n olur. Inorder traversal BST'de anahtarları sıralı verir. Silme yapraktan kolaydır; tek çocukta bağlantı geçer, iki çocukta successor/predecessor ile değişim ve asıl düğümün silinmesi gerekir.
Subtree size alanı ekleyerek rank ve select işlemleri yapılabilir. Her rotation/ekleme/silmede bu metadata güncellenmelidir. Augmentation sadece alan eklemek değil, güncelleme invariant'ını korumaktır. Denge olmadan sıra istatistiği de O(n)'e düşebilir.
Adım adım iz sürme
10 kökü, sol5, 5'+'’in sağında12: yerel5<12 koşulu doğru ama12,10'+'’un solunda olduğu için BST yanlıştır.
Maliyet ve varsayımlar
Arama/ekleme/silme O(h): dengede O(log n), zincirde O(n). Traversal Θ(n), stack O(h).
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
def valid_bst(node, lo=float("-inf"), hi=float("inf")):
if node is None: return True
key, left, right = node
return (lo < key < hi and valid_bst(left, lo, key)
and valid_bst(right, key, hi))
assert not valid_bst((10,(5,None,(12,None,None)),None))KAVRADIĞINI KONTROL ET
Sıra sende
Tekrarlı anahtarlar varsa bu validation yeterli mi?
Çözümün mantığını göster
Hayır; örnek strict BST sözleşmesidir. Count alanı ya da eşitliğe izin veren belirli taraf kuralı seçilmeli ve bütün işlemler buna uymalı.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
MIT 6.006 · Introduction to Algorithms ↗Pat Morin · Open Data Structures ↗