Hashing rp krpma zetleme adresleme Hashing 2 Hash

  • Slides: 25
Download presentation
Hashing Çırpı, kırpma, özetleme, adresleme

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

Hashing 2 Hash tablosu * Aşağıdaki operasyonları destekler Bul n Ekle n Sil. (Bazı

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

Hashing 3 Realistik olmayan Çözüm * Her hücre (slot) anahtarlar arasından bir anahtara denk

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

Hashing 4 Realistik olmayan Çözüm * Ekle, sil ve bul işlemlerinin hepsi O(1)’dir (En

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. 1Örnek. Öğrenci numaraları 8 -rakamlı olsun. Dolayısı ile uzay 108 , olacak, ancak biz sadece 32000 öğrenciye sahibiz.

Hashing 5 Hashing Genellikle, m << N. h(Ki) = [0, …, m-1] bir tamsayıdır

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

Hashing 6 Örnek Uygulamalar * Derleyiciler tanımlanan değişkenleri takip etmek için hash tabloları (symbol

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.

Hashing 7 Hashing * Hashing ile, k anahtarının bir elemanı T[h(k)] içerisinde depolanmıştır. *

Hashing 7 Hashing * Hashing ile, k anahtarının bir elemanı T[h(k)] içerisinde depolanmıştır. * h: hash fonksiyonu 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 n

Hashing 8 Hashing * Problem: collision (çarpışma - ihtilaf) İki anahtar aynı bölmeyi hash

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

Hashing 9 Hash Fonksiyonu * Bölme metodu n n h(k) = k mod m

Hashing 9 Hash Fonksiyonu * Bölme metodu n n h(k) = k mod m ö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. ö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. n * 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 1 m=701 olarak seçilebilir.

Hashing 10 Hash Fonsiyonu. . . * Anahtarlar string olabilirmi? * Hash fonksiyonlarının çoğu

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 Stringteki karakterlerin ASCII değerlerini topla. n Problemler: n 1 Aynı karakterlerin farklı permutasyonları aynı hash değerlerine sahip olacaktır. 1 Eğer tablo boyutu büyükse, anahtarlar düzgün dağılmayacaktır.

Hashing 11 Hash Fonksiyonu. . . * Metot 2 a, …, z ve boşluk

Hashing 11 Hash Fonksiyonu. . . * Metot 2 a, …, z ve boşluk 272 Eğer ilk 3 karakter random ise ve tablo boyutu 10, 0007 ise => güzel bir dağılım vardır demektir. n Problem n 1İngilizce / Türkçe random değildir. 1 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.

Hashing 12 Çarpışma İdaresi: (1) Ayrı Zincirleme Hash tabloları yerine, bağlantılı liste tablosu kullanılır.

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

Hashing 13 Ayrı Zincirleme *K anahtarını ekleme Hangi listeyi gezmeyi belirlemek için h(K) yi

Hashing 13 Ayrı Zincirleme *K anahtarını ekleme 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. n *K n anahtarını silmek için h(K) hesapla , T[h(K)] daki liste için de K anahtarını ara. Eğer bulunduysa K anahtarını sil.

Hashing 14 Ayrı Zincirleme * n anahtar depolayacağımızı varsayalım. Öyleyse m i bir sonraki

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.

Çarpışma İdaresi: (2) Açık Adresleme Hashing 15 * Açık adresleme: n * Eğer eklenecek

Çarpışma İdaresi: (2) Açık Adresleme Hashing 15 * 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. Tekrar yer bulma işlemi nasıl olacak? n K değerini daha sonra nasıl arayacağız? n * Açık adreslemedeki çarpışmaları çözmek için üç bilinen yöntem vardır. Doğrusal araştırma - Linear probing n Karesel araştırma - Quadratic probing n Çift hashing - Double hashing n

Hashing 16 Açık Adresleme * K anahtarını eklemek için, h 0(K) hesapla. Eğer T[h

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. . * hi(K) = (hash(K) + f(i)) mod m, f(0) = 0 ile n f: çarpışma çözüm stratejisi

Hashing 17 Doğrusal Araştırma * f(i) =i Hücreler arda araştırılır. (with wraparound) n hi(K)

Hashing 17 Doğrusal Araştırma * f(i) =i Hücreler arda araştırılır. (with wraparound) n hi(K) = (hash(K) + i) mod m n * Ekleme: n K eklenecek yeni bir anahtar olsun. hash(K) yı hesapla n For i = 0 to m-1 1 L = ( hash(K) + I ) mod m yı hesapla 1 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.

Hashing 18 Doğrusal Araştırm * hi(K) = (hash(K) + i) mod m * Örnek

Hashing 18 Doğrusal Araştırm * hi(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]

Hashing 19 Primary Clustering * We call a block of contiguously occupied table entries

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.

Hashing 20 Karesel Araştırma f(i) = i 2 * hi(K) = ( hash(K) +

Hashing 20 Karesel Araştırma f(i) = i 2 * hi(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]

Hashing 21 Karesel Araştırma * Farklı başlangıç noktaları olan iki anahtar farklı araştırma sıralarına

Hashing 21 Karesel Araştırma * Farklı başlangıç noktaları olan iki anahtar farklı araştırma sıralarına sahip olacaktır. örnek m=101, h(k 1)=30, h(k 2)=29 n K 1 için araştırma sırası: 30, 30+1, 30+4, 30+9 n K 2 için araştırma sırası : 29, 29+1, 29+4, 29+9 n * Eğer tablo boyutu asal ise, her zaman yeni bir anahtar eklenebilir, ancak ve ancak en az tablonun yarısı boş ise. * Secondary clustering 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 n

Hashing 22 Çift Hashing * Kümeleme problemlerinden kaçmak için, bir anahtarın araştırma sırası ilk

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 hash 2() * f(i) = i * hash 2(K) n Örnek hash 2(K) = R - (K mod R), R bir asal sayıdır ve m den küçüktür

Hashing 23 Çift Hashing * * * hi(K) = ( hash(K) + f(i) )

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

Hashing 24 hash 2() fonksiyonunun seçimi * Hash 2() must never evaluate to zero

Hashing 24 hash 2() fonksiyonunun seçimi * Hash 2() 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 hash 2(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 hash 2(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.

Hashing 25 Açık Adreslemede Silme * Gerçek silme açık adresleme hash tablolarında gerçekleştirilemez. n

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)