Aşağıdaki sorunu çözerken kafam karıştı (sorular 1-3).
Soru
Bir d -yığın yığını ikili bir yığın gibidir, ancak (bir olası istisna dışında), yaprak olmayan düğümlerin 2 çocuk yerine d çocukları vardır.
Bir dizideki d -ary yığınını nasıl temsil edersiniz?
Bir d- dizi n elementinin n ve d cinsinden yüksekliği nedir ?
Bir d -ary max-yığınında EXTRACT-MAX'ın etkin bir uygulamasını verin . Çalışma süresini d ve n cinsinden analiz edin .
Bir d -ary max-yığınında INSERT'in etkin bir uygulamasını verin . Çalışma süresini d ve n cinsinden analiz edin .
K <A [i] = k ise bir hata işaretleyen ve sonra d -ary matris yığın yapısını uygun şekilde güncelleyen INCREASE-KEY ( A , i , k ) ' nin etkin bir uygulamasını verin . Çalışma süresini d ve n cinsinden analiz edin .
Çözümüm
A [ a 1 ] dizisi verin . . a n ]
→ İşaretim biraz karmaşık görünüyor. Daha basit olan var mı?
Let h yüksekliğini belirtmektedir d -ary yığın.
Yığının tam bir d- ikili ağaç 1 + d + d 2 + olduğunu varsayalım . . + D h = n
Bu benim uygulamam:
EXTRACT-MAX(A) 1 if A.heapsize < 1 2 error "heap underflow" 3 max = A[1] 4 A[1] = A[A.heapsize] 5 A.heap-size = A.heap-size - 1 6 MAX-HEAPIFY(A, 1) 7 return max MAX-HEAPIFY(A, i) 1 assign depthk-children to AUX[1..d] 2 for k=1 to d 3 compare A[i] with AUX[k] 4 if A[i] <= AUX[k] 5 exchange A[i] with AUX[k] 6 k = largest 7 assign AUX[1..d] back to A[depthk-children] 8 if largest != i 9 MAX-HEAPIFY(A, (2+(1+d+d^2+..+d^{k-1})+(largest-1) )
MAX-HEAPIFY'nin çalışma süresi:
burada c i O anlamına gelir maliyetiiinci çizgi yukarıda.
ÖZÜ-MAX:
→ Bu etkili bir çözüm müdür? Yoksa çözümümde bir sorun mu var?
h = (log [nd−1+1])− 1
Bu yüzden yükseklik için açıklama yukarıda doğru olmayacaktır. h = log [nd − 1 + 1] −1 = log [nd] -1 = log [n] Yine de ağacın yüksekliğiΘ(log(n)).
Not olarak yazılır : log, d-ary yığını için her zaman d tabanına .