Title: Hashing
1HashingÇirpi, kirpma, özetleme, adresleme
2Hash tablosu
- Asagidaki operasyonlari destekler
- Bul
- Ekle
- Sil. (Bazi uygulamalarda silme gereksiz
olabilir.) - Ikili arama agacinda, AVL agacinda ve
B-agacindan oldugu gibi asagidaki islemler
yapilamaz - Minimum ve Maksimum
- Halef ve selef
- Belirli bir araliktaki verinin listelenmesi
- Verinin siralanmis olarak listelenmesi
3Realistik olmayan Çözüm
- Her hücre (slot) anahtarlar arasindan bir
anahtara denk gelir. - Tk, k anahtarli bir elemana karsilik gelir.
- Eger kümede k anahtarli eleman olmazsa, TkNULL
4Realistik olmayan Çözüm
- Ekle, sil ve bul islemlerinin hepsi O(1)dir (En
kötü durum) - Problem
- Depolanacak olan elemanlarin sayisi göz önüne
alindiginda, eger uzay çok büyük ise bu yapi çok
fazla yer israf eder. - Örnek. Ögrenci numaralari 8-rakamli olsun.
Dolayisi ile uzay 108 ,olacak, ancak biz sadece
32000 ögrenciye sahibiz.
5Hashing
Genellikle, m ltlt N. h(Ki) 0, , m-1 bir
tamsayidir ve Ki nin hash degeri olarak
isimlendirilir
6Örnek Uygulamalar
- Derleyiciler tanimlanan degiskenleri takip etmek
için hash tablolari (symbol table) kullanir. - On-line kelime imlasi kontrolü. Bütün sözlügü
hash ettikten sonra, herbir kelime sabit bir
zamanda kontrol edilebilir ve hatali yazilan
kelimeler için öneriler verilebilir. - Giris anahtarlari sirali bir sekilde gelen
uygulamalarda kullanislidir. Ikili arama agaci
için bu kötü bir durumdur. AVL ve B agaçlari
için gerçeklestirilmesi zordur ve etkili
degildir.
7Hashing
- Hashing ile, k anahtarinin bir elemani Th(k)
içerisinde depolanmistir. - h hash fonksiyonu
- U anahtar kümesini bir hash tablosunun hash table
T0,1,...,m-1 içerisindeki bölmelere eslestirir. - k anahtarinin bir elemani bölme h(k) ya hash
eder. - h(k) , k anahtarinin hash degeridir
8Hashing
- Problem collision (çarpisma - ihtilaf)
- Iki anahtar ayni bölmeyi hash edebilir
- Iki farkli anahtarin farkli hücreleri
kullanmasini saglayabilir miyiz? - Hayir, eger Ugtm, m hash tablosunun boyutu
- Iyi bir hash fonksiyonu tasarla
- hesaplanmasi hizli olan ve
- çarpismalarin sayisini minimize edebilen.
- Meydana geldikleri zaman çarpismalari çözebilecek
bir metot gelistir.
9Hash Fonksiyonu
- Bölme metodu
- h(k) k mod m
- örnek m12, k100, h(k)4
- sadece tekbir bölme islemi gerektirir
(oldukça hizli) - m in bazi degerlerinden kaçinilabilinir.
- örnek eger m2p, öyleyse h(k) k nin en düsük p
bitine karsilik gelir, hash bagli olmaz. - Benzer sekilde, eger anahtarlar ondalikli sayi
ise mi 10 un kuvveti seklinde ayarlamamaliyiz. - m degerini asal sayi olarak ayarlama en iyi
yoldur. - m için iyi degerler 2nin katlarina çok yakin
olmayan asal sayi seçimi - örnek 2000 sayi tutacak bir hash tablosu, ve
herbir hücrede ortalama olarak 3 eleman
tutulacaksa - m701 olarak seçilebilir.
10Hash Fonsiyonu...
- Anahtarlar string olabilirmi?
- Hash fonksiyonlarinin çogu anahtarlarin dogal
sayilar oldugunu varsayar. - Eger anahtarlar dogal sayi degilse, bu degerlerin
dogal sayi olarak degerlendirilmesi için bir yol
bulunmalidir. - Metot 1
- Stringteki karakterlerin ASCII degerlerini topla.
- Problemler
- Ayni karakterlerin farkli permutasyonlari ayni
hash degerlerine sahip olacaktir. - Eger tablo boyutu büyükse, anahtarlar düzgün
dagilmayacaktir.
11Hash Fonksiyonu...
- Metot 2
- Eger ilk 3 karakter random ise ve tablo boyutu
10,0007 ise gt güzel bir dagilim vardir demektir. - Problem
- Ingilizce / Türkçe random degildir.
- Sadece tablonun 28i gerçekten hash edilebilir.
(tablo boyutunun 10,007 oldugu varsayimi var) - Metot 3
- Hesapla
- Anahtardaki bütün karakterleri içerir ve düzgün
bir dagilim olmasi beklenir.
272
a,,z ve bosluk
12Çarpisma Idaresi (1) Ayri Zincirleme
- Hash tablolari yerine, baglantili liste tablosu
kullanilir.- - Ayni degere hash eden anahtarlari baglantili
liste ile tut.
h(K) K mod 10
13Ayri Zincirleme
- K anahtarini ekleme
- Hangi listeyi gezmeyi belirlemek için h(K) yi
hesapla - Eger Th(K) null pointer içeriyorsa, sadece K
degerini içerecek olan baglantili listeye bu
girisi ilklendir - Eger Th(K) dolu bir liste ise, bu listenin en
basina K yi ekleriz. - K anahtarini silmek için
- h(K) hesapla , Th(K) daki liste için de K
anahtarini ara. Eger bulunduysa K anahtarini sil.
14Ayri Zincirleme
- n anahtar depolayacagimizi varsayalim. Öyleyse m
i bir sonraki en büyük asal sayi yapmaliyiz.
Eger hash fonksiyonu, herbir baglantili listedeki
anahtar sayisi küçük bir sabit olacaktir. - Böylece, Herbir arama, ekleme, ve silme isleminin
sabit zamanda yapilacagini bekleriz. - Dezavantaji Baglantili listedeki hafiza yer
ayirma islemi programi yavaslatacaktir. - Avantaj silme kolaydir.
15Çarpisma Idaresi(2) Açik Adresleme
- Açik adresleme
- Eger eklenecek K anahtari varolan bir anahtar ile
çarpisirsa K anahtarinin yerini tekrar hesapla.
Yani, K anahtarini Th(K) dan farkli bir yerde
tutariz. - Iki soru vardir.
- Tekrar yer bulma islemi nasil olacak?
- K degerini daha sonra nasil arayacagiz?
- Açik adreslemedeki çarpismalari çözmek için üç
bilinen yöntem vardir. - Dogrusal arastirma - Linear probing
- Karesel arastirma - Quadratic probing
- Çift hashing - Double hashing
16Açik Adresleme
- K anahtarini eklemek için, h0(K) hesapla. Eger
Th0(K) bossa, oraya ekle. Eger çarpisma
olursa, alternatif hücre h1(K), h2(K), .... Ara,
ta ki bos bir hücre bulunana kadar.. - hi(K) (hash(K) f(i)) mod m, f(0) 0 ile
- f çarpisma çözüm stratejisi
17Dogrusal Arastirma
- f(i) i
- Hücreler ard arda arastirilir. (with wraparound)
- hi(K) (hash(K) i) mod m
- Ekleme
- K eklenecek yeni bir anahtar olsun. hash(K) yi
hesapla - For i 0 to m-1
- L ( hash(K) I ) mod m yi hesapla
- TL bossa, K yi ekle ve dur..
- Eger K yi ekleyecek bos bir yer bulunamazsa,
tablo dolu demektir ve hata mesaji verilir.
18Dogrusal Arastirm
- hi(K) (hash(K) i) mod m
- Örnek 89, 18, 49, 58, 69 anahtarlarini ekle,
hash(K)K mod 10 kullanarak
Ekle 58, arastir T8, T9, T0, T1
Ekle 69, arastir T9, T0, T1, T2
19Primary 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
- 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. - 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. - Large clusters are easy targets for collisions.
20Karesel Arastirma
- f(i) i2
- hi(K) ( hash(K) i2 ) mod m
- Örnek., 89, 18, 49, 58, 69 ekle, hash(K) K mod
10 kullanarak
ekle 58, arastir T8, T9, T(84) mod 10
ekle 69, arastir T9, T(91) mod 10, T(94)
mod 10
21Karesel Arastirma
- Farkli baslangiç noktalari olan iki anahtar
farkli arastirma siralarina sahip olacaktir. - örnek m101, h(k1)30, h(k2)29
- K1 için arastirma sirasi 30,301, 304, 309
- K2 için arastirma sirasi 29, 291, 294, 299
- Eger tablo boyutu asal ise, her zaman yeni bir
anahtar eklenebilir, ancak ve ancak en az
tablonun yarisi bos ise. - Secondary clustering
- Keys that hash to the same home position will
probe the same alternative cells - Simulation results suggest that it generally
causes less than an extra half probe per search - To avoid secondary clustering, the probe sequence
need to be a function of the original key value,
not the home position
22Çift Hashing
- Kümeleme problemlerinden kaçmak için, bir
anahtarin arastirma sirasi ilk pozisyonundan
bagimsiz olmalidir. gt iki hash fonksiyonu
kullan hash() ve hash2() - f(i) i hash2(K)
- Örnek hash2(K) R - (K mod R), R bir asal
sayidir ve m den küçüktür
23Çift Hashing
- hi(K) ( hash(K) f(i) ) mod m hash(K) K
mod m - f(i) i hash2(K) hash2(K) R (K mod R),
- Örnke m10, R 7 ve 89, 18, 49, 58, 69
anahtarlarini ekle
49 eklemek için , hash2(49)7, ikinci arastirma
T(97) mod 10
58 eklemek için, hash2(58)5, 2. arastirma
T(85) mod 10
69 eklemek için, hash2(69)1, 2. arastirma
T(91) mod 10
24hash2() fonksiyonunun seçimi
- Hash2() must never evaluate to zero
- K anahtari için, bagil olarak tablo boyutu m e
asal olmalidir. Yoksa, ayni tablo girisleri
üretilebilecektir. - Örnek, eger hash(K) 0 ve hash2(K) m/2, sadece
T0, Tm/2, girisleri bulunacaktir baskasi
degil! - m asal yapmanin ve R degerini mden küçük bir
asal seçmenin bir yolu - hash2(K) R (K mod R)
- Karesel arastirma, fakat, ikinci hash
fonksiyonunun kullanilmasina ihtiyaç duymaz. - Praktikte daha hizli ve basittir.
25Açik Adreslemede Silme
- Gerçek silme açik adresleme hash tablolarinda
gerçeklestirilemez. - Yoksa bu islem arastirma sirasinin bozulmasina
yol açabilir. - Çözüm Herbir bölmeye silinen elemani göstermek
için bir bayrak koy DELETED (tombstone)