İkili ağaçların ön ve son sıra geçişinin kullanışlılığı


13

Bu çok naif olabilir, ama tüm çapraz tiplerin ikili ağaçlarının (düz, sıralı ve dengeli) bağlamını merak ediyordum:

  • derinlik ilk ön sipariş
  • derinlik ilk sırada
  • derinlik-ilk post-order
  • genişliği birinci

ön ve sonrası siparişlerin gerçek faydası nedir? Yani, ön ve / veya sipariş sonrası geçişin diğer ikisine göre bir (bazı) avantajlar sağlayabileceği bir tür ve / veya ikili ağaç konfigürasyonu var mı?

AFAICS, sırasıyla ve genişlik ilkinin belirli bir avantaj sağlayabileceği bazı ikili ağaç türleri ve konfigürasyonları vardır:

  • Dengeli bir ikili ağaç için, önce derinlikteki herhangi bir geçiş, önce genişliğe kıyasla daha az bellek depolama alanı kullanır (örneğin, 6 veya 7 düğümlü dengeli ikili ağaç için, yükseklik 2'dir, bu nedenle derinlik ilkinde her geçişin maksimum Herhangi bir zamanda 2 düğüm bulunurken, son seviye 3 veya 4 düğüme sahiptir, bu nedenle genişlik ilk geçişinin bir noktada 3 veya 4 düğüme kadar depolaması gerekir). Bu durumda, sırayla çapraz geçiş en az miktarda bellek kullanır ve düğümleri doğal düzeninde ziyaret eder.

  • Dengeli olmayan bir ikili ağaç için, en kötü durumdaki yerleştirme senaryosuna yakınsa, önce onu geçmek, önce derinlik ilk geçişlerinden daha az bellek kullanır. Yani bu durumda ilk önce bir avantaj sunar. Sırayla geçiş, değerleri doğal düzenlerinde tekrar ziyaret etme avantajına sahiptir.

Ancak, geçiş öncesi ve sonrası geçişin diğer ikisine göre avantaj sağlayacağı bir durum düşünemiyorum.

Yanıtlar:


13

Veri yapısı ile bir dosyada veya dilde olduğu gibi bazı seri sunumlar arasında çeviri yapmak gibi ağaçlarla çeşitli şeyler yapmanız gerekir.

Örneğin, şöyle bir ayrıştırma ağacınız olduğunu varsayalım:

    *
   / \
  +   \
 / \   \
A   B   C

* + A B CÖnek sırayla A B + C *yürüterek veya postfix sırayla yürüterek seri hale getirebilirsiniz . Eğer dil işlemcileriyle çalışıyorsanız, bu tür şeylerin ikinci tabiat olması gerekir.


Çok güzel bir örnek! Sıralı geçişin nasıl sağlanacağına dikkat edin A + B * C; bu, normal kullanıcılar için anlaşılması için, düzeltme sonrası siparişin önekinin her iki önekinden daha kolaydır.
Kilian Foth

3
@KilianFoth, ağacın söylediği gibi değil - en azından gözlerime (A + B) * C diyor. Her ne kadar HP-28s parmaklarım AB + C * sürümü gibi iyi. :-)
sdg

@Kilian: sdg haklı. Inorder ile, her şeyin etrafına parantez koymadığınız sürece öncelikle ilgilenmeniz gerekir.
Mike Dunlavey

13

Wikipedia makale Eğer derinlik öncelikli arama farklı türleri kullanmak isteyen ne zaman güzel bir özlü açıklaması vardır:

  • Düğümleri ve değerleri çoğaltırken ön siparişi ön sipariş ver, ikili ağacın tam bir kopyasını oluşturabilir. Ayrıca, ifade ağaçlarından bir önek ifadesi (Lehçe notasyonu) yapmak için de kullanılabilir: ifade ağacını ön sıralarda gezdirin.
  • Sıralı geçiş, ikili arama ağaçlarında çok yaygın olarak kullanılır, çünkü ikili arama ağacını kuran karşılaştırıcıya (dolayısıyla adı) göre altta yatan kümeden değerleri döndürür.
  • Düğümleri ve değerleri silerken ya da boşaltırken sipariş sonrası geçiş, tüm ikili ağacı silebilir ya da serbest bırakabilir. Ayrıca bir ikili ağacın postfix temsilini de oluşturabilir.

Bir algoritmanın lojistik ihtiyaçlarına bağlıdır. Örneğin, silme işlemi sırasında sipariş sonrası geçişi kullanmazsanız, alt ağaçları silmek için gereken referansları kaybedersiniz.


10 Kasım 2019 itibariyle Wikipedia değişti ve ilk açıklama da kafa karıştırıcı olan Sipariş Sonrasına ait. Buraya geldim, başka bir bilgi kaynağı arıyorum.
whoan

5

İkili ağaçlarla ilgilenmek için farklı algoritmalara sahip olmanın amacı, ağaçlarla bir şeyler yapmak değildir. Bu soyut düzeyde, bir emir büyük ölçüde diğeri kadar iyidir, çünkü prosedürden sadece soyut semboller alırsınız.

Ancak ağaçlar genellikle ilginç şeyleri temsil etmek için kullanılır ve sonuçta büyük bir fark yaratabilir. Düğümler ilk işlem ilk VS. inen büyük bir etki (hatta belki sonsuz domain) aracılığıyla tam bir arama durumları araştırın temsil Örneğin, sadece hangi sonuç bulunduğunda sipariş belirler, hatta belirleyebilir edip Hiç olacak herhangi bir çözüm bulun . Nokta, sonsuz alanlarla görülmesi en kolay olanıdır: Eğer dikkatsizce inerseniz, sadece yanlış bir dönüş yaptığınız için ağaçta oldukça yüksek bir çözüme bakabilirsiniz. Ancak pratikte, bellek ve diskler de sonlu olduğu için, bu gerçekten sonsuz olmaktan ziyade çok büyük alanlar için bile geçerlidir.

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.