Hashing (Çırpılama).

Slides:



Advertisements
Benzer bir sunumlar
Steganografi.
Advertisements

Tabloda yer alan mavi alanlar doldurulması zorunlu alanlardır ve doldurulmaması halinde liste sisteme aktarılamamaktadır. Listeye herhangi bir not eklenmemeli,
STRİNG FONKSİYONLARI.
VERİ TABANI VE YÖNETİM SİSTEMLERİ
Veri Tabanı Tasarlama İlk kuralımız, olabildiğince bilgileri parçalamaktır.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
KÜME DÜNYASINA GİDELİM
Göstericiler (Pointers)
Öğr.Gör. Dr. Şirin KARADENİZ
Yığın ve Kuyruk.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Diziler.
Hashing Çırpı, kırpma, özetleme, adresleme
İkili Ağaçlar İkili Arama Ağaçları
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler(Arrays).
Nesneye Yönelik Programlama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
VERİ TABANI VE YÖNETİM SİSTEMLERİ  Birincil Anahtar Türleri  Access Veri Tabanında Bulunan İlişkiler  İlişkileri Tanımlama Bir – Çok İlişkisi Çok –
İndex Yapıları.
Veri Yapıları Veri, her türlü değer demektir. Veri yapılarının tasarlanma ve oluşturulma amacı; “verinin işlenmesini kolaylaştırmak ve bu işlemi daha verimli.
Nesneye Yönelik Programlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
KÜMELER GEZEGENİNE HOŞ GELDİNİZ.
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
PROLOG PROGRAMLAMA DİLİNDE
FONKSİYONLAR.
FONKSİYONLAR f : A B.
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
İŞLEM ve MODÜLER ARİTMETİK.
NESNEYE YÖNELİK PROGRAMLAMA
C PROGRAMLAMA DİZİLER (ARRAYS).
Diziler (Arrays).
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
DİZİLER Arrays.
FONKSİYON TARİHİ FONKSİYON
KARTEZYEN ÇARPIM Sıralı İkili İki Kümenin Kartezyen Çarpımı
İlk Değer Alma Sırası İlk Değer Alma Sırası Nesnelere ait global alanlara başlangıç değerleri hemen verilir; üstelik, yapılandırıcılardan (constructor)
İŞLEM VE MODÜLER ARİTMETİK.
BAĞINTI & FONKSİYONLAR.
FONKSİYONLAR.
Veritabanı Kavramları
Temel Bilgi Teknolojileri Yrd. Doç. Dr. Doğan Aydoğan.
Veri yapıları Hafta3 Dizi Yapıları.
SİMPLEKS METOT Müh. Ekonomisi.
Simpleks Yöntemi İle Doğrusal Modellerin Çözümü
KUYRUK (QUEUE).
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi.
PHP ve HTML İnternet Programlama - 2. Koşullu İfadeler ve Döngüler Döngü ya da çevirim diyebileceğimiz, belli şart ve koşullarda istenilen değerleri yapabilmemizi.
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
Bellek Yönetimi(Memory management)
Ali SANCI-Çorum Anadolu Lisesi
Algoritmalar II Ders 1: Alan zaman takası yöntemi.
C Sharp 9. hafta - dIZILER.
Bölüm 10: Kayıtlar – Records (structs)
C++ Programming:. Program Design Including
YAPISAL PROGRAMLAMA Hafta-7
YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Hashing (Çırpılama)

Pek çok uygulama sözlük tarzı EKLEME, ÇIKARMA ve ARAMA gibi işlemleri gerçekleştirecek veri yapılarına ihtiyaç duyarlar. Örneğin bir derleyici, program içerisindeki tanımlayıcıları (identifier) bir tabloda tutarak yönetir. Veri tabanı uygulamaları

Hash tablosu, veriye bir anahtar (key) yardımı ile erişilen basit bir dizi çalışmasıdır.

Anahtar bir index üretmek için kullanılır ve bu indeks ile dizideki veriye ulaşılır

Anahtar tekildir yani bir başka kayıtta aynı anahtar olamaz. Ancak veri aynı olabilir.

TC Kimlik numaralarımız bunun için iyi bir örnektir. Herkesin sadece kendine ait bir kimlik numarası vardır. Ancak aynı isme sahip yüzlerce kişi olması mümkündür. Burada TC Kimlik numarası anahtardır; kişi bilgileri ise, bu anahtara ait veridir.

Bir hash fonksiyonu basit hesaplanabilmeli ve birbirinden farklı anahtar değerlerini farklı indislere yerleştirmelidir.

Uygulamada mümkün olduğunca her farklı anahtarı farklı indise yerleştirecek ideal bir hash fonksiyonu bulunmaya çalışılır.

İbrahim 1 Müberra 2 Ali 3 Melda 4 Hasan 5 6 Elif 7 8 Mustafa 9 10 11 Zeynep

hash(x)= X mod(TabloMaxElemanSayısı) Elemanların tamsayı olması halinde hash fonksiyonunu elde etmek kolaydır. Elemanları sayı olan bir tablo için hash fonksiyonu aşağıdaki gibi tanımlanabilir: hash(x)= X mod(TabloMaxElemanSayısı) Tablo boyutu

{85, 73, 20, 45, 11, 69 } elemanları için hash tablosu Hash(x)=xMod(11) 11 1 45 2 3 69 4 5 6 7 73 8 85 9 20 10 {85, 73, 20, 45, 11, 69 } elemanları için hash tablosu

Hash fonksiyonunun iki anahtarı aynı hücreye yerleştirmesi durumuna çakışma (collision) denir. Çakışmalar hash uygulamalarında istenmeyen bir durumdur ve giderilmelidir. Bunun için: Açık Çırpılama(Ayrık Zincirleme) Açık Adresleme (Kapalı Çırpılama) olmak üzere iki yöntem kullanılmaktadır.

Hashing yöntemleri Açık Çırpılama (Ayrık Zincirleme) Kapalı Çırpılama (Açık Adresleme)

Açık Çırpılama (Ayrık Zincirleme) Bu yöntemde aynı değere hash edilen elemanların bir listesi tutulur. Temel olarak tablodaki her bir bölümü liste olarak tanıtarak bağlı liste kullanılmaktadır. Bir veri eklenmek istendiğinde, hash fonksiyonu bu veri için daha önceki bir verinin indeksini üretiyorsa, yani çatışma oluyorsa tablodaki her indeksin bir listenin başı olduğunu varsayarak aynı özellikteki elemanlar aynı listeye eklenir. Her eleman listenin başına eklenirse ekleme maliyeti sabit zaman maliyetine indirgenir.

Yöntemin çalışması incelendiğinde bir eleman aranmak istendiğinde önce index bulunacaktır. İndex bulunduktan sonra bu andan itibaren bir bağlı liste ile ilgiliyiz ve arayacağımız elemanı bağlı listenin arama fonksiyonu ile bulmamız söz konusudur. Bu ise lineer bir arama olacaktır. Böylece genel arama zaman maliyetimiz bu noktadan itibaren sabit zaman maliyetinden uzaklaşmaya başlayacaktır.

En kötü durumda bütün elemanların index değeri aynı ise elemanların hepsi aynı noktada birikecek ve n elemanlı bağlı bir listede arama yapıyormuş gibi olunacak ve zaman maliyetimiz O(n) olacaktır.Ayrıca bağlı liste kullanımından dolayı göstergeçlerle (pointerlerle) çalışmadan dolayı programın implementasyonuda zorlaşmaktadır. Çünkü malloc() ve free() işlemleri sabit zaman maliyetli olarak kabul edilse de gerçekte çalışma zamanını olumsuz olarak etkilemektedir. Genel olarak bir arama işlemi gerçekleştirmenin maliyeti, çırpı fonksiyonun hesaplanması için gereken sabit zaman ve listede ilerlemek için gereken sürelerin toplamıdır.

Böyle bir durumun ortaya çıkmaması için yani hash tablosunda kötü bir dağılım oluşmaması için tablo Eleman sayısı değerinin iyi seçilmesi gerekir. Eşit dağılım (uniform hash) için, tablo boyutu olarak asal sayı tercih edilmelidir. Böylece tablo boyuna bağlı yığılmaların önüne geçilmiş olunur. Bu değerin asal sayı seçilmesi durumunda daha az çakışma oluşacaktır.

Kapalı Çırpılama (Açık Adresleme) Kapalı Hashing (Çırpılama) yönteminde bir çakışma oluştuğu zaman, boş bir hücre bulunana kadar başka hücreler denenir. Hash tablosunun her satırında bir eleman vardır yada bu satır boştur. Bir eleman aranacağı zaman belirlenen bir fonksiyonla sınamalar yapılır ve boş bir satıra rastlandığında çıkılır. Böyle bir elemanın olmadığına karar verilir.

Ayrık çırpılamadan farklı olarak elemanlar yerleştirilirken bir listeye zincir biçiminde değil de , fonksiyona göre boş bir yeri bulunca buraya yerleştirilir. Böylece ayrık çırpılamada oluşan dezavantajların da önüne geçilmiş olunur. Çünkü burada liste veri yapısı gibi yeni yapı oluşturulmamaktadır.

( hi(x)= (hash(x)+F(i)) mod(tabloMaxElemanSayısı) h0(),h1(x),h2(x) F fonksiyonu çakışma çözme yöntemidir ve başlangıç durumunda F(0)= 0 dır.

Doğrusal Sınama Yöntemi Hash fonksiyonu ile tabloya bir değer eklenirken çakışma oluşuyorsa eleman tabloda birer hücre aşağı inerek bulunan ilk boş hücreye yerleştirilir.

Doğrusal sınama 44 86 57 45 54 31 57 72 45 35 44 86 h(x) = x mod 13 31 54 35 57 72 45 44 86 44 86 57 45 54 31 57 72 45 35 44 86 h(x) = x mod 13

Teşekkürler