2.3 Hash Table

- HOME -

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 ::

  • struktur penyimpan data
  • fungsi atau prosedur untuk menghasilkan suatu indeks
  • 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.

    PROBLEM 2.3.1 myDictionary
    coba anda buat sebuah program yang fungsinya untuk menghitung berapa banyak kata yang muncul pada suatu kalimat. begini, misalkan input :
    3
    laut adalah taman indah milik dunia. serunai sang bintang laut yang bergema indah, mengalun
    halus di alam semesta. mengembara jauh ke dalam insan penghuni laut, menyatu dengan indahnya
    gemuruh gelombang yang diterpa sang bayu.
    laut
    dan program anda harus mengeluarkan frekuensi kemunculan kata laut dalam kalimat di atas.
    OUTPUT :: 3

    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 )


    Copyright 2004 by Floyd
    Hosted by www.Geocities.ws

    1