Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Hashing Çırpı, kırpma, özetleme, adresleme. Hashing 2 Hash tablosu * Aşağıdaki operasyonları destekler n Bul n Ekle n Sil. (Bazı uygulamalarda silme gereksiz.

Benzer bir sunumlar


... konulu sunumlar: "Hashing Çırpı, kırpma, özetleme, adresleme. Hashing 2 Hash tablosu * Aşağıdaki operasyonları destekler n Bul n Ekle n Sil. (Bazı uygulamalarda silme gereksiz."— Sunum transkripti:

1 Hashing Çırpı, kırpma, özetleme, adresleme

2 Hashing 2 Hash tablosu * Aşağıdaki operasyonları destekler n Bul n Ekle n Sil. (Bazı uygulamalarda silme gereksiz olabilir.) * İkili arama ağacında, AVL ağacında ve B+- ağacından olduğu gibi aşağıdaki işlemler yapılamaz: n Minimum ve Maksimum n Halef ve selef n Belirli bir aralıktaki verinin listelenmesi n Verinin sıralanmış olarak listelenmesi

3 Hashing 3 Realistik olmayan Çözüm * Her hücre (slot) anahtarlar arasından bir anahtara denk gelir. n T[k], k anahtarlı bir elemana karşılık gelir. n Eğer kümede k anahtarlı eleman olmazsa, T[k]=NULL

4 Hashing 4 Realistik olmayan Çözüm * Ekle, sil ve bul işlemlerinin hepsi O(1)’dir (En kötü durum) * Problem: n Depolanacak olan elemanların sayısı göz önüne alındığında, eğer uzay çok büyük ise bu yapı çok fazla yer israf eder.  Örnek. Öğrenci numaraları 8-rakamlı olsun. Dolayısı ile uzay 10 8,olacak, ancak biz sadece öğrenciye sahibiz.

5 Hashing 5 Hashing Genellikle, m << N. h(K i ) = [0, …, m-1] bir tamsayıdır ve K i nin hash değeri olarak isimlendirilir

6 Hashing 6 Örnek Uygulamalar * Derleyiciler tanımlanan değişkenleri takip etmek için hash tabloları (symbol table) kullanır. * On-line kelime imlası kontrolü. Bütün sözlüğü hash ettikten sonra, herbir kelime sabit bir zamanda kontrol edilebilir ve hatalı yazılan kelimeler için öneriler verilebilir. * Giriş anahtarları sıralı bir şekilde gelen uygulamalarda kullanışlıdır. İkili arama ağacı için bu kötü bir durumdur. AVL ve B+ ağaçları için gerçekleştirilmesi zordur ve etkili değildir.

7 Hashing 7 Hashing * Hashing ile, k anahtarının bir elemanı T[h(k)] içerisinde depolanmıştır. * h: hash fonksiyonu n U anahtar kümesini bir hash tablosunun hash table T[0,1,...,m-1] içerisindeki bölmelere eşleştirir. n k anahtarının bir elemanı bölme h(k)’ ya hash eder. n h(k), k anahtarının hash değeridir

8 Hashing 8 Hashing * Problem: collision (çarpışma - ihtilaf) n İki anahtar aynı bölmeyi hash edebilir n İki farklı anahtarın farklı hücreleri kullanmasını sağlayabilir miyiz?  Hayır, eğer |U|>m, m hash tablosunun boyutu  İyi bir hash fonksiyonu tasarla n hesaplanması hızlı olan ve n çarpışmaların sayısını minimize edebilen.  Meydana geldikleri zaman çarpışmaları çözebilecek bir metot geliştir.

9 Hashing 9 Hash Fonksiyonu * Bölme metodu n h(k) = k mod m n örnek m=12, k=100, h(k)=4 sadece tekbir bölme işlemi gerektirir (oldukça hızlı) * m ‘ in bazı değerlerinden kaçınılabilinir. n örnek eğer m=2 p, öyleyse h(k) k nın en düşük p bitine karşılık gelir, hash bağlı olmaz. n Benzer şekilde, eğer anahtarlar ondalıklı sayı ise m’i 10 un kuvveti şeklinde ayarlamamalıyız. * m değerini asal sayı olarak ayarlama en iyi yoldur. * m için iyi değerler: 2’nin katlarına çok yakın olmayan asal sayı seçimi n örnek 2000 sayı tutacak bir hash tablosu, ve herbir hücrede ortalama olarak 3 eleman tutulacaksa  m=701 olarak seçilebilir.

10 Hashing 10 Hash Fonsiyonu... * Anahtarlar string olabilirmi? * Hash fonksiyonlarının çoğu anahtarların doğal sayılar olduğunu varsayar. n Eğer anahtarlar doğal sayı değilse, bu değerlerin doğal sayı olarak değerlendirilmesi için bir yol bulunmalıdır. * Metot 1 n Stringteki karakterlerin ASCII değerlerini topla. n Problemler:  Aynı karakterlerin farklı permutasyonları aynı hash değerlerine sahip olacaktır.  Eğer tablo boyutu büyükse, anahtarlar düzgün dağılmayacaktır.

11 Hashing 11 Hash Fonksiyonu... * Metot 2 n Eğer ilk 3 karakter random ise ve tablo boyutu 10,0007 ise => güzel bir dağılım vardır demektir. n Problem  İngilizce / Türkçe random değildir.  Sadece tablonun %28’i gerçekten hash edilebilir. (tablo boyutunun 10,007 olduğu varsayımı var) * Metot 3 n Hesapla n Anahtardaki bütün karakterleri içerir ve düzgün bir dağılım olması beklenir a,…,z ve boşluk

12 Hashing 12 Çarpışma İdaresi: (1) Ayrı Zincirleme * Hash tabloları yerine, bağlantılı liste tablosu kullanılır.- * Aynı değere hash eden anahtarları bağlantılı liste ile tut. h(K) = K mod 10

13 Hashing 13 Ayrı Zincirleme * K anahtarını ekleme n Hangi listeyi gezmeyi belirlemek için h(K) yi hesapla n Eğer T[h(K)] null pointer içeriyorsa, sadece K değerini içerecek olan bağlantılı listeye bu girişi ilklendir n Eğer T[h(K)] dolu bir liste ise, bu listenin en başına K yı ekleriz. * K anahtarını silmek için n h(K) hesapla, T[h(K)] daki liste için de K anahtarını ara. Eğer bulunduysa K anahtarını sil.

14 Hashing 14 Ayrı Zincirleme * n anahtar depolayacağımızı varsayalım. Öyleyse m i bir sonraki en büyük asal sayı yapmalıyız. Eğer hash fonksiyonu, herbir bağlantılı listedeki anahtar sayısı küçük bir sabit olacaktır. * Böylece, Herbir arama, ekleme, ve silme işleminin sabit zamanda yapılacağını bekleriz. * Dezavantajı: Bağlantılı listedeki hafıza yer ayırma işlemi programı yavaşlatacaktır. * Avantaj: silme kolaydır.

15 Hashing 15 Çarpışma İdaresi: (2) Açık Adresleme * Açık adresleme: n Eğer eklenecek K anahtarı varolan bir anahtar ile çarpışırsa K anahtarının yerini tekrar hesapla. Yani, K anahtarını T[h(K)]’ dan farklı bir yerde tutarız. * İki soru vardır. n Tekrar yer bulma işlemi nasıl olacak? n K değerini daha sonra nasıl arayacağız? * Açık adreslemedeki çarpışmaları çözmek için üç bilinen yöntem vardır. n Doğrusal araştırma - Linear probing n Karesel araştırma - Quadratic probing n Çift hashing - Double hashing

16 Hashing 16 Açık Adresleme * K anahtarını eklemek için, h 0 (K) hesapla. Eğer T[h 0 (K)] boşsa, oraya ekle. Eğer çarpışma olursa, alternatif hücre h 1 (K), h 2 (K),.... Ara, ta ki boş bir hücre bulunana kadar.. * h i (K) = (hash(K) + f(i)) mod m, f(0) = 0 ile n f: çarpışma çözüm stratejisi

17 Hashing 17 Doğrusal Araştırma * f(i) =i n Hücreler ard arda araştırılır. (with wraparound) n h i (K) = (hash(K) + i) mod m * Ekleme: n K eklenecek yeni bir anahtar olsun. hash(K) yı hesapla n For i = 0 to m-1  L = ( hash(K) + I ) mod m yı hesapla  T[L] boşsa, K yı ekle ve dur.. n Eğer K yı ekleyecek boş bir yer bulunamazsa, tablo dolu demektir ve hata mesajı verilir.

18 Hashing 18 Doğrusal Araştırm * h i (K) = (hash(K) + i) mod m * Örnek 89, 18, 49, 58, 69 anahtarlarını ekle, hash(K)=K mod 10 kullanarak Ekle 58, araştır T[8], T[9], T[0], T[1] Ekle 69, araştır T[9], T[0], T[1], T[2]

19 Hashing 19 Primary Clustering * We call a block of contiguously occupied table entries a cluster * On the average, when we insert a new key K, we may hit the middle of a cluster. Therefore, the time to insert K would be proportional to half the size of a cluster. That is, the larger the cluster, the slower the performance. * Linear probing has the following disadvantages: n Once h(K) falls into a cluster, this cluster will definitely grow in size by one. Thus, this may worsen the performance of insertion in the future. n If two cluster are only separated by one entry, then inserting one key into a cluster can merge the two clusters together. Thus, the cluster size can increase drastically by a single insertion. This means that the performance of insertion can deteriorate drastically after a single insertion. n Large clusters are easy targets for collisions.

20 Hashing 20 Karesel Araştırma * f(i) = i 2 * h i (K) = ( hash(K) + i 2 ) mod m * Örnek., 89, 18, 49, 58, 69 ekle, hash(K) = K mod 10 kullanarak ekle 58, araştır T[8], T[9], T[(8+4) mod 10] ekle 69, araştır T[9], T[(9+1) mod 10], T[(9+4) mod 10]

21 Hashing 21 Karesel Araştırma * Farklı başlangıç noktaları olan iki anahtar farklı araştırma sıralarına sahip olacaktır. n örnek m=101, h(k1)=30, h(k2)=29 n K1 için araştırma sırası: 30,30+1, 30+4, 30+9 n K2 için araştırma sırası : 29, 29+1, 29+4, 29+9 * Eğer tablo boyutu asal ise, her zaman yeni bir anahtar eklenebilir, ancak ve ancak en az tablonun yarısı boş ise. * Secondary clustering n Keys that hash to the same home position will probe the same alternative cells n Simulation results suggest that it generally causes less than an extra half probe per search n To avoid secondary clustering, the probe sequence need to be a function of the original key value, not the home position

22 Hashing 22 Çift Hashing * Kümeleme problemlerinden kaçmak için, bir anahtarın araştırma sırası ilk pozisyonundan bağımsız olmalıdır. => iki hash fonksiyonu kullan: hash() ve hash2() * f(i) = i * hash2(K) n Örnek hash2(K) = R - (K mod R), R bir asal sayıdır ve m den küçüktür

23 Hashing 23 Çift Hashing * h i (K) = ( hash(K) + f(i) ) mod m; hash(K) = K mod m * f(i) = i * hash2(K); hash2(K) = R + (K mod R), * Örnke: m=10, R = 7 ve 89, 18, 49, 58, 69 anahtarlarını ekle 49 eklemek için, hash2(49)=7, ikinci araştırma T[(9+7) mod 10] 58 eklemek için, hash2(58)=5, 2. araştırma T[(8+5) mod 10] 69 eklemek için, hash2(69)=1, 2. araştırma T[(9+1) mod 10]

24 Hashing 24 hash2() fonksiyonunun seçimi * Hash2() must never evaluate to zero * K anahtarı için, bağıl olarak tablo boyutu m ‘ e asal olmalıdır. Yoksa, aynı tablo girişleri üretilebilecektir. n Örnek, eğer hash(K) = 0 ve hash2(K) = m/2, sadece T[0], T[m/2], girişleri bulunacaktır başkası değil! * m asal yapmanın ve R değerini m’den küçük bir asal seçmenin bir yolu hash2(K) = R + (K mod R) * Karesel araştırma, fakat, ikinci hash fonksiyonunun kullanılmasına ihtiyaç duymaz. n Praktikte daha hızlı ve basittir.

25 Hashing 25 Açık Adreslemede Silme * Gerçek silme açık adresleme hash tablolarında gerçekleştirilemez. n Yoksa bu işlem araştırma sırasının bozulmasına yol açabilir. * Çözüm: Herbir bölmeye silinen elemanı göstermek için bir bayrak koy DELETED (tombstone)


"Hashing Çırpı, kırpma, özetleme, adresleme. Hashing 2 Hash tablosu * Aşağıdaki operasyonları destekler n Bul n Ekle n Sil. (Bazı uygulamalarda silme gereksiz." indir ppt

Benzer bir sunumlar


Google Reklamları