Potansiyel fonksiyon ikili yığın ekstresi maks O (1)


10

Ben özü max O(1) amortize zamanda tamamlanması için bir max öbek için potansiyel işlevini bulmak için yardıma ihtiyacım var . Potansiyel yöntemi iyi anlamadığımı da eklemeliyim.

Biliyorum ki insert fonksiyonu gereken "ödeme" daha sipariş çıkarma maliyetini azaltmak ve bu if (yığın yüksekliği açısından olmak zorunda için yığın yüksekliğini verir should insert 2 log ( n ) veya n k = 1 2 log ( k ) ) olurlog(n)2log(n)k=1n2log(k)

Yanıtlar:


13

Takip etmeyi dene:

Ağırlığı bir eleman ı öbek H karşılık gelen ikili ağacındaki derinliğidir. Kökteki elemanın ağırlığı sıfırdır, iki çocuğunun ağırlığı 1'dir. Potansiyel işlev olarak tanımladığınızwiiH

Φ(H)=iH2wi.

Şimdi yığın işlemlerini analiz edelim. İçin insert yeni bir eleman ekleme derinliği eklemek en fazla log ( n ) . Bu tarafından potansiyelini artırır 2 d ve yapılabilir O ( 1 ) zaman. Sonra heap özelliği sağlamak için yeni yığın öğesi "kabarcık". Bu O ( log n ) zamanını alır ve Φ ( H ) 'i değiştirmeden bırakır . Bu nedenle kesici uç maliyetleri O ( log ( n ) + Δ ( Φ Hdlog(n)2dO(1)O(logn)Φ(H) .O(log(n)+Δ(Φ(H)))=O(logn)

Şimdi özü düşününMin . Kökü çıkarın ve yığındaki son öğeyle değiştirin. Bu potansiyeli azaltır , böylece yığın özelliğini onarmayı göze alabilirsiniz ve bu nedenle amortismana tabi tutulan maliyetler şimdi O ( 1 ) 'dir .2log(n)O(1)

Potansiyel işlev için genel bir sorunuz varsa, bunu farklı bir soru olarak göstermelisiniz.


Eminim haklısın ama eklemeyi anlamadım. Neden değişmeden? Cevabınız açıksa özür dilerim ama lütfen expand ' genişletebilir misiniz ? Orada neden negatif bir sayı olduğunu göremiyorumΔ(Φ(H)))Δ
andrei

uçtan önce ve sonra potansiyel farkı ifade eder. Ekleme kutusunda en fazla 2 günlük ( n ) bulunur . Öbekteki iki öğeyi değiştirdiğinizde (kabarcıklı veya kabarcıklı), bir ağırlık +1 alır ve diğeri -1 değişir, böylece potansiyel (tüm ağırlıkların toplamı) aynı kalır. Δ(Φ(H))2log(n)
A.Schulz

Onarım O (1) nasıl? Yığın onarımında potansiyel işlevin kullanımı nedir? Lütfen açıklığa kavuşturabilir misiniz
Sohaib

@Sohaib: onarım zaman alır, ancak yukarıdaki potansiyel fonksiyonu kullanarak O ( 1 ) amortisman süresi. Potansiyel fonksiyonun itfa edilmiş maliyetleri analiz etmekten başka bir kullanımı yoktur. O(logn)O(1)
A.Schulz

@ A.Schulz Bu, özünde, özütleme işleminin, her seferinde potansiyel fonksiyonun 2 kez azalacağından (onarım sırasında eşit olarak artabileceği veya artamayabileceğinden), birkaç kez yapıldığı anlamına gelir. Böyle bir şey için genel karmaşıklık sabit bir zaman olacaktır, çünkü sonunda ağaçta bir düğüm olmayacaktır. Haklı mıyım?
Sohaib
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.