Abstrak – Makalah ini berisi tentang yang tersebar, berarti data dapat terdistribusi secara
penggunaan Prinsip Sarang Merpati seragam bentrokan dapat dicegah. Sehingga
(Pigeonhole Principle) untuk membuat fungsi kompleksitas waktu model Hash dapat mencapai
hash yang ideal. fungsi hash dan tabel hash O(1), di mana kompleksitas tersebut tidak ditemukan
sering digunakan untuk penyimpanan dalam pada struktur model lain.
database. Penggunaan fungsi hash bisa
dimaksimalkan jika tidak ada bentrokan 2.1 Membuat Tabel Hash dengan Fungsi Hash
(collision), makalah ini secara tidak berbelit-
belit akan menjelaskan topik tersebut.
1) Dengan cara menggunakan sisa pembagian
Kata Kunci: Prinsip Sarang Merpati, Hash, Jumlah lokasi memori yang tersedia dihitung,
Perfect, Bentrokan kemudian jumlah tersebut digunakan sebagai
pembagi untuk membagi nilai yang asli dan
menghasilkan sisa. Sisa tersebut adalah nilai
1. PENDAHULUAN hashnya. Secara umum, rumusnya adalah
h(k)= k mod m
Dunia dewasa ini sangat bergantung pada Dalam hal ini m adalah jumlah lokasi memori yang
komputer. Data yang akan diolah oleh komputer tersedia pada array. Contoh algoritmanya
bertambah banyak seiring dengan naiknya 1 unsigned add_hash ( void *key, int len )
kecepatan clock komputer. Data yang disimpan 2{
3 unsigned char *p = key;
di dalam memori komputer di dalam memori
4 unsigned h = 0;
komputer perlu ditempatkan dalam suatu cara 5 int i;
yang membuat pencariannya dilakukan dengan 6
cepat. Fungsi hash adalah salah satu solusi 7 for ( i = 0; i < len; i++ )
cerdas untuk mengatasi masalah tersebut. 8 h += p[i];
9
Namun demikian, sulit untuk membuat fungsi 10 return h;
hash yang benar-benar sempurna dan ideal, 11 }
karena cenderung akan terjadi collision. Dengan Fungsi hash tersebut menempatkan record dengan
kunci k pada suatu lokasi memori yang beralamat h(k).
Prinsip Sarang Burung dapat dihitung
Hasilnya ditempatkan pada tabel yang disebut tabel
sedemikian sehingga dapat dibuat ‘Perfect hash.
Hash’, hash yang ideal dan mangkus. Metode ini sering menghasilkan nilai hash yang
sama dari dua atau lebih nilai aslinya atau disebut
2. FUNGSI HASH dengan bentrokan (collision).
5)Shift-Add-XOR hash
1 unsigned jsw_hash ( void *key, int len )
Walaupun algortima inis angat efektif untuk 2{
data yang kecil, untuk data yang besar tidak 3 unsigned char *p = key;
begitu efektif 4 unsigned h = 16777551;
5 int i;
1 unsigned sax_hash ( void *key, int len ) 6
2{ 7 for ( i = 0; i < len; i++ )
3 unsigned char *p = key; 8 h = ( h << 1 | h >> 31 ) ^ tab[p[i]];
4 unsigned h = 0; 9
5 int i; 10 return h;
6 11 }
7 for ( i = 0; i < len; i++ )
8 h ^= ( h << 5 ) + ( h >> 2 ) + p[i];
Algoritma ini dikenal sebagai algoritma terbaik dalam
9
hal efektifitas waktu dalam data yang besar. Algoritma
10 return h;
ini sangat disarankan
22
23 a = b = 0x9e3779b9;
24
9)ELF hash 25 while ( len >= 12 ) {
26 a += ( k[0] + ( (unsigned)k[1] << 8 )
ELF function sebenarnya lebih dipakai untuk 27 + ( (unsigned)k[2] << 16 )
testing database karena kemampuannya untuk 28 + ( (unsigned)k[3] << 24 ) );
meng-kover kemungkinan-kemungkinan input 29 b += ( k[4] + ( (unsigned)k[5] << 8 )
untuk menghindari error. 30 + ( (unsigned)k[6] << 16 )
31 + ( (unsigned)k[7] << 24 ) );
1 unsigned elf_hash ( void *key, int len ) 32 c += ( k[8] + ( (unsigned)k[9] << 8 )
2{ 33 + ( (unsigned)k[10] << 16 )
3 unsigned char *p = key; 34 + ( (unsigned)k[11] << 24 ) );
4 unsigned h = 0, g; 35
5 int i; 36 mix ( a, b, c );
6 37
7 for ( i = 0; i < len; i++ ) { 38 k += 12;
8 h = ( h << 4 ) + p[i]; 39 len -= 12;
9 g = h & 0xf0000000L; 40 }
10 41
11 if ( g != 0 ) 42 c += length;
12 h ^= g >> 24; 43
13 44 switch ( len ) {
14 h &= ~g; 45 case 11: c += ( (unsigned)k[10] << 24 );
15 } 46 case 10: c += ( (unsigned)k[9] << 16 );
16 47 case 9 : c += ( (unsigned)k[8] << 8 );
17 return h; 48 /* First byte of c reserved for length */
18 } 49 case 8 : b += ( (unsigned)k[7] << 24 );
50 case 7 : b += ( (unsigned)k[6] << 16 );
51 case 6 : b += ( (unsigned)k[5] << 8 );
52 case 5 : b += k[4];
53 case 4 : a += ( (unsigned)k[3] << 24 );
10)Jenkins hash
54 case 3 : a += ( (unsigned)k[2] << 16 );
55 case 2 : a += ( (unsigned)k[1] << 8 );
Teknik hash dengan cara Jenkins sudah teruji 56 case 1 : a += k[0];
dan terbukti, namun kelemahannya adalah 57 }
waktu eksekusinya 58
59 mix ( a, b, c );
1 #define hashsize(n) ( 1U << (n) ) 60
2 #define hashmask(n) ( hashsize ( n ) - 1 ) 61 return c;
3 62 }
4 #define mix(a,b,c) \
5{\
6 a -= b; a -= c; a ^= ( c >> 13 ); \
7 b -= c; b -= a; b ^= ( a << 8 ); \
8 c -= a; c -= b; c ^= ( b >> 13 ); \
9 a -= b; a -= c; a ^= ( c >> 12 ); \ 2.2. Perfect Hash
10 b -= c; b -= a; b ^= ( a << 16 ); \
11 c -= a; c -= b; c ^= ( b >> 5 ); \ Suatu perfect hash dapat dibuat jika angka dan struktur
12 a -= b; a -= c; a ^= ( c >> 3 ); \ dari kunci enkripsi dari hash tersebut diketahui.
13 b -= c; b -= a; b ^= ( a << 10 ); \
14 c -= a; c -= b; c ^= ( b >> 15 ); \
15 }
16
17 unsigned jen_hash ( unsigned char *k,
unsigned length, unsigned initval )
18 {
19 unsigned a, b;
20 unsigned c = initval;
21 unsigned len = length;
Teorema ini ternyata dapat menjelaskan fakta sehari-
hari yang bisa saja tidak terduga, misalnya:
Fungsi hash yang ideal berbentuk injektif, yaitu 3. HASIL DAN PEMBAHASAN
semua input dipetakan ke dalam nilai hash yang
berbeda-beda. Dengan cara tersebut, pencarian Untuk membuat perfect hash kita perlu menghindari
dapat dilakukan dengan cepat tanpa mengulangi adanya bentrokan. Suatu bentrokan terjadi jika dalam
pencarian lagi fungsi hash tersebut ada 2 kunci hash yang mempunyai
hasil yang sama. Untuk itulah perlu dipakai Prinsip
Semua fungsi hash yang bersifat injektif dan Sarang Burung,
mempunyai range dari bilangan buluat antara 0
dan n-1, dimana n adalah jumlah dari input yang Prinsip Sarang Burung membuktikan bahwa tidak ada
dapat diterima, disebut perfect hash. Jadi, selain
algoritma hash yang dapat meng-hash setiap kunci
hasilnya dapat langsung ditemukan, suatu
perfect hash juga mempunyai tabel hash yang hash ke dalam indeks-indeks yang unik jika
kompak tanpa slot yang kosong. kemungkinan kuncinya lebih besar daripada ukuran
tabel hash tersebut.
2.3. Prinsip Sarang Merpati
Contohnya studi kasus dengan persoalan perkalian 10
Prinsip Sarang Merpati menyebutkan bahwa, bilangan yang dimana bilangan ke-4 dan ke-5nya
jika kita punya dua buah bilangan cacah n dan berbeda. Fungsi perfect hashnya:
m, dengan n > m, kemudian sebanyak n buah
burung ditaruh di m buah sarangnya, maka 1 unsigned hash ( unsigned pid )
setidaknya ada satu sarang yang berisi lebih dari 2{
satu burung. 3 return pid / 1000 % 100;
4}
4. KESIMPULAN
DAFTAR REFERENSI