Bir İkili Arama Ağacı için Silme prosedürü

oy
7

Silmek Düğüm iki çocuğu var olduğunda, bir BST'de silme işlemini düşünün. en hep sağ alt ağaç minimum tuşu basılı düğüm ile değiştirin diyelim.

Soru şu: Bu prosedür değişmeli mi? Yani, x silme ve sonra y ilk Y ve x, silme ile aynı sonucu verir?

Cevabın hayır olduğunu düşünüyorum, ama bir karşı örnek bulmak, ne de herhangi bir geçerli muhakeme çözemiyorum.

DÜZENLE:

Belki daha net olmak lazım.

Göz önünde transplant(node x, node y)prosedürü: bu y (ve alt ağacı) x yerine. Ben bir düğüm silmek istiyorsanız, (diyelim x) iki çocuğu olan i sağ alt ağaç minimum tuşu basılı düğüm ile değiştirin:

y = minimum(x.right)
transplant(y, y.right) // extracts the minimum (it doesn't have left child)
y.right = x.right
y.left = x.left
transplant(x,y)

sorusu Yukarıdaki prosedür değişmeli olmadığını kanıtlamak nasıl oldu.

Oluştur 07/06/2010 saat 15:46
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
17

(Genel olarak) silinmesi değişmeli değildir. İşte counterexample geçerli:

    4
   / \
  3   7
     /
    6

Biz 4 ve daha sonra 3 ya silmek olur?

Biz 4 sildiğinizde, yeni kök olarak 6 olsun:

   6
  / \
 3   7

ağaç değişmez 3 silinmesi, ancak bize bu veriyor:

  6
   \
    7

Biz 3 ve daha sonra 4 ya silmek olur?

Biz 3 sildiğinizde ağaç değişmez:

 4
  \
   7
  /
 6

Şimdi 4 silmek Ancak, yeni kök 7 dönüşür:

  7
 /
6

Elde edilen iki ağaç nedenle silme değişmeli değil, aynı değildir.

GÜNCELLEŞTİRME

Hep 2 çocuklu bir düğüm sildiğinizde bu olduğunu kısıtlamayı okumadım. Benim çözümüm genel durumda içindir. Ben bir karşı örnek bulabilirsiniz zaman / eğer bunu güncelleyeceğiz.

bAŞKA GÜNCELLEME

Ben somut kanıt yok, ama tahminde gidiyorum:

Genel durumda, farklı iki çocuğunuz, bir çocuk veya hiçbir çocuk sahibi olup olmadığına bağlı silmeleri işlemek. Ben sağlanan karşı örnekte, ilk önce iki çocuk ve bir çocuk olan bir düğüm ile bir düğümü silin. Bundan sonra, hiçbir çocuk ve daha sonra bir çocuk başka bir düğümle bir düğümü silin.

Sadece iki çocuklu düğümleri silme özel durumda, her iki düğüm de farklı alt ağaçlarında ise hiç önemli değildir çünkü (aynı alt ağaçta olduğu durumu dikkate almak istiyor, siz emin olabilirsiniz genel yapı silinmesi sırasına) göre değişir olmaz. Ne gerçekten kanıtlamak zorunda olup olmadığını her düğüm hususlar, iki çocuğu var aynı alt ağaçta, düğüm silme sırası.

A'dan B'ye bir atası Sonra daha ileri olmasını soru geliştirebilirsiniz iki düğüm A ve B düşünün:

silme değişmeli Birbirinize bir ata-torun ilişkisi olan bir ikili arama Ağacı iki düğüm silme (bu aynı alt ağaçta olduğu ima eder) düşündüğünüz zaman mı?

Eğer bir düğüm sildiğinizde minimum eleman bulmak için doğru alt ağaç travers, (en A diyelim). Bu düğüm yaprak olacak ve (B iki çocuğu var ve bir yaprak düğüm olamaz çünkü) B'ye eşit olamaz. Daha sonra bu yaprak-düğümün değeri ile A'nın değerini yerini alacak. Bu demektir ki ağaca sadece yapısal değişim yaprak-düğümün değeri ile A'nın değerinin yedek ve yaprak-düğümün kaybı olmasıdır.

Aynı süreç Yani B için katılır, sen düğümün değerini değiştirmek ve bir yaprak-düğümünü değiştirin. İki çocuklu bir düğüm sildiğinizde Yani genel olarak, sadece yapısal değişim sildiğiniz düğümün değeri değişimi ve yedek olarak kullandığınız değerdir yaprak düğümün silme işlemidir .

