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

Slides:



Advertisements
Benzer bir sunumlar
8. SINIF 3. ÜNİTE BİLGİ YARIŞMASI
Advertisements

GİRİŞ BÖLÜM:1-2 VERİ ANALİZİ YL.
Değişkenler ve bellek Değişkenler
NOKTA, DOĞRU, DOĞRU PARÇASI, IŞIN, DÜZLEMDEKİ DOĞRULAR
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
BPR152 ALGORİTMA VE PROGRAMLAMA - II
KÜMELER.
Prof. Dr. Eşref ADALI Yrd. Doç. Dr. Şule Gündüz Öğüdücü SürümA
Zamana Bağımlı Olmayan Doğrusal (LTI) Sistemlerin Frekans Tepkileri
AVL-Ağaçları (Trees).
B+-Ağaçları.
Silme Anahtar hedefi silmek için, x yaprağında buluruz ve sonra sileriz. Dikkat edilmesi gereken iki durum vardır. (1) Hedef bazı iç düğümlerde bir anahtar.
İkili Ağaçlar İkili Arama Ağaçları
9. ADİ DİFERANSİYEL DENKLEMLERİN SAYISAL ÇÖZÜMLERİ
Algoritmalar DERS 7 Dengeli Arama Ağaçları Kırmızı-siyah ağaçlar
Algoritmalar En kısa yollar I En kısa yolların özellikleri
İçerik Ön Tanımlar En Kısa Yol Problemi Yol, Cevrim(çember)
KIR ÇİÇEKLERİM’ E RakamlarImIz Akhisar Koleji 1/A.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
YMT 222 SAYISAL ANALİZ (Bölüm 6a)
MATEMATİKSEL PROGRAMLAMA
Lokal Arama Algoritmaları
FONKSİYONLAR ve GRAFİKLER
İkili Arama Ağaçları (Binary Search Trees) BST
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
Algoritmalar Ders 14 En Kısa Yollar II Bellman-Ford algoritması
HAZIRLAYAN:SAVAŞ TURAN AKKOYUNLU İLKÖĞRETİM OKULU 2/D SINIFI
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Özyineli Sıralama Algoritmaları
VERİ TABANI ve YÖNETİMİ
ÖRNEKLEM VE ÖRNEKLEME Dr.A.Tevfik SÜNTER.
Çizge Algoritmaları.
ARALARINDA ASAL SAYILAR
1/20 BÖLME İŞLEMİ A B C D : 4 işleminde, bölüm kaçtır?
Binary Ağaçlar (Ekleme/Silme Örnekleri)
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
Hatalar için niceliksel hesaplar
Formül Hazırlama ve Kullanma
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
Tam sayılarda bölme ve çarpma işlemi
HABTEKUS' HABTEKUS'08 3.
BTP102 VERİTABANI YÖNETİM SİSTEMLERİ 1
Microsoft EXCEL (2) Kapsam Kopyalama, Yapıştırma Açıklama Ekleme Satır ve Sütunların Boyutlandırılması Bitişik Hücrelere Dayanarak Otomatik Veri Girme.
DERS 11 KISITLAMALI MAKSİMUM POBLEMLERİ
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Nesne.
Akış Kontrol Mekanizmaları
Chapter 6: Using Arrays.
Matematik Bütün Konular Slayt.
Ek-2 Örnekler.
İKİNCİ DERECEDEN FONKSİYONLAR ve GRAFİKLER
Diferansiyel Denklemler
FONKSİYONLAR f : A B.
VERİ İŞLEME VERİ İŞLEME-4.
Chapter 11: Exception Handling
İSMİN HALLERİ.
Toplama Yapalım Hikmet Sırma 1-A sınıfı.
JAVA’DA DİZİLER Dr.Galip AYDIN.
ÇOK DEĞİŞKENLİ FONKSİYONLARDA
Eğer bir X t zaman serisi, E(X t ), ve X t ile X t+s arasındaki anakitle kovaryansı t’den bağımsız ise durağandır. 1 DURAĞAN SÜREÇ.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Yard. Doç. Dr. Mustafa Akkol
BTP102 VERİTABANI YÖNETİM SİSTEMLERİ 1
SOSYAL BİLGİLER ÖĞRETMENLİĞİ BİLGİSAYAR 2 NOT Sum (Topla) Fonksiyonu Belirtilen hücreler arasındaki sayıların toplamını alır. =SUM (E2;E11) E2 hücresinden.
AVL Trees / Slide 1 Silme * Anahtar hedefi silmek için, x yaprağında buluruz ve sonra sileriz. * Dikkat edilmesi gereken iki durum vardır. (1) Hedef bazi.
Hashing (Çırpılama).
Chapter 7 Space and Time Tradeoffs Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

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

