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

  • graham025

    graham025

    25 NİSAN 2006
  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012