Heap Sort

advertisement
Heap Sort
Bir temsili değiştirme(Represantation)’dur. Binary tree olarak tanımlanabilir. Her bir düğüme
bir anahtar atanır.
Q(logn) sıralama algoritmasıdır. Heap olarak söyleyeceğimiz veri yapısını kullanır. Bir diziden
bir heap dönüştürür ve sonra sıralamayı kulayca yapar. Heap’in diğer önemli kullanımı
“Priority queue”’dir.
Priority queue şu operasyonları yapar.
1.Find(Bul) en yüksek önceliğe sahip elemanı
2.Deleting(Sil) en yüksek önceliğe sahip elemanı
3.Adding(Ekle) çoklu kümeye yeni bir eleman
Heap iki durumdan oluşur.
-Shape propenty: Binary tree tamdır. Tüm sayılar sadece bazı en sağdaki yapraklar yanlış
olduğu yerlerdeki son seviye dışında tamdır.
-Parental domirance(veya heapproperty): Her düğümdeki anahtar onun çocuklarındaki
anahtarlara eşit veya daha büyüktür.
1.n düğümlü tam bir binary tree de ağırlık [log2n]’dir.
2.Bir heap’in kökü her zaman onun en büyük elemanını içerir.
3.Tüm torunları ile heap bir düğümü bir heap’dir.
4. Bir heap bir dixi olarak yukarıdan aşağıya ve soldan sağa uygulanır. 0. Eleman H[0]
kullanılmaz veya tümünden daha büyük bir sayı içerir.
a. Parental node anatarları ilk[n/2] pozisyonunda olacak ve yapraklar son [n/2]
pozisyonunda olacak.
b. i( 1≤i ≤[n/2]) indeksdeki anahtarların çocukları 2’i ya da 2i+1 pozisyonunda olacak. .
i( 2≤i ≤n) indeksindeki anahtarın parent 1,[i/2] pozisyonunda olacak.
H[i]≥max{H[2i],H[2i +1]}
for i =1,...,[n/2]
Bir hep bir diziye dönüştürmenin iki yolu vardır. Dizi: 2,9, 7, 6, 5, 8
9, 6, 8, 2, 5, 7
Bu süreç “Heapifying” metod “bottom up heap construction”’dır.
Algoritma HeapBottomUp(H[1..n])
//Verilen dizinin elemanlarında heap yapma
// bottom-up algoritma
//Input: H[1..n] bir dizi
//Output: H[1..n] heap
for i ←[n/2]downto 1do
k←i; v←H[k]
heap←false
while not heap and 2∗k≤n do
j ←2∗k
if j<n //iki çocuk var
if H[j]<H[j +1] j ←j +1
if v≥H[j]
heap←true
else H[k]←H[j]; k←j
H[k]←v
Worstcase
Binary tree n=2k-1 düğüme sahiptir. Ağırlık h=[log2n] veya h=[log2(n+1)]-1=k-1’dir.
Ağacın her i seviyesi h yaprağı seyyah eder. En kötü durumda bir sonraki seviyeye inmek için
2 karşılaştırma gerekir. Daha büyük çocuk bulmak için veya takasa karar vermek için level i
seviyesinde bir anahtara dahil olan anahtar karşılaştırma sayısı 2(h-i)’dir. bu yüzden en kötü
durumda toplam karşılaştırma sayısı
Büyüklüğü n olan bir heap 2n’den daha az karşılaştırma yapar. İkinci bir metot:heap inşa
etmek yukarıdan aşağıya heap inşa etmek (topdownheep construction)

Önceden inşa edilmiş heape yeni bir anahtar ekleme

Var olan heap son yaprağından sonra k anahtarı ile yeni bir düğüm ekleme

Aileyi kurana kadar k yukarı doğru ekleme
Ekleme işlemi heap ağacının ağırlığından daha fazla karşılaştırma gerektirmez. Bu yüzden
O(logn)’dir.
Bir heapten max anahtar silme:
1.adım: heapin son anahtar K’sıyla kökün anahtarını takas et.
2.adım: 1. İle heap boyutunu azalt
3.adım: K aşağı doğru eleyerek Heapfy oluştur. Daha önce bottom-up da yaptır. Bu K’nın
paralel dominance doğrulayacak. K’nin parantel dominance bulana kadar tekrar eder
Silmek istiyorsak;
Verimlilik O(logn )yapıldıktan ve ağaç i azaldıktan sonra silme verimliliği hepify oluşturmak
için yapılacak anahtar karşılaştırmalara bağlıdır. Bu heap’in ağırlığından daha fazla
karşılaştırma yapılmaz. Bu yüzden O(logn)’dir.
Heapsort: 1964’de Willions tarafından keşfedildi. İki aşamalı bir algoritmadır.
1.Aşama:(heap inşa etme): verilen bir dizi için bir heap oluşturur.
2.Aşama:(maximum silme): kalan heapden n-1 kez kök silme operasyonunu uygula
Heap Construction
En kötü durum
Heap Construction O(n)
Mximum Deletions:
Karşılaştırm C(n)
Ağacın ağırlığı [logn]
C(n)£O(nlogn)
O(n)+O(nlogn)=O(nlogn)

Mergesort gibi O(nlogn)’dir.
Ekler:
Eğer sayaç i*2 dizinin eleman değeri n’den büyükse bu bir yapraktır.
Analız:
Heap derinliği h ise 2h’den fazla karşılşatırma olmaz. Aşağıdan itibaren 2 seviyeden itibaren
yapılacak bunun anlam heap derinliği 1. h=logN olur.
Root 1 altında 2 çocuk anltında 4 çocuk…
2.0(2-1)-2[(0-2)2n+2]
Dengeli Arama Ağaçları
Binary tree ağacını daha önce görmüştük. Sıralı liste üzerindeydi. Ağacın kökünden itibaren
sol taraf sağ taraftan daha küçüktür. Bir diziden binary tree ağacını dönüşüm temsili
değiştirme için iyi bir örnektir.
Buiz böyle bir dönüşümle ekleme, silme ve arama işlemlerinde zaman verimliliği kazandık.
Q(logn)’dir. En kötü durumda bu operasyonda Q(n)’dir. Çünkü ağaç dengesiz hale gelince n-1
ağırlığa sahip olur.
2 tane yaklaşıma sahibiz

İlk yaklaşım örnek basitleştirme: dengesiz binary search tree dengeli ağaca
dönüştürülür. Bundan dolayı bu ağaçlar Self-blanzing(kendi kendine dengeli) olarak
adlandırılır.
AVL Tree de her düğümün sol ve sağ alt ağaçları arasındaki fark 1’i aşmaz.
Red Black Tree aynı düğümün alt ağacının 2 katı kadar olan bir alt ağacının ağırlığına
tolere eder. Eğer silme ve ekleme dengeyi bozarsa, dengeyi düzeltmek anlamına gelen
rotation olarak çağırılır. Özel dönüşüm ailesi tarafından yerinde yapılandırılır.

İkinci yaklaşım temsili değiştirme: bir arama ağacında bir düğümde birden fazla
eleman olmasına izin verilir.
Böyle ağaçlar 2-3 trees, 2-3-4 trees’tir. Ve B-tree’dir. ağacın tek bir düğümde izin verilen
eleman sayısı farklıdır.
AVL Trees
Blance Faktörü: heighleftchild- heighrightchild
Balance faktörü -1, 0, 1 olabilir.
Yani hL-hr <=1 olmalı
Dengeli olmalı.
Çünkü Q(logn) sağlamalıyız. Boş ağaç ağırlığı -1’dir.
AVL Ağacına Eleman Ekleme
Eleman ekleme AVL Ağacını dengesizleştirir. Ağaç dengesizleşirse rotation yapılır. Ekleme
işleminden sonra düğümün BF 2 veya -2 ise düğüm dengesizlerdendir.
4 farklı rotasyon vardır.
1.R-rotasyon veya tek sağa döndürme
Ekleme yapılamdan önce +1 dengeli bir köke sahip ağacın son child’nin sol alt ağacına yeni
bir ekleme yapılırsa gerçekleşir. Bu durumda kökün bağlandığı kenar sağ çocuk olur.
1. L rotasyon veya tek sol döndürme
Ekleme yapılmadan önce -1 dengeli bir köke sahip olan ağacın sağ child’e sağ sağ alt ağacına
yeni bir ekleme yapılır. Kökün bağlandığı kenar sağ çocuğu olur.
2. Çift sol- sağ döndürme(L-R Rotasyon)
2 döndürmenin kombinasyonudur. Önce sol döndürme sonra sol döndürme
3. Çift sağ ve sol döndürme(R-L Rotasyon)
Çıktı alınacak AVL ppt
Silme İşleminde 3 durum oluşur.

Dengesizliğe neden olmayan

Tek bir döndürme gerektiren

Çift döndürme ile dengelenir.
Örn:Çıktı AVLppt
Rotasyon İşleemlerinde Ağırlık Kaydırma
Örn: Ekleme
Ekleme Sıra 5,6,8,3,2,4,7
Download