SORU
18 Mart 2012, Pazar


Nasıl bina bir yığın(n) zaman karmaşıklığı olabilir?

Birisi nasıl bina açıklayabilir yardımcı bir yığın O(n) karmaşıklık olabilir?

Bir yığın halinde bir öğe ekleme ** 0/2 n kez tekrarlanır Ekle (kalan yaprakları ve yığın özelliği ihlal edemez). Yani, bu karmaşıklığı düşünürdüm O(n log n), olması gerektiği anlamına gelir.

Başka bir yol, her madde için "", bir kez aşağı filtre için potansiyeline sahip öbek şimdiye kadar n seviyeleri günlük). her seviye için heapify koy

Neyi kaçırıyorum?

CEVAP
18 Mart 2012, Pazar


Analizin doğru. Ancak, sıkı.

Gerçekten kolay bir yığın bina doğrusal bir işlemdir, daha iyi okumalısın neden açıklamak mümkün değildir.

Algoritma çok iyi bir analiz here görülebilir.


Ana fikir build_heap algoritma heapify gerçek maliyeti tüm öğeler için O(log n)değildir.

heapify çağrıldığında çalışan bir eleman işlemini sona erdirir önce ağaçta aşağı hareket edebilir ne kadar iyi bağlıdır. Diğer bir deyişle, yığın eleman yüksekliğine bağlıdır. En kötü durumda, elemanı aşağı yaprak düzeyini tüm yol gidebilir.

Bize düzeyine göre iş düzeyi sayalım.

En alt düzeyde, 2^(h)düğümleri vardır, ama çalışma 0 yani hiç birinde heapify Ara vermiyoruz. Seviyeye gelecek 2^(h − 1) düğümleri vardır, ve her biri aşağı 1 seviyesine göre hareket edebilir. Alttan 3 düzeyinde, 2^(h − 2) düğüm vardır ve her 2 seviye aşağı hareket olabilir.

Tüm heapify işlemleri O(log n), gördüğünüz gibi bu O(n) alıyorsanız nedeni budur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fireflame65

    fireflame65

    27 Mart 2007
  • Hollyscoop

    Hollyscoop

    30 Ocak 2007
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010