Yani soru daha da geliştirmektedir:

Eğer bağımsız olarak her zaman (her zaman iki çocuklu bir düğüm siliyorsunuz) silinmesi düzenin aynı yedek düğümünü alacak garanti edebilir?

Cevap (Sanırım) evet. Niye ya? İşte birkaç gözlemler şunlardır:

  • Diyelim ki ilk soyundan düğümü ve ata düğümü ikinci silmek diyelim. Eğer soyundan düğüm silindiğinde değiştirildiği alt ağacıdır değil atası düğümün sağ çocuğun sol alt ağacında. Bu, bu alt ağaç etkilenmeden kalır demektir. Bunun da anlamı ne olursa olsun silinmesi düzenin, iki farklı alt ağaçlar değiştirilir ve bu nedenle operasyon değişmeli.
  • Yine, en öncelikle soyundan düğümü ve ata düğümü ikinci silmek diyelim. Eğer soyundan düğüm silindiğinde değiştirildiği alt ağacı olan atası düğümün sağ çocuğun sol alt ağacında. Ama burada bile, hiçbir örtüşme yoktur. Sebebi öncelikle soyundan düğümünü sildiğinizde, soyundan düğümün sol alt ağaç bakmak olduğunu doğru çocuk. Sonra ata düğümü sildiğinizde, olacak asla alt ağacı olacağından emin inmek hep sen atası düğümün sağ çocuğun sol alt ağaç girdikten sonra sola doğru gidiyor. Yani yine bakılmaksızın öncelikle silmek ne farklı alt ağaçlar değiştiriyorsanız ve bu yüzden hiç önemli değil sırasını görünür.
  • İlk ata düğümü silmek ve asgari düğüm soyundan düğüm, bir çocuk olduğunu fark ederseniz başka durumdur. Bu soyundan düğüm bir çocuk ile sonuna kadar ve bir çocuk silme önemsiz olacağı anlamına gelir. Şimdi bu senaryoda, önce soyundan düğüm silinmiş durumda düşünün. Sonra sağ çocukla soyundan düğümün değerini yerini alarak sağ çocuğu silin. Eğer ata düğümü sildiğinizde Sonra bulma sonunda aynı (aynı zamanda değiştirilmelidir düğümün sol çocuğudur eski silinen düğümün sol çocuğu,) asgari düğümü. Her iki şekilde de, aynı yapıya sahip sonunda.

Bu titiz kanıtı değildir; Bu yaptığım sadece bazı gözlemler. Elbette, delik aç çekinmeyin!

Cevap 07/06/2010 saat 18:32
kaynak kullanıcı

oy
0

Ben Vivin ikinci güncelleme için buraya cevap verir.

Bu soru iyi bir yeniden şekillendirilmesi olduğunu düşünüyorum:

silme değişmeli Birbirinize bir ata-torun ilişkisi olan bir ikili arama Ağacı iki düğüm silme (bu aynı alt ağaçta olduğu ima eder) düşündüğünüz zaman mı?

ancak aşağıda bu cesur cümle doğru değildir:

Eğer bir düğüm sildiğinizde minimum eleman bulmak için doğru alt ağaç travers, (en A diyelim). Bu düğüm yaprak olacak ve B eşit olamaz

A'nın sağ alt ağaç minimum eleman beri sağ çocuk sahibi olabilir . Yani, bu bir yaprak değildir. Kullanıcı A'nın sağ alt ağaç minimum elemanı diyelim successor(A). Şimdi, B olamaz doğrudur successor(A), ama onun sağ alt ağaç olabilir. Yani, bu bir felaket.

Ben özetlemeye çalışıyorum.

Hipotez :

  1. A ve B iki çocuk her vardır.
  2. A ve B, aynı alt ağaç içindedir.

Başka şeyler biz hipotezi çıkarsayabileceklerini:

  1. B değil successor(A), ne A successor(B).

Şimdi, ben 4 farklı durumlar (her zamanki gibi A noktasından B atalarından olalım) olduğunu düşünüyorum göz önüne alındığında:

  1. B A'nın sol alt ağaç bulunmaktadır
  2. B bir atası successor(A)
  3. successor(A) B'nin bir atası
  4. B ve ardıl (A) herhangi bir ilişki yoktur. (Farklı A'nın alt ağaçlar içindedir)

Ben vakalar 1, 2 ve 4 (ama tabii bunu ispat edemez) önemli değil diye düşünüyorum. Yani, sadece durumda successor(A)B silme işleminin bir atası değişmeli olamazdı olduğunu. Yoksa ki?

Ben pas:)