Hash tablosu Aşağıdaki operasyonları destekler Bul Ekle 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: Minimum ve Maksimum Halef ve selef Belirli bir aralıktaki verinin listelenmesi Verinin sıralanmış olarak listelenmesi

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. Eğer kümede k anahtarlı eleman olmazsa, T[k]=NULL

Realistik olmayan Çözüm Ekle, sil ve bul işlemlerinin hepsi O(1)’dir (En kötü durum) Problem: 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 108 ,olacak, ancak biz sadece 32000 öğrenciye sahibiz.

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

Ö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 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. k anahtarının bir elemanı bölme h(k)’ ya hash eder. h(k) , k anahtarının hash değeridir

Hashing Problem: collision (çarpışma - ihtilaf) İki anahtar aynı bölmeyi hash edebilir İ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 hesaplanması hızlı olan ve çarpışmaların sayısını minimize edebilen. Meydana geldikleri zaman çarpışmaları çözebilecek bir metot geliştir.

Hash Fonksiyonu Bölme metodu 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=2p, öyleyse h(k) k nın en düşük p bitine karşılık gelir, hash bağlı olmaz. 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 örnek 2000 sayı tutacak bir hash tablosu, ve herbir hücrede ortalama olarak 3 eleman tutulacaksa m=701 olarak seçilebilir.

Hash Fonsiyonu... Anahtarlar string olabilirmi? Hash fonksiyonlarının çoğu anahtarların doğal sayılar olduğunu varsayar. 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. 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.

Hash Fonksiyonu... Metot 2 Metot 3 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. 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 Hesapla Anahtardaki bütün karakterleri içerir ve düzgün bir dağılım olması beklenir. a,…,z ve boşluk 272

Ç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

Ayrı Zincirleme K anahtarını ekleme K anahtarını silmek için Hangi listeyi gezmeyi belirlemek için h(K) yi hesapla Eğer T[h(K)] null pointer içeriyorsa, sadece K değerini içerecek olan bağlantılı listeye bu girişi ilklendir Eğer T[h(K)] dolu bir liste ise, bu listenin en başına K yı ekleriz. K 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.

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 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? K değerini daha sonra nasıl arayacağız? Açık adreslemedeki çarpışmaları çözmek için üç bilinen yöntem vardır. Doğrusal araştırma - Linear probing Karesel araştırma - Quadratic probing Çift hashing - Double hashing

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

Doğrusal Araştırma f(i) =i Ekleme: Hücreler ard arda araştırılır. (with wraparound) hi(K) = (hash(K) + i) mod m Ekleme: 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] boşsa, K yı ekle ve dur.. Eğer K yı ekleyecek boş bir yer bulunamazsa, tablo dolu demektir ve hata mesajı verilir.

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]

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

Karesel Araştırma 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, 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]

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(k1)=30, h(k2)=29 K1 için araştırma sırası: 30,30+1, 30+4, 30+9 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 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

Ç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) Örnek hash2(K) = R - (K mod R), R bir asal sayıdır ve m den küçüktür

Ç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 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]

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. Ö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. Praktikte daha hızlı ve basittir.

Açık Adreslemede Silme Gerçek silme açık adresleme hash tablolarında gerçekleştirilemez. 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)