- 24 Haz 2016
- 20
- 0
Arkadaşlar basit olarak sizlere hash algoritması nasıl yazılır göstereceğim
1. Hash Algoritmamız : Quadratic Probing
Yani biz aslında algoritmayı her türlü şekillendirebiliriz. bu sizin şifreleme mantığınıza kalmış durum.
kısaca Quadratic Probing hash algoritmasının amacı şifrelenmiş karakterin hash tablosunda kendisine nasıl yer bulacağıdır. mantığımız ise ;
En çok kullanılan fonksiyon
t = h(t)
f(x) = t + x^2
Yeni pozisyon için sırasıyla (t+1^2), (t+2^2), ..., (t+n^2) değerlerine karşılık gelen pozisyonlara bakılır ve ilk boş olana yerleştirilir.
örneğin : 15 16 ve 30 sayısını hash dizisinde mod 15 göre şifreleyip yerlestirelim. dizi boyutu ise 5 olsun....
15 % 15 = 0 oldu.
16 % 15 = 1 oldu.
30 % 15 = 0 oldu.
cıkan sonuclar bizim dizimizdeki indisimizi verir.
indis = 1 ' e 16 sayısı ile doldurulur.
yani tablomuz bu hali alır.
0 16 0 0 0
pekala 15 ve 30 un indisleri aynı o zamanda herhangi birini 0 . indise yerleştiriyoruz.(ben 15 i yerleştirdm) ve tablomuzun yeni hali :
15 16 0 0 0
sıra geldi 30 sayısına indisi 0 ve bir sonraki indisi bakılır dolumu diye oda :
0 + 1^2 = 1 ve maalesef 1. indisimiz 16 sayısı ile dolu şimdi ise bir sonraki indise bakılır yani 2.indise :
0 + 2^2 = 4 ;
4.indis boş ve 30 sayımızı buraya yerleştiriyoruz. Yeni HASH TABLOMUZ ise böyle oldu.
15 16 0 0 30
YANİ ARKADAŞLAR MANTIK BÖYLEDİR.
UMARIM ANLATABİLMİŞTİRİM.:RpS_thumbsup:
KODU İSE AŞAĞI TARAFTA PAYLAŞAĞIM.
1. Hash Algoritmamız : Quadratic Probing
Yani biz aslında algoritmayı her türlü şekillendirebiliriz. bu sizin şifreleme mantığınıza kalmış durum.
kısaca Quadratic Probing hash algoritmasının amacı şifrelenmiş karakterin hash tablosunda kendisine nasıl yer bulacağıdır. mantığımız ise ;
En çok kullanılan fonksiyon
t = h(t)
f(x) = t + x^2
Yeni pozisyon için sırasıyla (t+1^2), (t+2^2), ..., (t+n^2) değerlerine karşılık gelen pozisyonlara bakılır ve ilk boş olana yerleştirilir.
örneğin : 15 16 ve 30 sayısını hash dizisinde mod 15 göre şifreleyip yerlestirelim. dizi boyutu ise 5 olsun....
15 % 15 = 0 oldu.
16 % 15 = 1 oldu.
30 % 15 = 0 oldu.
cıkan sonuclar bizim dizimizdeki indisimizi verir.
indis = 1 ' e 16 sayısı ile doldurulur.
yani tablomuz bu hali alır.
0 16 0 0 0
pekala 15 ve 30 un indisleri aynı o zamanda herhangi birini 0 . indise yerleştiriyoruz.(ben 15 i yerleştirdm) ve tablomuzun yeni hali :
15 16 0 0 0
sıra geldi 30 sayısına indisi 0 ve bir sonraki indisi bakılır dolumu diye oda :
0 + 1^2 = 1 ve maalesef 1. indisimiz 16 sayısı ile dolu şimdi ise bir sonraki indise bakılır yani 2.indise :
0 + 2^2 = 4 ;
4.indis boş ve 30 sayımızı buraya yerleştiriyoruz. Yeni HASH TABLOMUZ ise böyle oldu.
15 16 0 0 30
YANİ ARKADAŞLAR MANTIK BÖYLEDİR.
UMARIM ANLATABİLMİŞTİRİM.:RpS_thumbsup:
KODU İSE AŞAĞI TARAFTA PAYLAŞAĞIM.
#include <stdio.h>
#include <stdlib.h>
#include <Math.h>
int hash(int c){
int a ;
a = c%15 ;
return a ;
}
int yerlestirilmis_dizi[15] ;
**** yerlestir (int yenisayi)
{
int ys = hash(yenisayi);
yerlestirilmis_dizi[2] = 47 ;
yerlestirilmis_dizi[5] = 35 ;
yerlestirilmis_dizi[6] = 36 ;
yerlestirilmis_dizi[9] = 129 ;
yerlestirilmis_dizi[10] = 25 ;
yerlestirilmis_dizi[11] = 2501 ;
yerlestirilmis_dizi[14] = 65 ;
int kontrol = 0 ;
for(int k=0 ; k<15 ; k++)
{
if(yerlestirilmis_dizi[(kontrol+ys)%15]=='\0'){
yerlestirilmis_dizi[(kontrol+ys)%15] = yenisayi;
break;
}
kontrol = pow(k,2) ;
}
for(int i=0 ; i<15 ; i++){
printf("%d ",yerlestirilmis_dizi) ;
}
}
main(){
int sayi;
for(int i=0 ; i<5 ; i++){
printf("Hash Algoritmsina sayi gir") ;
scanf("%d",&sayi) ;
yerlestir(sayi) ;
}
}