SORU
2 ŞUBAT 2009, PAZARTESİ


Herkes aslında Fibonacci-bir Yığın verimli bir şekilde hayata geçirdi?

Seni kimse Fibonacci-Heap hayata geçirdi? Bu yüzden birkaç yıl önce yaptım, ama büyüklük kullanarak daha yavaş birkaç tabaka dizi tabanlı BinHeaps.

O zamanlar, araştırma her zaman iddia ettiği kadar iyi değil, nasıl değerli bir ders olarak düşündüm. Ancak, araştırma yazıları çok kendi algoritmaları çalışma süresini Fibonacci-Heap bir kullanımına dayalı iddia ediyor.

Hiç verimli bir uygulama üretmek için yönetmek mi? Yoksa veri setleri Fibonacci-Heap daha verimli olduğunu böyle büyük bir işe yaradı mı? Eğer öyleyse, bazı ayrıntıları mutluluk duyacağız.

CEVAP
3 ŞUBAT 2009, Salı


Boost C libraries boost/pending/fibonacci_heap.hpp Fibonacci yığınları uygulaması vardır. Bu dosya anlaşılan yıldır pending/ oldu ve tahminlerim tarafından asla kabul edilmeyecektir. Ayrıca, benim tanıdığım ve tam bir cool adam Aaron Windsor ile sabit olan bu uygulama, hataları olmuştur. Ne yazık ki, çoğu sürümleri bu dosya bulabildigim çevrimiçi (ve bir Ubuntu libboost-dev paketi) hala hatalar vardı; vardı çekin a clean version Subversion deposu.

Sürüm 1.49 Boost C libraries fibonacci heap de dahil olmak üzere yeni kümeler yapılar bir sürü ekledi.

Fibonacci yığınları ve ikili kümeler karşılaştırmak dijkstra_shortest_paths.hpp modifiye edilmiş bir versiyonu karşı dijkstra_heap_performance.cpp derlemek başardı. (Hat 3**, fibonacci. relaxed değiştir) Ben ilk bu durumda Fibonacci ve ikili kümeler aynı şeyi gerçekleştirmek için en iyi duruma getirme, derleme, Fibonacci yığınları genellikle önemsiz bir miktar daha iyi performans ile unuttum. Çok güçlü iyileştirmeler ile derlenmiş sonra ikili kümeler büyük bir destek var. Benim testlerde, Fibonacci yığınları grafiği inanılmaz derecede büyük ve yoğun olduğunu, örneğin sadece ikili kümeler geride:

Generating graph...10000 vertices, 20000000 edges.
Running Dijkstra's with binary heap...1.46 seconds.
Running Dijkstra's with Fibonacci heap...1.31 seconds.
Speedup = 1.1145.

Anladığım kadarıyla, bu Fibonacci yığınları ve ikili kümeler arasındaki temel farklar dokunur. İki veri yapıları arasındaki tek fark teorik Fibonacci yığınları (itfa edilmiş), sürekli azaltmak-anahtar desteği. Diğer taraftan, ikili yığınlar, bir dizi olarak kendi uygulama performans büyük bir anlaşma olsun; açık işaretçi yapısı kullanılarak Fibonacci yığınları büyük bir performans isabet acı anlamına gelir.

Bu nedenle, Fibonacci yığınları yararlanacakuygulamada,_tuşları inanılmaz sık düşüş bir uygulama bunları kullanmak zorunda. Dijkstra açısından, bu temel grafik yoğun olduğu anlamına gelir. Bazı uygulamalar olabilir özünde azaltmak_anahtar-yoğun; ben de denemek istemiştim the Nagomochi-Ibaraki minimum-cut algorithm çünkü görünüşe göre oluşturur çok azalış_anahtarlar, ama çok fazla çaba için bir zamanlama karşılaştırma çalışma.

Uyarı: Yanlış bir şey yapmış olabilirim. Bu sonuçlar kendine üreyen denemek isteyebilirsiniz.

Teorik unutmayın: Düşüş_anahtar Fibonacci yığınları, performans ve teorik uygulamalar, dijkstra'nın zamanı gibi için önemlidir. Fibonacci yığınları da ekleme ikili kümeler daha iyi performans ve birleştirme (her iki Fibonacci yığınları için sürekli-zaman amorti). Ekleme dijkstra'nın zamanı etkilemez çünkü aslında alakasız olduğunu, ve bunu çok kolay da itfa edilmiş sabit zaman eklemek için ikili kümeler değiştirmek için. Sürekli birleştirme harika, ama bu uygulama uygun değil.

Kişisel notBir arkadaşım ve ben bir kez bir kağıt karmaşıklığı olmadan Fibonacci yığınları (teorik) çalışma süresini çoğaltmak için çalıştı yeni bir öncelik sırası, açıklama yazdı. Bu kağıt hiç bir zaman yayınlanmadı, ama benim yazarlarından ikili yığınlar, Fibonacci yığınları, ve veri yapıları karşılaştırmak için kendi bizim öncelikli sıraya uygulamak oldu. Deneysel sonuçlar grafikler Fibonacci yığınları biraz dışında gerçekleştirilen toplam karşılaştırmalar açısından ikili yığınlar, Fibonacci yığınları karşılaştırma maliyet yükünü aştığı daha iyi bir durumda performans olacağını ima etmektedir. Ne yazık ki, kodun yok, durum karşılaştırıldığında, muhtemelen ucuz olduğunu, bu yorumlar ilgili ama doğrudan ilgili değil.

Bu arada, ben çok kendi veri yapısı ile Fibonacci yığınları, çalışma zamanı maç için denemenizi öneririz. Ben sadece Fibonacci yığınları kendimi yeniden buldum. Fibonacci yığınları tüm karmaşıklık rastgele bir fikir olduğunu düşündüm önce, ama sonra tüm doğal ve oldukça zorlandığını fark ettim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • boniver

    boniver

    17 NİSAN 2006
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008