Kırmızı-siyah ağaç olmak için ikili bir ağacı renklendirin


16

Yaygın bir görüşme sorusu, verilen bir ikili ağacın yükseklik dengeli olup olmadığını belirlemek için bir algoritma vermektir (AVL ağacı tanımı).

Kırmızı-Siyah ağaçlara benzer bir şey yapıp yapamayacağımızı merak ediyordum.

Rasgele renklendirilmemiş bir ikili ağaç (NULL düğümleri ile) verildiğinde, Kırmızı-Siyah ağaçlarının tüm özelliklerini karşılayacak şekilde Kırmızı / Siyah düğümlerini renklendirip renklendiremeyeceğimizi (ve bir renk bulup bulamayacağımızı) belirleyen bir "hızlı" algoritma var. (bu sorudaki tanım )?

İlk düşünce, NULL düğümlerini kaldırabildiğimiz ve ortaya çıkan ağacın kırmızı-siyah bir ağaç olup olmadığını tekrar tekrar doğrulamaya çalışabileceğimizdi, ancak bu hiçbir yere gitmedi.

Makaleler için kısa bir web araması yaptım, ancak bu sorunla uğraşan herhangi bir şey bulamadım.

Basit bir şeyi kaçırmam mümkün.


Bir ağacın her düğüm için kırmızı-siyah renkli iff olabileceğinden eminim , ondan NULL düğüme giden en uzun yol en kısa olandan iki kat daha uzun değildir. Bu yeterince hızlı mı?
Karolis Juodelė

Yanıtlar:


12

Bir ağacın her bir düğümü için, bir yaprak düğüme giden en uzun yol, en kısa olandan iki kat daha uzun değilse, ağaç kırmızı-siyah bir renge sahiptir.

İşte herhangi bir düğümün rengini bulmak için bir algoritma n

if n is root,
    n.color = black
    n.black-quota = height n / 2, rounded up.

else if n.parent is red,
    n.color = black
    n.black-quota = n.parent.black-quota.

else (n.parent is black)
    if n.min-height < n.parent.black-quota, then
        error "shortest path was too short"
    else if n.min-height = n.parent.black-quota then
        n.color = black
    else (n.min-height > n.parent.black-quota)
        n.color = red
    either way,
        n.black-quota = n.parent.black-quota - 1

Düğümden n.black-quotabir yaprağa gitmeyi beklediğiniz siyah düğümlerin sayısı nve n.min-heighten yakın yaprağa olan uzaklıktır.

Gösterimin kısalığı için, , h ( n ) = ve m ( n ) = olsun .b(n)= n.black-quotah(n)= n.heightm(n)= n.min-height

Teorem: Bir ikili ağacı düzeltin . Her n T düğümü için , h ( n ) 2 m ( n ) ve r düğümü için = kök ( T ) , b (TnTh(n)2m(n)r=root(T)sonraTb(r)[12h(r),m(r)]T , kökten yaprağa kadar her yolda tam olarak siyah düğümleri olan kırmızı-siyah bir renge sahiptir .b(r)

Kanıt: üzerindeki indüksiyon .b(n)

Bir veya iki yükseklikteki dört ağacın da b ile teoremi yerine getirdiğini doğrulayın..b(n)=1

Kırmızı-siyah ağacın tanımı ile kök siyahtır. , siyah bir ebeveyn p'ye sahip bir düğüm olsun ki b (np. Sonrab(n)=b(p)-1,h(n)=h(p)-1veh(n)m(n)m(p)-1.b(p)[12h(p),m(p)]b(n)=b(p)1h(n)=h(p)1h(n)m(n)m(p)1

Teoremin kök , b ( r ) < b ( q ) olan tüm ağaçlar için geçerli olduğunu varsayın .rb(r)<b(q)

Eğer , daha sonra n- endüktif varsayımı kırmızı renkli siyah olabilir.b(n)=m(n)n

Eğer sonrab(nb(p)=12h(p). nendüktif varsayımı karşılamaz ve bu nedenle kırmızı olmalıdır. Cn'ninçocuğuolsun. h(c)=h(p)-2ve b(c)=b(pb(n)=12h(n)1ncnh(c)=h(p)2 . Daha sonra c endüktif varsayımla kırmızı-siyah renklendirilebilir.b(c)=b(p)1=12h(p)1=12h(c)c

Aynı mantıkla, , daha sonra her ikiNve bir altnendüktif varsayımı karşılamaktadır. Bu nedenlenherhangi bir renge sahip olabilir.b(n)(12h(r),m(r))nnn


@Aryabhata, ebeveyn çocuklarından önce görüldüğü sürece herhangi bir çapraz geçiş iyidir. Yazılı resmi bir kanıtım yok, ama nasıl görüneceğine dair bir fikrim var. Yapabildiğim zaman bir şeyler yazmayı deneyeceğim.
Karolis Juodelė

@Aryabhata, bir kanıt ekledim. Üzgünüm çok uzun sürdü.
Karolis Juodelė

@Aryabhata fikir halinde olmasıdır bir düğüm arasında p belirli sınırları Withing olan, bir çocuk ya da torun C arasında p olabilir b ( c ) bu aynı sınırlar içinde. Sahip B ( n ) bu sınırlar içinde tekabül edebilir , n siyah olmak. İspat çoğu sınırlama hakkındadır saat ve m bir çocuk ya da torunlarının, verilen saat ve m ebeveyn veya büyükbaba ait. Ağacınız kesinlikle renklendirilebilir. b ( r o o tb(p)pcpb(c)b(n)nhmhm , sol çocuk siyah ve sağ çocuk kırmızı, uzunluk 16 yolu b r b r b r , uzunluk 8 yolu b b b b b b b b , 9 ve 12 yolları olabilir birden çok geçerli renklendirme. b(root)=8brbrbrbbbbbbbb
Karolis Juodelė


2

Karolis'in cevabının doğru olduğuna inanıyorum (ve kırmızı-siyah ağaçların oldukça güzel bir karakterizasyonu, bir zaman algoritması), sadece başka bir olası cevabı eklemek istedim.O(n)

Bir yaklaşım dinamik programlama kullanmaktır.

Her bir düğüm için, bir ağaç verilen :, iki set oluşturmak S R ( n ) ve S B ( n ) kökü alt ağacı için olası siyah yükseklikleri içeren n . S R ( n ) , siyah-yükseklikleri varsayarak içeren N kırmızı renklidir ve S B ( n ) varsayarak , nnSR(n)SB(n)nSR(n)nSB(n)n siyah renklidir.

Şimdi ve n . R i g h t (yani n'nin doğrudan çocukları ), uygun kavşakları ve birlikleri (ve gerektiği gibi arttırarak) alarak n için karşılık gelen setleri hesaplayabiliriz .n.Leftn.Rightnn

Bunun bir zaman algoritması olduğuna inanıyorum .O(nlogn)

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.