Kırmızı-siyah bir ağaç düşünün. Her zaman onu yaratan bir dizi ekleme ve silme var mı?


41

Kırmızı-siyah bir ağacın aşağıdaki tanımını varsayalım:

  1. Bu bir ikili arama ağacıdır.
  2. Her bir düğüm kırmızı ya da siyah renklidir. Kök siyah.
  3. Bir kenar tarafından birbirine bağlanmış iki düğüm aynı anda kırmızı olamaz.
  4. İşte WIL'deki gibi bir NIL yaprağının iyi bir tanımı olmalı . NIL yaprağı siyah renklidir.
  5. Kökten herhangi bir NIL yaprağına giden yol aynı sayıda siyah düğüm içerir.


Soru

Kırmızı-siyah ağaç için insertve deleteişlemlerini uyguladığınızı varsayalım . Şimdi, eğer geçerli bir kırmızı-siyah ağaç verilirse, onu oluşturan bir dizi insertve deleteişlemler her zaman var mı?


Motivasyon

Bu soru, bu motive edilir sorusuna ve gelen tartışma ile bu soruya .

Şahsen, yalnızca siyah düğümlerden oluşan (mükemmel dengelenmiş bir ağaç hayal ettiğiniz anlamına gelir) geçerli bir kırmızı-siyah ağaç hayal ederseniz, onu oluşturan bir dizi insertve deleteişlem olduğuna inanıyorum. Ancak,

  1. Bunu doğru olarak nasıl ispatlayacağımı bilmiyorum
  2. Ben daha genel davaya da ilgi duyuyorum

Sorunuz biraz dairesel geliyor ... herhangi bir ekleme ve silme işlemi herhangi bir kırmızı-siyah ağaç oluşturacak ... tam anlamıyla bir şey çünkü kırmızı-siyah sadece bir tanım. Sorunuz tamamen siyah bir ağaçla mı sınırlı?
JOX

2
Hayır, bence yanlış anladın. Elbette, herhangi bir ek ve silme kümesi kırmızı-siyah bir ağaç oluşturur. Soru şudur: bir dizi kesici uç ve silme tarafından yapılandırılabilir tanımlamaya uyan herhangi bir ağaç var mı? Biraz ağaç verilirse, bir dizi ek ve silmeyi yeniden oluşturabilir misiniz?
alisianoi

2
@ all3fox Evet, haklısınız. Operasyonu kullanan bir algoritma vardır insertve deletebir inşa etmek sadece siyah düğümden oluşan geçerli kırmızı-siyah ağaç . Bu kullanır , eklemeler / silmeler yüksekliği bir ağaç oluşturmak için . Öncelikle, ekleri kullanarak genişlikle ilk olarak mükemmel dengelenmiş bir kırmızı-siyah ağaç oluşturabiliriz , ardından ekleri ve aynı miktarda silme işlemini yeniden oluşturabiliriz tamamen siyah bir ağaç. Buradaki hile , en alttaki kırmızı katmanın ağacın kök kısmına ulaşana kadar yukarı katının yönünde hareket etmesi . (h+2)2h1h2h+11h2h1h
Anton Trunov

1
@AntonTrunov teşekkür ederim, bunu anlıyorum. Yine de genel bir Kırmızı-Siyah Ağacı örneğine ne dersiniz? Sizce, herhangi bir Kırmızı-Siyah Ağacı inşa etmek insertve deleteişlem yapmak mümkün mü?
alisianoi

2
a) Cevap, insertve uygulamasının kesin uygulanmasına bağlı olacaktır delete; bu işlemleri yapmanın birkaç yolu olabilir. b) RB ağaçları esasen 4. dereceden B-ağaçları olduğundan, orada ilham alınabilir. RB'den B'ye (ve / veya geriye) eşleme benzersiz olmadığı için detaylar zor olabilir.
Raphael

Yanıtlar:


2

Kırmızı-siyah bir ağaçtaki ekleme ve silme işlemleri , kırmızı-siyah özelliklerini korumak için gereken dengelemeyi içerir .

(Sol veya sağ) eğimli olmayan kırmızı siyah ağaçların sorunu, temel silme veya eklemeden sonra kırmızı-siyahlığı geri yüklemek için birden fazla yol bulunmasıdır.
Ağacı dönüştüren ek ya da silme değil, ağacın kırmızılığını korumak / eski haline getirmek için daha sonra gerçekleşen yeniden dengeleme ve döndürmedir.

Kırmızı-siyah ağacın temel tanımı, hangisinin muhtemel rotalardan hangisini alacağını belirtmez. Belirli bir kırmızı siyah ağacın tam olarak
nasıl yeniden yapılandırılacağını bulmak mümkün olmayabilir , çünkü yeniden dengelemenin deterministik olması gerekmez.

Bu, sol eğimli kırmızı siyah ağaçlarla 'çözüldü'.
Dengelemenin tek bir yolu var. Böylece, herhangi bir eğilmiş kırmızı siyah ağaç, kesici uçlar ve silmeler kullanılarak yeniden yapılandırılabilir, çünkü yeniden dengeleme / döndürmeler belirli bir belirleyici şekilde yapılır.

Bu, sola yaslanan RB ağaçlarının daha iyi veya daha verimli olduğu, bir yandan deterministik dengeleme kurallarını kullanarak elde ettikleri, diğer yandan daha karmaşık dengeleme koduyla kaybedecekleri anlamına gelmez.

@ Anton'un yorumuna göre:
İşlem ekleme ve silme işlemini yalnızca siyah düğümlerden oluşan geçerli bir kırmızı-siyah ağaç oluşturmak için kullanan bir algoritma var. Bu kullanır yüksekliği bir ağaç oluşturmak için ekleme / silme . Öncelikle, eklentileri kullanarak, sonra manner eklentilerini kullanarak ve aynı miktarda silme işlemlerini kullanarak genişlikle ilk olarak mükemmel dengeli bir kırmızı-siyah ağaç oluşturabiliriz tamamen siyah bir ağaç. Buradaki hile , en alttaki kırmızı katmanın ağacın kök kısmına ulaşana kadar yukarı katının yönünde hareket etmesi .(h+2)2h1h2h+11h2h1h

Bence Day-Stout-Warren gibi tam bir dengeleme algoritması olsa daha verimli olacağını düşünüyorum.


1
İşlemleri kullanarak insertve deleteCLRS kitabından sadece siyah düğümlerden oluşan geçerli bir RB ağacı oluşturabilirsiniz . İşin püf noktası, gerekenden daha fazla düğüm eklemek ve ardından aşırı olanları silmek. Algoritma edecek kırmızı düğümleri ortadan kaldırır.
Anton Trunov

@AntonTrunov, bu algoritma için bir bağlantınız var mı, cevabı eklemek güzel olurdu. Google-fu'mı kullanarak bulamıyorum.
Johan

1
Maalesef bir bağlantım yok. O sırada soruyu cevaplamaya çalıştım ve tüm siyah RB ağaçlarının özel durumu için bir algoritma buldum. Bunu bu yorumda açıkladım, ancak bir kanıt sunmadım.
Anton Trunov

Ne demek "Bu eğri, sol eğimli kırmızı siyah ağaçlarla" çözüldü. " Sol eğimli kırmızı siyah bir ağacın bile aynı öğeleri saklamanın birden fazla yolu vardır.
user239558
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.