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

  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007