You are on page 1of 25

Hashing rp, krpma, zetleme, adresleme

Hashing 2

Hash tablosu


Aadaki operasyonlar destekler


s s s

Bul Ekle Sil. (Baz uygulamalarda silme gereksiz olabilir.)

kili arama aacnda, AVL aacnda ve B+aacndan olduu gibi aadaki ilemler yaplamaz:
s s s s

Minimum ve Maksimum Halef ve selef Belirli bir aralktaki verinin listelenmesi Verinin sralanm olarak listelenmesi

Hashing 3

Realistik olmayan zm


Her hcre (slot) anahtarlar arasndan bir anahtara denk gelir.


s s

T[k], k anahtarl bir elemana karlk gelir. Eer kmede k anahtarl eleman olmazsa, T[k]=NULL

Hashing 4

Realistik olmayan zm
Ekle, sil ve bul ilemlerinin hepsi O(1)dir (En kt durum)  Problem:

s

Depolanacak olan elemanlarn says gz nne alndnda, eer uzay ok byk ise bu yap ok fazla yer israf eder.
rnek.

renci numaralar 8-rakaml olsun. Dolays ile uzay 108 ,olacak, ancak biz sadece 32000 renciye sahibiz.

Hashing 5

Hashing

Genellikle, m << N. h(Ki) = [0, , m-1] bir tamsaydr ve Ki nin hash deeri olarak isimlendirilir

Hashing 6

rnek Uygulamalar


Derleyiciler tanmlanan deikenleri takip etmek iin hash tablolar (symbol table) kullanr. On-line kelime imlas kontrol. Btn szl hash ettikten sonra, herbir kelime sabit bir zamanda kontrol edilebilir ve hatal yazlan kelimeler iin neriler verilebilir. Giri anahtarlar sral bir ekilde gelen uygulamalarda kullanldr. kili arama aac iin bu kt bir durumdur. AVL ve B+ aalar iin gerekletirilmesi zordur ve etkili deildir.

Hashing 7

Hashing


Hashing ile, k anahtarnn bir eleman T[h(k)] ierisinde depolanmtr.

h: hash fonksiyonu
s s s

U anahtar kmesini bir hash tablosunun hash table T[0,1,...,m-1] ierisindeki blmelere eletirir. k anahtarnn bir eleman blme h(k) ya hash eder. h(k) , k anahtarnn hash deeridir

Hashing 8

Hashing


Problem: collision (arpma - ihtilaf)


s s

ki anahtar ayn blmeyi hash edebilir ki farkl anahtarn farkl hcreleri kullanmasn salayabilir miyiz?
Hayr,

eer |U|>m, m hash tablosunun boyutu

yi bir hash fonksiyonu tasarla


s s

hesaplanmas hzl olan ve arpmalarn saysn minimize edebilen.

Meydana geldikleri zaman arpmalar zebilecek bir metot gelitir.

Hashing 9

Hash Fonksiyonu


Blme metodu
h(k) = k mod m s rnek m=12, k=100, h(k)=4
s

sadece tekbir blme ilemi gerektirir (olduka hzl)




m in baz deerlerinden kanlabilinir.


rnek eer m=2p, yleyse h(k) k nn en dk p bitine karlk gelir, hash bal olmaz. s Benzer ekilde, eer anahtarlar ondalkl say ise mi 10 un kuvveti eklinde ayarlamamalyz.
s

 

m deerini asal say olarak ayarlama en iyi yoldur. m iin iyi deerler: 2nin katlarna ok yakn olmayan asal say seimi
s

rnek 2000 say tutacak bir hash tablosu, ve herbir hcrede ortalama olarak 3 eleman tutulacaksa

m=701 olarak seilebilir.

Hashing 10

Hash Fonsiyonu...
Anahtarlar string olabilirmi?  Hash fonksiyonlarnn ou anahtarlarn doal saylar olduunu varsayar.

s

Eer anahtarlar doal say deilse, bu deerlerin doal say olarak deerlendirilmesi iin bir yol bulunmaldr. Stringteki karakterlerin ASCII deerlerini topla. Problemler:
Ayn

Metot 1
s s

karakterlerin farkl permutasyonlar ayn hash deerlerine sahip olacaktr. Eer tablo boyutu bykse, anahtarlar dzgn dalmayacaktr.

Hashing 11

Hash Fonksiyonu...


Metot 2

a,,z ve boluk

272

Eer ilk 3 karakter random ise ve tablo boyutu 10,0007 ise => gzel bir dalm vardr demektir. s Problem
s

ngilizce / Trke random deildir. Sadece tablonun %28i gerekten hash edilebilir. (tablo boyutunun 10,007 olduu varsaym var)


Metot 3
s s

Hesapla

Anahtardaki btn karakterleri ierir ve dzgn bir dalm olmas beklenir.

KeySize 1 i= 0

Key[ KeySize i 1] * 37i

Hashing 12

arpma daresi: (1) Ayr Zincirleme


Hash tablolar yerine, balantl liste tablosu kullanlr.Ayn deere hash eden anahtarlar balantl liste ile tut.
h(K) = K mod 10

 

Hashing 13

Ayr Zincirleme


K anahtarn ekleme
s s

Hangi listeyi gezmeyi belirlemek iin h(K) yi hesapla Eer T[h(K)] null pointer ieriyorsa, sadece K deerini ierecek olan balantl listeye bu girii ilklendir Eer T[h(K)] dolu bir liste ise, bu listenin en bana K y ekleriz.

