Bir diziyi doğrusal O(n) zamanda yığın (heap) yapısına dönüştüren Heapify ve veri taşımayı önleyen Dolaylı Yığın (Index Heap) işlemlerini kapsar.
İkili Yığın (Binary Heap), en büyük veya en küçük elemana O(1) zamanda erişim sunan ve ekleme/silme işlemlerini O(log n) zamanda gerçekleştiren, tamamlanmış ikili ağaç tabanlı bir veri yapısıdır.
Diziden Yığın Oluşturma (Heap Construction / Heapify), rastgele sıralı bir diziyi en alt seviyedeki yaprak olmayan düğümlerden başlayarak yukarıya doğru aşağı süzme (sink/heapify-down) yöntemiyle O(n) doğrusal zamanda yığına dönüştürür. Bu, her elemanı tek tek yukarı süzerek (swim/heapify-up) O(n log n) zamanda yığın yapmaktan çok daha verimlidir.
Dolaylı Yığın (Indirect Heap veya Index Heap), yığının kendisinde verileri taşımak yerine, verilerin orijinal indekslerini yığın olarak organize eder. Bu sayede büyük veya karmaşık nesnelerin taşınma maliyetlerinden kaçınılır ve öncelikli kuyrukta anahtarların değerleri dışarıdan güncellenebilir (decrease-key).
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1function heapify(arr: number[], n: number, i: number, trace?: string[]) {2 let largest = i;3 const left = 2 * i + 1;4 const right = 2 * i + 2;56 if (left < n && arr[left] > arr[largest]) largest = left;7 if (right < n && arr[right] > arr[largest]) largest = right;89 if (largest !== i) {10 if (trace) {11 trace.push(` Swap(arr[${i}]=${arr[i]}, arr[${largest}]=${arr[largest]}) -> ${arr[largest]} yukarı süzüldü.`);12 }13 [arr[i], arr[largest]] = [arr[largest], arr[i]];14 heapify(arr, n, largest, trace);15 }16}1718function buildMaxHeap(arr: number[], trace?: string[]): number[] {19 const n = arr.length;20 if (trace) trace.push(`Yığın oluşturma başladı. Baş yaprak dışı indeks: ${Math.floor(n / 2) - 1}`);21 for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {22 if (trace) trace.push(`Indeks ${i} (${arr[i]}) için aşağı süzme:`);23 heapify(arr, n, i, trace);24 }25 return arr;26}Yığına dönüştürülecek sayıları virgülle ayırarak girin. Örnek: 4, 10, 3, 5, 1, 15, 7, 12
Yığına dönüştürülecek sayıları virgülle ayırarak girin. Örnek: 4, 10, 3, 5, 1, 15, 7, 12
En İyi Durum: O(n)
Ortalama Durum: O(n)
En Kötü Durum: O(n)
O(1) in-place veya O(log n) rekürsif çağrı yığını - Bu algoritmanın karmaşıklığı belirtilmemiş.
Yığın İşlemleri (Heap & PQ Operations) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: