
hash table merupakan penyimpan data yang memanfaatkan suatu fungsi atau prosedur tertentu untuk menghasilkan suatu nilai. Nilai inilah yang akan digunakan untuk menempatkan data tersebut ke dalam struktur data array, linked list, atau bentuk penyimpanan data yang lain.
intinya, yang diperlukan dalam hash table adalah ::
hash table memang sangat cepat saat kita melakukan insert, delete, atau searching data. namun, dapat dibilang boros memory, karena jika kita tidak pandai - pandai membuat formula indeks-nya, pasti akan terbentuk banyak celah diantara indeks di dalam array dan mungkin juga akan terjadi tumbukan. ummm, saya juga masih belum pandai dalam membuat formula indeksnya ;)
begini, andaikan saja , kita punya sebuah array yang berindeks 1 sampai 100.000yang bertipe string , kemudian kita punya data "YOODA". pertanyaannya : di manakah data tersebut harus saya letakkan ? pada indeks berapa ?
simpan dulu pertanyaannya, sekarang kita beralih ke syarat kedua, yaitu fungsi atau prosedur penghasil nilai. ingat :: fungsi atau prosedur ini digunakan untuk menghasilkan indeks.
saya akan buat fungsi asal - asalan ::
1) function buatIndeks( kt : string ) : integer;
2) var
3) i : integer;
4) k : integer;
5) begin
6) k := 0;
7) for i := 1 to length(kt) do
8) k := (k + (ord(kt[i]))*12) mod 100000;
9) buatIndeks := k;
10) end;
untuk input "YOODA", fungsi di atas akan menghasilkan nilai 4560, jadi, tempat yang cocok untuk data tersebut adalah pada indeks ke-4560. di sinilah kita meletakkannya.
kita pun harus melakukan hal yang sama untuk melakukan searching dan deletion.
untuk deletion, yang pertama kita lakukan adalah memanggil fungsi, kemudian kita cek apakah data yang dimaksud ada di situ, jika ada, segera hapus, jika tidak ada, yach, mungkin anda ingin mengeluarkan pesan "data yang dimaksud tidak ada dalam daftar" ato mungkin hal lain.
begitu pula dengan searching, yach kira - kira sama persis-lah.
suatu saat, anda mungkin akan dihadapkan, pada masalah ::
" lho! pada indeks ke-x kok sudah ditempati, padahal fungsi saya saat ini
menghasilkan nilai x, apa yang harus saya lakukan ? menghapus data yang sudah ada ? ato
gimana ? "
untuk mengatasi masalah ini , bisa digunakan matrix ( ato array 2 dimensi ), anggap saja indeks baris sebagai indeks utama, sedangkan indeks kolom sebagai indeks kedua. maksudnya begini, jika fungsi buatIndeks menghasilkan nilai x , dan ternyata pada indeks utama ( baris ) ke-x sudah ada isinya, maka yang kita lakukan selanjutnya adalah memeriksa indeks kedua ( kolom ), kita iterasi dari 1 sampai jumKolom, jika kita menemukan tempat kosong, segera tempatkan data tersebut di sini.
kalo dituliskan :
xx <-- buatIndeks(datanya)
if matrix[xx][1] <> '' then { apakah kolom pertama sudah ada isinya ? }
for i := 1 to jumKolom do
if matrix[xx][i] = '' then { kolom ini kosong }
matrix[xx][i] <-- datanya
tapi, ada juga yang menggunakan linked list. ...... ^_^ maaf, kalo linked list, saya masih belum bisa. kalo masih penasaran, cari aja di google ato yahoo, gitu, pasti ada.
INPUT
baris pertama adalah jumlah baris kata ( 1 <= N <= 200 )
dari baris ke-2 sampai baris ke-(N+1) adalah kalimat - kalimatnya (panjang kalimat <= 255 character )
baris selanjutnya adalah kata yang dicari frekuensinya
OUTPUT
frekuensi kemunculan ( sebatas longint )