AVL Ağaçları ve GERÇEK dünya


14

okulda bir ekleme veya silme üzerine bir AVL ağacını nasıl dengeleyebileceğimiz öğretilir.

Bu tür bilgiler gerçek dünyada nasıl faydalı olacak? Birisi bu tür bilginin ne zaman yararlı olabileceğine bir örnek verebilir mi?

Gördüğüm kadarıyla, işyerinde bu tür detaylar neredeyse hiç gelmiyor ...

Algoritmalar ve bazı veri yapıları hakkında ayrıntılı bilginin ne kadar önemli olabileceğini görebiliyorum, ancak AVL ağacı rotasyonları (ve benzer ayrıntılı kavramlar) gibi detaylar değil.

Teşekkürler!


7
Gerçek dünya olarak sayılıyorsa, röportajlarda yardımcı olur.
Kevin

Bu, bazı kişilerin okulda "Sheesh! Bunu gerçek hayatta ne zaman kullanacağım?" Konusunda öğrendikleriyle aynı tartışmadır ve cevap "tüm bir problem sınıfını nasıl analiz edeceğinizi ve çözeceğinizi düşündü" dir. . O ve bir gün bir ağacı kesmek istiyorsunuz ve partneriniz "Bunun eve çarpmayacağından emin misiniz?" Kurtarmayı tetikleyin!
İkili Worrier

Yanıtlar:


13

AVL ağaçlarının incelenmesi aşağıdaki nedenlerden dolayı yardımcı olabilir:

  • Soyut veriler hakkında muhakeme yapmak için harika bir uygulamadır. Belirli bir ağaç hakkında düşünmek zorunda değilsiniz, her olasılığı göz önünde bulundurmalısınız. Bu tür bir akıl yürütme ile pratik yapmak daha basit davalarda da yardımcı olabilir.

  • Tahminleri ve sözleşmeleri anlamak için harika bir uygulamadır. Bir ağacın dengeli olduğundan ve her işlem korumalı dengeyi kanıtlamak için kullandığınız araçların, örneğin güvenlik endişelerine ve paralel koda uygulanabilir.

  • Kendi varyantlarınızı yazmanıza, hatta tamamen yeni tür veri yapıları oluşturmanıza olanak sağlar.

  • Yeni bir kütüphane veya platform için bir AVL ağacı uygulamanız gerekebilir.

Her tür sıralama algoritmasını veya her tür dengeli ağacı öğrenmenin özel değerlerini tartışabilirsiniz. Hangisini öğreneceğiniz önemli değil , ancak en önemli konuları tam olarak ele aldığınızdan emin olmalısınız.

Eğer algoritma bilmenin gerçek dünyada ne kadar önemli olduğunu görmek istiyorsanız , Inc'de Friendster'ın çöküşü ve verimliliği artırmak için temel ilkelerin en ufak bir şekilde uygulanmasının onlara nasıl yardımcı olabileceğini anlatan " Harika Bir Fikir Nasıl Öldürülür! "


İlginç bir makale, ama AVL ağaçlarının arkadaşlığa nasıl yardımcı olacağını görmüyorum.
Eratosthenes

Veritabanı endeksleme için kullanılan B + -Trees gibi bir örnek görmek isterdi.
Luca Fülbier

5

Macneils puanlarına ek olarak ...

Kırmızı-siyah ağaçlar daha doğrudan faydalı olabilir, çünkü C ++ gibi standart kütüphane uygulamalarında std::map(en azından AFAIK) yaygın olarak desteklenmeyen faydalı verimli işlemler vardır . Kırmızı-siyah ağaçlar, "bölünmüş" (bir ağacı belirtilen bir anahtardan daha az anahtar içeren ve bir anahtar daha büyük anahtar içeren) ikiye bölebilir ve "birleştir" (tersine, büyük anahtarlardan oluşan bir ağacı küçük bir ağaçla birleştirerek) anahtarlar) her ikisi de O (log n) zamanında yapılabilir, ancak bunlar standart kapsayıcı kitaplıklarında destekleniyorsa, iyi gizlenmiş bir şey gibi görünüyor.

Ancak, veri yapılarının "artırılması" yaygındır. Basit bir örnek, O (günlük n) aboneliğini desteklemek için hemen hemen her ağaç veri yapısındaki düğümlere alt ağaç boyutu bilgisi eklemektir. Daha sofistike örnekler aralık ağaçlarını içerir.

Veri yapılarını genişletme fikrini edindikten sonra, belirli uygulamalar için yararlı olabilecek birçok varyasyon vardır - ve çok azı önceden kütüphane olarak paketlenmiştir. Varolan standart kütüphane veri yapıları (örneğin, std::map) kaynak kodu kopyalamaktan ve doğrudan değiştirmekten yoksun olamaz - şablon parametrelerini kullanarak bunları arttıramazsınız.

Elbette, artırılmış bir veri yapısı geliştirmek için, temelde artırılmamış veri yapısını anlamanız gerekir.

Ekler / silmelerden çok daha fazla arama yaparsanız (ve bu bölme / birleştirme işlemlerine ihtiyacınız yoksa) AVL ağaçları kırmızı-siyah ağaçlardan daha hızlı olabilir, bu nedenle uygulamaya bağlı olarak, bunlar için çok iyi bir temel olabilir. artırmada.


1
Veri yapısını arttırmak için +1, ancak yapılması oldukça nadir bir şey. Çoğu programcı performans için çabalamak zorunda değildir (aksi takdirde hepimiz C ++ / C / Fortran / Assembly kullanırız).
Matthieu M.

@Matthieu - Bunun yaygın olduğuna inanıyorum, ancak sadece belirli geliştirme ortamlarında. Bu bir çelişki değil, dürüst, çünkü ... errm, iyi ...
Steve314

Tamamen katılıyorum! : D
Matthieu M.

5

Hayır

Gerçek dünyada gerçekten kullanışlı değil ...

Seni düşündürmek dışında .

Gerçek dünyanın çok daha zor sorunları var , bunların çoğu zaten iyi bilinen çözümlere sahip değil .

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.