K anahtarn silmek iin


s

h(K) hesapla , T[h(K)] daki liste iin de K anahtarn ara. Eer bulunduysa K anahtarn sil.

Hashing 14

Ayr Zincirleme


n anahtar depolayacamz varsayalm.


yleyse m i bir sonraki en byk asal say yapmalyz. Eer hash fonksiyonu, herbir balantl listedeki anahtar says kk bir sabit olacaktr. Bylece, Herbir arama, ekleme, ve silme ileminin sabit zamanda yaplacan bekleriz. Dezavantaj: Balantl listedeki hafza yer ayrma ilemi program yavalatacaktr. Avantaj: silme kolaydr.

Hashing 15

arpma daresi: (2) Ak Adresleme


Ak adresleme:
s

Eer eklenecek K anahtar varolan bir anahtar ile arprsa K anahtarnn yerini tekrar hesapla. Yani, K anahtarn T[h(K)] dan farkl bir yerde tutarz.

ki soru vardr.
s s

Tekrar yer bulma ilemi nasl olacak? K deerini daha sonra nasl arayacaz?

Ak adreslemedeki arpmalar zmek iin bilinen yntem vardr.


s s s

Dorusal aratrma - Linear probing Karesel aratrma - Quadratic probing ift hashing - Double hashing

Hashing 16

Ak Adresleme


K anahtarn eklemek iin, h0(K) hesapla. Eer T[h0(K)] bosa, oraya ekle. Eer arpma olursa, alternatif hcre h1(K), h2(K), .... Ara, ta ki bo bir hcre bulunana kadar.. hi(K) = (hash(K) + f(i)) mod m, f(0) = 0 ile
s

f: arpma zm stratejisi

Hashing 17

Dorusal Aratrma


f(i) =i
s s

Hcreler ard arda aratrlr. (with wraparound) hi(K) = (hash(K) + i) mod m

Ekleme:
s

K eklenecek yeni bir anahtar olsun. hash(K) y hesapla For i = 0 to m-1


L

= ( hash(K) + I ) mod m y hesapla T[L] bosa, K y ekle ve dur..


s

Eer K y ekleyecek bo bir yer bulunamazsa, tablo dolu demektir ve hata mesaj verilir.

Hashing 18

Dorusal Aratrm



hi(K) = (hash(K) + i) mod m


rnek 89, 18, 49, 58, 69 anahtarlarn ekle, hash(K)=K mod 10 kullanarak
Ekle 58, aratr T[8], T[9], T[0], T[1] Ekle 69, aratr T[9], T[0], T[1], T[2]

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:
s

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.

Hashing 20

Karesel Aratrma
 


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, aratr T[8], T[9], T[(8+4) mod 10]

ekle 69, aratr T[9], T[(9+1) mod 10], T[(9+4) mod 10]

Hashing 21

Karesel Aratrma


Farkl balang noktalar olan iki anahtar farkl aratrma sralarna sahip olacaktr.
rnek m=101, h(k1)=30, h(k2)=29 s K1 iin aratrma sras: 30,30+1, 30+4, 30+9 s K2 iin aratrma sras : 29, 29+1, 29+4, 29+9
s

Eer tablo boyutu asal ise, her zaman yeni bir anahtar eklenebilir, ancak ve ancak en az tablonun yars bo ise. Secondary clustering
Keys that hash to the same home position will probe the same alternative cells s Simulation results suggest that it generally causes less than an extra half probe per search s To avoid secondary clustering, the probe sequence need to be a function of the original key value, not the home position
s

Hashing 22

ift Hashing


Kmeleme problemlerinden kamak iin, bir anahtarn aratrma sras ilk pozisyonundan bamsz olmaldr. => iki hash fonksiyonu kullan: hash() ve hash2() f(i) = i * hash2(K)
s

rnek hash2(K) = R - (K mod R), R bir asal saydr ve m den kktr

Hashing 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: m=10, R = 7 ve 89, 18, 49, 58, 69 anahtarlarn ekle
49 eklemek iin , hash2(49)=7, ikinci aratrma T[(9+7) mod 10] 58 eklemek iin, hash2(58)=5, 2. aratrma T[(8+5) mod 10] 69 eklemek iin, hash2(69)=1, 2. aratrma T[(9+1) mod 10]

Hashing 24

hash2() fonksiyonunun seimi




Hash2() must never evaluate to zero K anahtar iin, bal olarak tablo boyutu m e asal olmaldr. Yoksa, ayn tablo girileri retilebilecektir.
s

rnek, eer hash(K) = 0 ve hash2(K) = m/2, sadece T[0], T[m/2], girileri bulunacaktr bakas deil!

m asal yapmann ve R deerini mden kk bir asal semenin bir yolu hash2(K) = R + (K mod R) Karesel aratrma, fakat, ikinci hash fonksiyonunun kullanlmasna ihtiya duymaz. s Praktikte daha hzl ve basittir.

Hashing 25

Ak Adreslemede Silme


Gerek silme ak adresleme hash tablolarnda gerekletirilemez.


s

Yoksa bu ilem aratrma srasnn bozulmasna yol aabilir.

zm: Herbir blmeye silinen eleman gstermek iin bir bayrak koy DELETED (tombstone)