Saygılarımızla.

Cevap 11/06/2010 saat 18:45
kaynak kullanıcı

oy
2

Vivin yanıtında gösterilen counterexample olmayan komutatiflik tek vaka olduğunu ve aslında sadece iki çocuk silinebilir ile düğümlerin kısıtlaması tarafından elimine edildiğini geliyor bana.

biz herhangi kabul edilebilir halef bulmak mümkün olduğunca az sağ alt ağacı çapraz gerektiğidir Vivin tesislerinde, biri gibi görünen atmak Ama eğer o da ortadan kaldırılabilir. Yerine, her zaman olursa olsun, Vivin en sonuç bizim ikiden az çocuklu düğümleri silinmesine ilişkin kısıtlama rahatlamak sonra bile bulunduğu için çıkıyor ne kadar uzak halefi olarak sağ alt ağaçtaki en küçük düğümü teşvik ederse

    7
   /
  6
biz başlarsak ulaştı asla

    4
   / \
  3 ila 7
     /
    6

verimli, yerine, öncelikle (halefi olmadan) 3 silmek istiyorum ve daha sonra (halefi olarak 6 ile) 4 silmek

    6
     \
      7

bu silme sırası tersine eğer aynıdır.

Silme sonra değişmeli olacağını ve bunu ben adında var öncül göz önüne alındığında, her zaman değişmeli olduğunu düşünüyorum (halefi her zaman silinen düğümün sağ alt ağaçtaki en küçük düğümdür).

Ben, vakaların sadece bir numaralandırma sunmak için resmi bir kanıt yok:

  1. Silinecek iki düğüm farklı alt ağaçlar varsa, o zaman birinin silinmesi diğer etkilemez. Aynı yolda olduğunda sadece silme sırası belki sonucunu etkileyebilir.

    ata düğüm ve onun soyundan biri hem silindiğinde Yani komutatiflik üzerinde herhangi etkisi sadece gelebilir. Şimdi, nasıl onların dikey ilişki değişmeli olduğu etkiler?

  2. Atası sol alt ağacındaki Neslindendir. Halefi sağ alt ağaç geliyor ve hiç sol alt ağacı etkileyemez, çünkü bu durum değişmeli olduğu etkilemez.

  3. Atanın sağ alt ağacındaki Neslindendir. Atalarının halefi her zaman doğru alt ağacındaki en küçük düğüm ise, silme sırası önce veya atası sonra silinir Ne soyundan olursa olsun, halefi seçim değiştiremez. Atası halefi da silinecek olan soyundan düğüm olarak çıkıyor olsa bile, çok yanında büyük düğüm ile değiştirildiğini soyundan ve bu soyundan, kendi sol alt ağaç ele alınması gereken kalan olamaz . Yani bir ata ve herhangi sağ alt ağaç soyundan silme daima değişmeli olacaktır.

Cevap 06/04/2011 saat 19:34
kaynak kullanıcı

oy
0

O 2 çocuk babasıdır zaman, bir düğümü silmek için iki eşit uygulanabilir yollar olduğunu düşünüyorum:
HALİNDE 4 İÇİN ATLA ...

Vaka 1: silmek 3 (Yaprak düğüm)
 2 3
 / \ -> / \
1 3 1


Durum 2: silmek 2 (Sol alt düğüm)
 2 3
 / \ -> / \
1 3 1


Olgu 3: 2 silmek (Sağ alt düğüm)
 2 2
 / \ -> / \
1 3 3

______________________________________________________________________
: Vaka 4 2 (Sol ve Sağ alt düğümler) silmek
 2 2 3
 -> / \ / veya \ / \      
1 3 1 3
İŞ HEM ve farklı çıkan ağaçları :) var ______________________________________________________________________
: algoritma burada açıklandığı gibi http: // www .mathcs.emory.edu / ~ / Dersler / 323 / Müfredat / Ağaçlar / AVL delete.html cheung Deleting a node with 2 children nodes: 1) Replace the (to-delete) node with its in-order predecessor or in-order successor 2) Then delete the in-order predecessor or in-order successor

Cevap 10/10/2016 saat 01:02
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more