SlideShare una empresa de Scribd logo
1 de 39
YZM 2116
Veri Yapıları
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
BÖLÜM - 10
Bu bölümde,
• Giriş
• Hash Tabloları
• Hash Fonksiyonu
• Çakışma (Collision)
• Ayrık Zincirleme Çözümü
• Linear Probing Çözümü
• Quadratic Probing Çözümü
konusuna değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Giriş
• Bilgi getiriminde iki tip bilgi arama ve erişim
stratejisi mevcuttur:
1. Sıralı erişim
2. Direk erişim (Nasıl yaparız?)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Nasıl Yaparız?
• Sıralı erişimde, temel işlem, baştan sona tüm
anahtarları karşılaştırmaktır.
• Bir anahtarın tablo içerisinde bulunduğu
pozisyona ulaşıncaya kadar arama işlemine devam
edilir.
• Hash fonksiyonuyla aranan anahtar elemana
doğrudan erişilebilmektedir.
• Hash fonksiyonu, bir anahtar bilgisinin tabloda
bulunduğu indeksi hesaplamaktadır.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Tabloları
• Hash tablo veri yapısı ile veri arama, ekleme ve
silme işlemleri ortalama olarak sabit zamanda
(O(1)), daha verimli bir biçimde gerçekleştirilir.
• Hash tabloları arama, ekleme ve silme
işlemlerinde ağaçlardan daha hızlı oldukları
(ortalamada) gibi programlanmaları da daha
kolaydır.
• Dezavantajları
o Tablo içerisindeki elemanların sıralanması, en büyük ya da
en küçük elemanın bulunması işlemlerinde verimli değildir.
o En büyük kısıtı ise diziler ile oluşturulmalarıdır.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Tabloları (devam…)
• İdeal bir hash tablo veri yapısı, içerisinde elemanlar
barındıran sabit bir diziden oluşur.
• Dizi içerisindeki elemanlar, index hesaplamasında
kullanılacak anahtar (key) isimli özel bir üye bulundurmak
zorundadırlar.
• Anahtar; integer veya string bir değer olabilir.
• Örneğin: Bir Öğrenci nesnesindeki Öğrenci No veya Öğrenci TC Kimlik
No olabilir.
• Dizinin boyutu TabloBoyutu olup,
• Diziye eklenecek elemanlar 0’dan (TabloBoyutu-1)’e kadar
olan indekslerde saklanırlar.
• AnahtardanIndekse dönüştürme işlemine Hashing, bu
işi yapan fonksiyona Hashing fonksiyonu denir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Örnek
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash
Fonksiyonu
İpek 4444
Sibel 3333
Ada 2222
Cem 1111
Elemanlar
Hash
Tablosu
anahtar
anahtar
0
1
2
3
4
5
6
7
8
9
İpek 4444
Sibel 3333
Ada 2222
Cem 1111
String Hash Fonksiyon Örneği
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Karakterlerin ASCII değerlerini topla ve mod al.
int hash(const string key, int tableSize)
{
int hasVal = 0;
for (int i = 0; i < key.length(); i++)
hashVal += key[i];
return hashVal % tableSize;
}
• Gerçekleştirimi basit ve hızlı bir algoritmadır.
• Ancak, hash tablosunda eleman sayısı fazla ise fonksiyon
anahtarları iyi dağıtamaz.
• Örn: N =10000, Anahtar uzunluğu <= 8 ise,
• Hash fonksiyonu 0 ve 1016 arasında değer üretir.
Hash Fonksiyonu
• Anahtarın dizideki pozisyonu yani indisini
belirlemek için kullanılır.
• Dizinin eleman sayısı N olsun
• Fonksiyon f(x), x anahtarını 0 ve N−1 arasındaki bir
indise dönüştürür
• Örneğin, N=15 ise, anahtar 0 ve MAX_INT arasında
olup, Hash fonksiyonu aşağıdaki gibi olabilir:
f(x) = x % 15
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Fonksiyonu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
f(x) = x % 15 ise f(x) ?
if x = 25 129 35 2501 47 36
f(x) = 10 9 5 11 2 6
Anahtarların diziye yerleşimi aşağıdaki gibidir:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _
• Silme, ekleme ve arama işlem karmaşıklığı O(1),
ancak bir problem var???
Hash Fonksiyonu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Soru: Eğer x = 65 anahtarını eklemek istersek ne olur?
x = 65
f(x) = 5
Anahtarların diziye yerleşimi:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _
65(?)
• 35 ve 65 anahtarları için f(x) fonksiyonundan aynı
indis değeri döndü.
Çakışma (collision) oldu…
Çakışma (Collision)
• Hashing işlemi sonucunda farklı anahtarlara sahip iki
eleman, aynı dizi indeks değeri üretilebilir.
• Eğer en az iki eleman için aynı indeks değeri üretilirse
bu duruma çarpışma denir.
• Çarpışma istenmeyen bir durumdur.
• Çarpışmayı çözmek için iki yöntem vardır:
1. Ayrık zincirleme (Separate chaning)
2. Açık adresleme (Open adressing)
I. Doğrusal ölçüm (Linear probing)
II. Karesel ölçüm (Quadratic probing)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
1.Ayrık Zincirleme Çözümü
• Aynı indis pozisyonuna gelen kayıtlar bağlı
listelerle gösterilir.
• Çarpışma meydana gelirse ikinci eleman bir
bağlı liste ile birinci elemana bağlanır.
• Bağlı listeler tek veya çift yönlü olabilir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
1.Ayrık Zincirleme Çözümü (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
0
1
2
3
4
5
6
7
8
9
0
81 1
64 4
25
36 16
49 9
Anahtarlar: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 hash(anahtar) = anahtar % 10
1.Ayrık Zincirleme Çözümü (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Labda gerçekleştirim yapacağız...
1.Ayrık Zincirleme Çözümü
• Avantajları
o Basit çakışma çözümü (bağlı liste üzerinde arama)
o Hash tablosunun maksimum eleman sayısından daha
fazla eleman eklenebilir.
• Dezavantajları
o Tablonun bazı kısımları hiç kullanılmamaktadır.
o Bağlı listeler uzadıkça arama ve silme işlemleri için
gereken zaman uzamaktadır.
o Dizi haricinde ekstra veri yapısı olan bağlı liste
kullanılır.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
2. Açık Adresleme Çözümü
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Açık adresleme çözümünde tüm elemanlar aynı
hash tablosunda (dizide) saklanırlar.
• Çarpışma meydana geldiğinde alternatif boş
indisler denenir.
– Denenecek indisler h0(x), h1(x), h2(x), …
• Genel mantık aşağıdaki gibidir:
– hi(x) = (hash(x) + f(i)) mod TabloBoyutu, with f(0) = 0.
– f fonksiyonu is the çakışma (Collision) çözüm
stratejisidir.
2. Açık Adresleme Çözümü
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
1. Doğrusal Ölçüm (Linear Probing)
2. Karesel Ölçüm (Quadratic Probing)
Doğrusal Ölçüm (Linear Probing)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çakışma meydana geldiğinde, doğrusal arama
mantığıyla, uygun boş yerler sırayla aranırlar.
• f doğrusal bir fonksiyon olup, f(i) = i
• Sırayla deneme işlemi gerçekleştirilir.
• Hash tablosunun sonuna gelindiyse, başa
dönülür.
o Döngüsel Kuyruk mantığında veya döngüsel dizi
• TabloBoyutu = 15.
• 65 elemanını eklemek istiyoruz, ancak 5 numaralı
indiste zaten 35 elemanı var.
• Çakışma gerçekleşti, ne yapacağız?
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _
65(?)
Doğrusal Ölçüm (Linear Probing) (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çözüm: 65 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _
  
denemeler
• Toplam 3 deneme yaptık ve uygun yeri bulduk.
Soru: 29’u nereye ekleyeceğiz?
Doğrusal Ölçüm (Linear Probing) (devam…)
65
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Çözüm: 29 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 65 _ 129 25 2501 _ _ _

deneme
• Toplam 1 deneme yaptık ve uygun yeri bulduk.
Soru: 16’yı nereye ekleyeceğiz?
29
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Çözüm: 16 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29

deneme
• Toplam 1 deneme yaptık ve uygun yeri bulduk.
Soru: 14’ü nereye ekleyeceğiz?
16
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Çözüm: 14 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ 16 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29
 
deneme deneme
• Toplam 2 deneme yaptık ve uygun yeri bulduk.
Soru: 99’u nereye ekleyeceğiz?
14
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Çözüm: 99 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
14 16 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29
   
denemeler
• Toplam 4 deneme yaptık ve uygun yeri bulduk.
99
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
Arama İşlemi
• Ekleme işlemindeki benzer algoritma mantığı ile
arama işlemi gerçekleştirilir.
1. Aranacak anahtar, hash fonksiyonuna geçirilir ve
hash tablo indisi bulunur.
2. İndis değerinde eleman olup olmadığı kontrol
edilir. Eleman yoksa, bulma işlemi başarısız
demektir. İndiste eleman varsa, elemanın
anahtarı ile aranan anahtar karşılaştırılır.
i. Eğer anahtarlar eşitse, çıkılır.
ii. Anahtarlar eşit değilse, bir sonraki indise geçilir.
iii. 2 numaralı adım baştan işletilir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
0
1
2
3
4
5
6
7
8
9
• H(x) = x % 10
• Ekle 47, 57, 68, 18, 67
• Bul 68
• Bul 10
• Sil 47
• Bul 57
47
57
68
18
67
PROBLEM
47’yi gerçekten silersek 57’yi
bulamayız. Nasıl silmeliyiz?
Silme İşlemi
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Tembel Silme (Lazy Deletion)
• Her dizi hücresinin 3 durumu tutulur:
– Aktif (Dolu)
– Boş (Empty)
– Silindi (Deleted)
• Arama ve silme işlemlerinde
– Sadece (durum = Boş) ise işlemi sonlandır. Silindi
durumunda sonraki elemanla devam et.
Silme İşlemi Çözüm
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Doğrusal Ölçüm (Linear Probing) (devam…)
• Ekle
– Hücre: Boş veya Silindi H indise Ekle VE hücre = Aktif
– Hücre: Aktif H = (H + 1) mod N
• Bul / Ara
– Hücre: Boş BULUNAMADI
– Hücre: Silindi H = (H + 1) mod N
– Hücre: Aktif if key == key in hucre -> BULDU
else H = (H + 1) mod N
• Sil
– Hücre: Aktif; key != key H = (H + 1) mod N
– Hücre: Aktif; key == key SİL; hücre = Silindi
– Hücre: Silindi H = (H + 1) mod N
– Hücre: Boş BULUNAMADI
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Kümeleme (Clustering) Problemi
• Hash tablosu yeterince büyük olduğunda mutlaka boş
bir hücre bulunabilir.
• Kayıtların yığın şeklinde toplanmasına yani
kümelemeye (clustering) neden olabilir.
• Arama işlemi genelde küme içerisinde gerçekleşir ve
kümeye eklenir.
Doğrusal Ölçüm (Linear Probing) (devam…)
    
Karesel Ölçüm (Quadratic Probing)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Kümeleme problemini önlemek için geliştirilmiştir.
• Genel mantık aşağıdaki gibidir:
– hi(x) = (hash(x) + f(i)) mod TabloBoyutu, with f(0) = 0.
– f fonksiyonu is the çakışma (Collision) çözüm
stratejisidir.
– f karesel bir fonksiyon olup, f(i) = i2
Karesel Ölçüm (Quadratic Probing) (devam…)
• Çözüm: 65 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _
t t+1 t+4 t+9
   
denemeler
• Toplam 4 deneme yaptık ve uygun yeri bulduk.
Soru: 29’u nereye ekleyeceğiz?
65
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çözüm: 29 Ekle
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
_ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ 65
 
t+1 t
• Toplam 2 deneme yaptık ve uygun yeri bulduk.
29
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Karesel Ölçüm (Quadratic Probing) (devam…)
• Hash fonksiyonların güvenlik ve şifreleme alanında da sıkça
kullanılmaktadır.
• Hash fonksiyonları tek yönlü (One Way) çalışır. Yani
algoritmanın ürettiği sonuçtan tekrar asıl metine dönüşün
mümkün değildir.
• Bazı örnek hash fonksiyonları:
– MD5 (Message Digest 5)
– MD6 (Message Digest 6)
– SHA-1 (Secure Hashing Algorithm)
– HAVAL
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Fonksiyonları ve Güvenlik
Veritabanında Kullanıcı Bilgisi Saklanması
• Örneğin web sitelerinde kullanıcı bilgilerini veritabanında
saklarken SHA kullanılabilir. Web siteleri sizin şifrenizi tek
yönlü şifreli tutmak zorundadır.
• 160 bitlik SHA algoritması en çok kullanılanıdır.
• SHA'nın birçok türevi vardır.
• Facebook'un kullandığı 384 bitlik versiyon, 160 bitliğe göre
daha güvenlidir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Fonksiyonları ve Güvenlik (devam…)
Dosya İndirme Kontrolü
• Hash algoritmaların bir diğer kullanım yeri de internetten
indirdiğiniz herhangi bir dosyanın tam inip inmediğini tespit
etmektir.
• Örneğin, web sitemizde 700 MB'lık bir Ubuntu.ISO dosyasının
linkini koyduk.
• Linkin altına Ubuntu.ISO dosyasının SHA veya MD5
algoritmasından geçirilmiş halini de koyuyoruz.
• Ubuntu.ISO dosyasını sitemizden indiren kullanıcı, kendi
bilgisayarında indirdiği dosyayı MD5 veya SHA'dan geçiriyor,
sitemizdeki ile aynı sonuç çıkarsa, sorunsuz inmiştir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Hash Fonksiyonları ve Güvenlik (devam…)
• Hash fonksiyonu
• f(x) = N % 19
• Buna göre, her bir anahtarın aranma
olasılığının eşit olduğu varsayılırsa,
• Başarılı aramalar için ortalama
yoklama sayısı kaç olur?
• Tüm aramalar için ortalama
yoklama sayısı kaç olur?
a ) 0, 8, 1, 4
b) 6 , 1, 8, 2
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Örnek Soru
İYİ ÇALIŞMALAR…
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Yararlanılan Kaynaklar
• Ders Kitabı:
• Data Structures through JAVA, V.V.Muniswamy
• Yardımcı Okumalar:
• Data Structures and Algorithms in Java, Narashima
Karumanchi
• Data Structures, Algorithms and Applications in Java,
Sartaj Sahni
• Algorithms, Robert Sedgewick
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları

Más contenido relacionado

La actualidad más candente

non linear data structure -introduction of tree
non linear data structure -introduction of treenon linear data structure -introduction of tree
non linear data structure -introduction of tree
Siddhi Viradiya
 
Introductiont To Aray,Tree,Stack, Queue
Introductiont To Aray,Tree,Stack, QueueIntroductiont To Aray,Tree,Stack, Queue
Introductiont To Aray,Tree,Stack, Queue
Ghaffar Khan
 

La actualidad más candente (20)

Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116  Bölüm 1 - Veri Yapılarına GirişYzm 2116  Bölüm 1 - Veri Yapılarına Giriş
Yzm 2116 Bölüm 1 - Veri Yapılarına Giriş
 
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Avl trees
Avl treesAvl trees
Avl trees
 
non linear data structure -introduction of tree
non linear data structure -introduction of treenon linear data structure -introduction of tree
non linear data structure -introduction of tree
 
Advanced Trees
Advanced TreesAdvanced Trees
Advanced Trees
 
SQUARE ROOT SORTING ALGORITHM
SQUARE ROOT SORTING ALGORITHMSQUARE ROOT SORTING ALGORITHM
SQUARE ROOT SORTING ALGORITHM
 
AVL Tree Data Structure
AVL Tree Data StructureAVL Tree Data Structure
AVL Tree Data Structure
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Yonetim bilişim sistemleri
Yonetim bilişim sistemleri Yonetim bilişim sistemleri
Yonetim bilişim sistemleri
 
B+tree Data structures presentation
B+tree Data structures presentationB+tree Data structures presentation
B+tree Data structures presentation
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
AVL Tree
AVL TreeAVL Tree
AVL Tree
 
Trees, Binary Search Tree, AVL Tree in Data Structures
Trees, Binary Search Tree, AVL Tree in Data Structures Trees, Binary Search Tree, AVL Tree in Data Structures
Trees, Binary Search Tree, AVL Tree in Data Structures
 
Introductiont To Aray,Tree,Stack, Queue
Introductiont To Aray,Tree,Stack, QueueIntroductiont To Aray,Tree,Stack, Queue
Introductiont To Aray,Tree,Stack, Queue
 
Red black trees
Red black treesRed black trees
Red black trees
 
UNIT III NON LINEAR DATA STRUCTURES – TREES
UNIT III 	NON LINEAR DATA STRUCTURES – TREESUNIT III 	NON LINEAR DATA STRUCTURES – TREES
UNIT III NON LINEAR DATA STRUCTURES – TREES
 
1.8 splay tree
1.8 splay tree 1.8 splay tree
1.8 splay tree
 
Data mining - Associativité
Data mining - AssociativitéData mining - Associativité
Data mining - Associativité
 
BINARY SEARCH TREE
BINARY SEARCH TREE BINARY SEARCH TREE
BINARY SEARCH TREE
 

Yzm 2116 Bölüm 10 - Hash Table

  • 1. YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği
  • 2. BÖLÜM - 10 Bu bölümde, • Giriş • Hash Tabloları • Hash Fonksiyonu • Çakışma (Collision) • Ayrık Zincirleme Çözümü • Linear Probing Çözümü • Quadratic Probing Çözümü konusuna değinilecektir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 3. Giriş • Bilgi getiriminde iki tip bilgi arama ve erişim stratejisi mevcuttur: 1. Sıralı erişim 2. Direk erişim (Nasıl yaparız?) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 4. Nasıl Yaparız? • Sıralı erişimde, temel işlem, baştan sona tüm anahtarları karşılaştırmaktır. • Bir anahtarın tablo içerisinde bulunduğu pozisyona ulaşıncaya kadar arama işlemine devam edilir. • Hash fonksiyonuyla aranan anahtar elemana doğrudan erişilebilmektedir. • Hash fonksiyonu, bir anahtar bilgisinin tabloda bulunduğu indeksi hesaplamaktadır. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 5. Hash Tabloları • Hash tablo veri yapısı ile veri arama, ekleme ve silme işlemleri ortalama olarak sabit zamanda (O(1)), daha verimli bir biçimde gerçekleştirilir. • Hash tabloları arama, ekleme ve silme işlemlerinde ağaçlardan daha hızlı oldukları (ortalamada) gibi programlanmaları da daha kolaydır. • Dezavantajları o Tablo içerisindeki elemanların sıralanması, en büyük ya da en küçük elemanın bulunması işlemlerinde verimli değildir. o En büyük kısıtı ise diziler ile oluşturulmalarıdır. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 6. Hash Tabloları (devam…) • İdeal bir hash tablo veri yapısı, içerisinde elemanlar barındıran sabit bir diziden oluşur. • Dizi içerisindeki elemanlar, index hesaplamasında kullanılacak anahtar (key) isimli özel bir üye bulundurmak zorundadırlar. • Anahtar; integer veya string bir değer olabilir. • Örneğin: Bir Öğrenci nesnesindeki Öğrenci No veya Öğrenci TC Kimlik No olabilir. • Dizinin boyutu TabloBoyutu olup, • Diziye eklenecek elemanlar 0’dan (TabloBoyutu-1)’e kadar olan indekslerde saklanırlar. • AnahtardanIndekse dönüştürme işlemine Hashing, bu işi yapan fonksiyona Hashing fonksiyonu denir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 7. Örnek Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Hash Fonksiyonu İpek 4444 Sibel 3333 Ada 2222 Cem 1111 Elemanlar Hash Tablosu anahtar anahtar 0 1 2 3 4 5 6 7 8 9 İpek 4444 Sibel 3333 Ada 2222 Cem 1111
  • 8. String Hash Fonksiyon Örneği Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Karakterlerin ASCII değerlerini topla ve mod al. int hash(const string key, int tableSize) { int hasVal = 0; for (int i = 0; i < key.length(); i++) hashVal += key[i]; return hashVal % tableSize; } • Gerçekleştirimi basit ve hızlı bir algoritmadır. • Ancak, hash tablosunda eleman sayısı fazla ise fonksiyon anahtarları iyi dağıtamaz. • Örn: N =10000, Anahtar uzunluğu <= 8 ise, • Hash fonksiyonu 0 ve 1016 arasında değer üretir.
  • 9. Hash Fonksiyonu • Anahtarın dizideki pozisyonu yani indisini belirlemek için kullanılır. • Dizinin eleman sayısı N olsun • Fonksiyon f(x), x anahtarını 0 ve N−1 arasındaki bir indise dönüştürür • Örneğin, N=15 ise, anahtar 0 ve MAX_INT arasında olup, Hash fonksiyonu aşağıdaki gibi olabilir: f(x) = x % 15 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 10. Hash Fonksiyonu (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları f(x) = x % 15 ise f(x) ? if x = 25 129 35 2501 47 36 f(x) = 10 9 5 11 2 6 Anahtarların diziye yerleşimi aşağıdaki gibidir: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _ • Silme, ekleme ve arama işlem karmaşıklığı O(1), ancak bir problem var???
  • 11. Hash Fonksiyonu (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Soru: Eğer x = 65 anahtarını eklemek istersek ne olur? x = 65 f(x) = 5 Anahtarların diziye yerleşimi: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _ 65(?) • 35 ve 65 anahtarları için f(x) fonksiyonundan aynı indis değeri döndü. Çakışma (collision) oldu…
  • 12. Çakışma (Collision) • Hashing işlemi sonucunda farklı anahtarlara sahip iki eleman, aynı dizi indeks değeri üretilebilir. • Eğer en az iki eleman için aynı indeks değeri üretilirse bu duruma çarpışma denir. • Çarpışma istenmeyen bir durumdur. • Çarpışmayı çözmek için iki yöntem vardır: 1. Ayrık zincirleme (Separate chaning) 2. Açık adresleme (Open adressing) I. Doğrusal ölçüm (Linear probing) II. Karesel ölçüm (Quadratic probing) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 13. 1.Ayrık Zincirleme Çözümü • Aynı indis pozisyonuna gelen kayıtlar bağlı listelerle gösterilir. • Çarpışma meydana gelirse ikinci eleman bir bağlı liste ile birinci elemana bağlanır. • Bağlı listeler tek veya çift yönlü olabilir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 14. 1.Ayrık Zincirleme Çözümü (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları 0 1 2 3 4 5 6 7 8 9 0 81 1 64 4 25 36 16 49 9 Anahtarlar: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 hash(anahtar) = anahtar % 10
  • 15. 1.Ayrık Zincirleme Çözümü (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Labda gerçekleştirim yapacağız...
  • 16. 1.Ayrık Zincirleme Çözümü • Avantajları o Basit çakışma çözümü (bağlı liste üzerinde arama) o Hash tablosunun maksimum eleman sayısından daha fazla eleman eklenebilir. • Dezavantajları o Tablonun bazı kısımları hiç kullanılmamaktadır. o Bağlı listeler uzadıkça arama ve silme işlemleri için gereken zaman uzamaktadır. o Dizi haricinde ekstra veri yapısı olan bağlı liste kullanılır. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 17. 2. Açık Adresleme Çözümü Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Açık adresleme çözümünde tüm elemanlar aynı hash tablosunda (dizide) saklanırlar. • Çarpışma meydana geldiğinde alternatif boş indisler denenir. – Denenecek indisler h0(x), h1(x), h2(x), … • Genel mantık aşağıdaki gibidir: – hi(x) = (hash(x) + f(i)) mod TabloBoyutu, with f(0) = 0. – f fonksiyonu is the çakışma (Collision) çözüm stratejisidir.
  • 18. 2. Açık Adresleme Çözümü Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları 1. Doğrusal Ölçüm (Linear Probing) 2. Karesel Ölçüm (Quadratic Probing)
  • 19. Doğrusal Ölçüm (Linear Probing) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Çakışma meydana geldiğinde, doğrusal arama mantığıyla, uygun boş yerler sırayla aranırlar. • f doğrusal bir fonksiyon olup, f(i) = i • Sırayla deneme işlemi gerçekleştirilir. • Hash tablosunun sonuna gelindiyse, başa dönülür. o Döngüsel Kuyruk mantığında veya döngüsel dizi
  • 20. • TabloBoyutu = 15. • 65 elemanını eklemek istiyoruz, ancak 5 numaralı indiste zaten 35 elemanı var. • Çakışma gerçekleşti, ne yapacağız? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _ 65(?) Doğrusal Ölçüm (Linear Probing) (devam…) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 21. • Çözüm: 65 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _    denemeler • Toplam 3 deneme yaptık ve uygun yeri bulduk. Soru: 29’u nereye ekleyeceğiz? Doğrusal Ölçüm (Linear Probing) (devam…) 65 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 22. Doğrusal Ölçüm (Linear Probing) (devam…) • Çözüm: 29 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 65 _ 129 25 2501 _ _ _  deneme • Toplam 1 deneme yaptık ve uygun yeri bulduk. Soru: 16’yı nereye ekleyeceğiz? 29 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 23. Doğrusal Ölçüm (Linear Probing) (devam…) • Çözüm: 16 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29  deneme • Toplam 1 deneme yaptık ve uygun yeri bulduk. Soru: 14’ü nereye ekleyeceğiz? 16 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 24. Doğrusal Ölçüm (Linear Probing) (devam…) • Çözüm: 14 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ 16 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29   deneme deneme • Toplam 2 deneme yaptık ve uygun yeri bulduk. Soru: 99’u nereye ekleyeceğiz? 14 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 25. Doğrusal Ölçüm (Linear Probing) (devam…) • Çözüm: 99 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 47 _ _ 35 36 65 _ 129 25 2501 _ _ 29     denemeler • Toplam 4 deneme yaptık ve uygun yeri bulduk. 99 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 26. Doğrusal Ölçüm (Linear Probing) (devam…) Arama İşlemi • Ekleme işlemindeki benzer algoritma mantığı ile arama işlemi gerçekleştirilir. 1. Aranacak anahtar, hash fonksiyonuna geçirilir ve hash tablo indisi bulunur. 2. İndis değerinde eleman olup olmadığı kontrol edilir. Eleman yoksa, bulma işlemi başarısız demektir. İndiste eleman varsa, elemanın anahtarı ile aranan anahtar karşılaştırılır. i. Eğer anahtarlar eşitse, çıkılır. ii. Anahtarlar eşit değilse, bir sonraki indise geçilir. iii. 2 numaralı adım baştan işletilir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 27. Doğrusal Ölçüm (Linear Probing) (devam…) 0 1 2 3 4 5 6 7 8 9 • H(x) = x % 10 • Ekle 47, 57, 68, 18, 67 • Bul 68 • Bul 10 • Sil 47 • Bul 57 47 57 68 18 67 PROBLEM 47’yi gerçekten silersek 57’yi bulamayız. Nasıl silmeliyiz? Silme İşlemi Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 28. Doğrusal Ölçüm (Linear Probing) (devam…) • Tembel Silme (Lazy Deletion) • Her dizi hücresinin 3 durumu tutulur: – Aktif (Dolu) – Boş (Empty) – Silindi (Deleted) • Arama ve silme işlemlerinde – Sadece (durum = Boş) ise işlemi sonlandır. Silindi durumunda sonraki elemanla devam et. Silme İşlemi Çözüm Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 29. Doğrusal Ölçüm (Linear Probing) (devam…) • Ekle – Hücre: Boş veya Silindi H indise Ekle VE hücre = Aktif – Hücre: Aktif H = (H + 1) mod N • Bul / Ara – Hücre: Boş BULUNAMADI – Hücre: Silindi H = (H + 1) mod N – Hücre: Aktif if key == key in hucre -> BULDU else H = (H + 1) mod N • Sil – Hücre: Aktif; key != key H = (H + 1) mod N – Hücre: Aktif; key == key SİL; hücre = Silindi – Hücre: Silindi H = (H + 1) mod N – Hücre: Boş BULUNAMADI Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 30. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Kümeleme (Clustering) Problemi • Hash tablosu yeterince büyük olduğunda mutlaka boş bir hücre bulunabilir. • Kayıtların yığın şeklinde toplanmasına yani kümelemeye (clustering) neden olabilir. • Arama işlemi genelde küme içerisinde gerçekleşir ve kümeye eklenir. Doğrusal Ölçüm (Linear Probing) (devam…)     
  • 31. Karesel Ölçüm (Quadratic Probing) Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Kümeleme problemini önlemek için geliştirilmiştir. • Genel mantık aşağıdaki gibidir: – hi(x) = (hash(x) + f(i)) mod TabloBoyutu, with f(0) = 0. – f fonksiyonu is the çakışma (Collision) çözüm stratejisidir. – f karesel bir fonksiyon olup, f(i) = i2
  • 32. Karesel Ölçüm (Quadratic Probing) (devam…) • Çözüm: 65 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ _ t t+1 t+4 t+9     denemeler • Toplam 4 deneme yaptık ve uygun yeri bulduk. Soru: 29’u nereye ekleyeceğiz? 65 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 33. • Çözüm: 29 Ekle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 _ _ 47 _ _ 35 36 _ _ 129 25 2501 _ _ 65   t+1 t • Toplam 2 deneme yaptık ve uygun yeri bulduk. 29 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Karesel Ölçüm (Quadratic Probing) (devam…)
  • 34. • Hash fonksiyonların güvenlik ve şifreleme alanında da sıkça kullanılmaktadır. • Hash fonksiyonları tek yönlü (One Way) çalışır. Yani algoritmanın ürettiği sonuçtan tekrar asıl metine dönüşün mümkün değildir. • Bazı örnek hash fonksiyonları: – MD5 (Message Digest 5) – MD6 (Message Digest 6) – SHA-1 (Secure Hashing Algorithm) – HAVAL Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Hash Fonksiyonları ve Güvenlik
  • 35. Veritabanında Kullanıcı Bilgisi Saklanması • Örneğin web sitelerinde kullanıcı bilgilerini veritabanında saklarken SHA kullanılabilir. Web siteleri sizin şifrenizi tek yönlü şifreli tutmak zorundadır. • 160 bitlik SHA algoritması en çok kullanılanıdır. • SHA'nın birçok türevi vardır. • Facebook'un kullandığı 384 bitlik versiyon, 160 bitliğe göre daha güvenlidir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Hash Fonksiyonları ve Güvenlik (devam…)
  • 36. Dosya İndirme Kontrolü • Hash algoritmaların bir diğer kullanım yeri de internetten indirdiğiniz herhangi bir dosyanın tam inip inmediğini tespit etmektir. • Örneğin, web sitemizde 700 MB'lık bir Ubuntu.ISO dosyasının linkini koyduk. • Linkin altına Ubuntu.ISO dosyasının SHA veya MD5 algoritmasından geçirilmiş halini de koyuyoruz. • Ubuntu.ISO dosyasını sitemizden indiren kullanıcı, kendi bilgisayarında indirdiği dosyayı MD5 veya SHA'dan geçiriyor, sitemizdeki ile aynı sonuç çıkarsa, sorunsuz inmiştir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Hash Fonksiyonları ve Güvenlik (devam…)
  • 37. • Hash fonksiyonu • f(x) = N % 19 • Buna göre, her bir anahtarın aranma olasılığının eşit olduğu varsayılırsa, • Başarılı aramalar için ortalama yoklama sayısı kaç olur? • Tüm aramalar için ortalama yoklama sayısı kaç olur? a ) 0, 8, 1, 4 b) 6 , 1, 8, 2 Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Örnek Soru
  • 38. İYİ ÇALIŞMALAR… Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 39. Yararlanılan Kaynaklar • Ders Kitabı: • Data Structures through JAVA, V.V.Muniswamy • Yardımcı Okumalar: • Data Structures and Algorithms in Java, Narashima Karumanchi • Data Structures, Algorithms and Applications in Java, Sartaj Sahni • Algorithms, Robert Sedgewick Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları