24 Mart 2016 Perşembe

Array Hash and Link-List Hash Code Implementation

Bu yazımda sizlere C ile Double hashing uygulama kodlarını vereceğim. Bu kodu inceleyerek Double Hashing ( İki fonksiyonlu hash yapısı ) yöntemini kavrayabilirsiniz.

Hash fonksiyonları veya algoritmaları büyük veri bilgilerine , küçük veriler ile ulaşmaya çalışır. Örneğin her bireyin bir TC kimlik numarası vardır. Kişilere ulaşmak için her seferinde bu 11 haneli numaraları kullandığımızı varsayalım ve bir elin parmaklarını geçmeyecek kadar insanları bir dizide tutalım ( kisi[Tc_No] ).

Bu yöntemle ne kadar çok gereksiz yer tutulacağını hayal edebiliyor musunuz? 1’dan başlayarak en küçük Tc nolu kişiye kadar olan dizideki tüm elemanlar boş durmaktadır. Tüm kişilere hatasız bir şekilde ulaşılmaktadır fakat gereksiz birçok alan tutulmaktadır.

İşte bu sorunu ortadan kaldırmak için kişinin Tc Kimlik Numarasını bir fonksiyona sokuyoruz ve o fonksiyondan 1 ile 10 arasında bir sayı döndürmesini bekliyoruz. ( 10 kişi için ) Örneğin bu fonksiyon tc kimlik numarasının 11 ile bölümünden kalanı döndüren bir fonksiyon olabilir. Bu tabiki bize her kişi için ayrı bir sayı döndürmeyecektir. Çünkü tc kimlik numarasını 11’e böldüğümüzde kalanı aynı olan birçok numara olabilir. Peki o zaman bu 10 kişiyi birbirinden nasıl ayırt ederiz?

Zaten işte hash fonksiyonlarını bulmanın güzelliği de burda ya… Bir hash fonksiyonun doğruluğu yüksek farklılıktaki dataları ne kadar küçük bir alana ve ne kadar farklı şekilde sıkıştırabildiğiyle ölçülür. Mükemmel bir hash fonksiyonu bulmak her zaman o kadar kolay olmayabilir. Seçilen fonksiyon ne kadar güzelse, ne kadar ayırt edici ise o kadar alandan kazanmış olursunuz. Hash mantığının kavranması bakımından array ve link list kodlamalarını da içeren bir C kodu örneğini de yazının sonuna ekliyorum. ( Bundan daha iyi hash fonksiyonları elbette bulunabilir. )

KODLAR