bir ikili ağaçta En Kısa şube?

oy
1

Bir ikili ağaç iki işlevi kullanılarak kodlanabilir lve r bir için öyle node n, l(n)sol çocuk vermek n, r(n) sağ çocuk vermek n.

Bir ağacın bir dalı, bir ağacın köküne bir yoldur, bir yaprağa bir şube uzunluğu o kökten yaprağa doğru yolda yay sayısıdır.

Let MinBranch(l,r,x)ikili ağaç kök düğümü x ile birlikte L ve R fonksiyonları tarafından kodlanan bir ikili ağaç alınması için basit bir dönüşümlü algoritma olabilir ve ikili ağacın kısa bir dalın uzunluğunu verir.

Bu algoritma için pseudocode verin.

Tamam, o temelde bu defa ile geldim budur:

MinBranch(l, r, x)
{
    if x is None return 0

    left_one = MinBranch(l, r, l(x))

    right_one = MinBranch(l, r, r(x))

    return {min (left_one),(right_one)}
}

Açıkçası bu büyük ya da mükemmel değildir. herhangi bir yardım takdir edilecektir - insanlar beni bu mükemmel ve çalışma almak yardımcı olabilir, ben minnettar olurdum.

Oluştur 28/08/2009 saat 05:07
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
3

Herkes düz-up için ödev çözecektir şüpheliyim. Bir ipucu: Ağaç büyüdükçe dönüş değeri mutlaka doğru, daha yüksek büyümek gerekir? Ancak 0 hariç Fonksiyonunuzda herhangi sayısal hazır görmüyorum ve ya hiç bir ek operatörler. Nasıl Hiç büyük sayılar dönecek?

Aynı konuda bir başka açısı: zaman tekrarlamalı bir fonksiyon yazmak, bu numaralandırmak için yardımcı "? Kendimi çağıran ben her koşulda dönmek neyi durdurmak gereken tüm şartlar nelerdir?"

Cevap 28/08/2009 saat 05:15
kaynak kullanıcı

oy
2

Doğru yaklaşım, ama oldukça orada değiliz; hep 0 döndürür sizin özyinelemeli algoritması (mantık ... gerçi, neredeyse haklı)

alt dal uzunluğu dalın uzunluğu birden daha az olduğuna dikkat ediniz; böylece left_oneve right_oneolmalıdır 1 + MinBranch....

Bazı örnek ağaçlar algoritması aracılığıyla steping bunun gibi kapalı-birer hataları ortaya çıkarmak yardımcı olacaktır ...

Cevap 28/08/2009 saat 05:16
kaynak kullanıcı

oy
0

Ne Oluşturduğunuz bir derinlik öncelikli arama olarak düşünülebilir. Ancak, (en kısa şube) peşinde olduğun göz önüne alındığında, bu en verimli yaklaşım olmayabilir. senin algoritması (kök düğümün) sol tarafında çok ağırdı, ama sağ tarafta tek düğüm vardı bir ağaç üzerinde nasıl performans göstereceğini düşünün.

İpucu: Bir genişliği birinci arama yaklaşımını düşünün.

Cevap 28/08/2009 saat 05:19
kaynak kullanıcı

oy
0

Orada ne var ki, çözüm ile gelip önce bütün ağaç aramak zorunda kalacak bir derinlik ilk arama algoritması gibi görünüyor. ne ihtiyacınız olan enine arama tam bir arama yapmadan en kısa sürede çözümünü bulur olarak dönebilir algoritması

Cevap 28/08/2009 saat 05:19
kaynak kullanıcı

oy
1

Neredeysebitirmeyi var, ama bu örneği dikkate gibi görünüyor:

      4

   3     5

Eğer aracılığıyla iz yaparken MinBranch, kendi içinde göreceksiniz MinBranch(l,r,4)çağrı:

left_one = MinBranch(l, r, l(x))
         = MinBranch(l, r, l(4))
         = MinBranch(l, r, 3)
         = 0

Bu tabii ki en yakın yaprak düğüme mesafe aynı right_one için olur 0. yani sonuçta, 3, bir yaprak düğüm, mantıklı.

Ama sonra burada rüzgar:

return {min (left_one),(right_one)}
     = {min (0), (0) }
     = 0

(4) Bu düğüm yaprak değil çünkü ancak bu, açıkça yanlış. Kodunuz geçerli düğümü (hop!) Saymak unuttum. Bunu düzeltmek için yönetebilirsiniz eminim.


Şimdi, aslında, onlar yolu bu hızlı değil yapıyoruz ama bu egzersiz için uygun olup olmadığından emin değilim. Bu ağacı düşünün:

         4
       3   5
     2
   1

Kişisel algoritma öncelikle doğru dalı sayılır ve 3 bir sol vardır, bu yüzden dikkat çekti eğer, varsayımsal, kurtarmak olabilir rağmen, yinelemeli sol şube sayacaktır onun açıkça uzun 5 (ki bir yaprak olduğunu). Ama, tabii, sağ dal sayma ilk zaman işe yaramıyor!

Bunun yerine, daha karmaşık kod ve muhtemelen daha büyük bellek kullanımı bir tradeoff, sen düğümleri kontrol edebilirsiniz soldan sağa, yukarıdan alt (sadece İngilizce okuma sipariş gibi) ve bulduğunuz ilk yaprağa durur.

Cevap 28/08/2009 saat 05:20
kaynak kullanıcı

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