Minggu, 26 Desember 2010

ALGORITMA PENCARIAN

  1.PENGERTIAN ALGORITMA PENCARIAN
algoritma pencarian  adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi.

2.MACAM  MACAM ALGORITMA PENCARIAN
    a.      Pencarian Biner (Binary Search)

           Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam
keadaan urut.  Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner
tidak dapat dilakukan.  Dalam kehidupan sehari-hari, sebenarnya kita juga sering
menggunakan pencarian biner.  Misalnya saat ingin mencari suatu kata dalam kamus
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut : mula-mula diambil
posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data tengah dengan rumus
(posisi awal + posisi akhir) / 2.  Kemudian data yang dicari dibandingkan dengan data
tengah.  Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama
dengan posisi tengah –1.  Jika lebih besar, porses dilakukan kembali tetapi posisi awal
dianggap sama dengan posisi tengah + 1.  Demikian seterusnya sampai data tengah
sama dengan yang dicari.


Untuk lebih jelasnya perhatikan contoh berikut.  Misalnya ingin mencari data 17
pada sekumpulan data berikut :

3 9 11 12 15 17 20 23 31 35
awal tengah akhir

Mula-mula dicari data tengah, dengan rumus (0 + 9) / 2 = 4.  Berarti data tengah
adalah data ke-4, yaitu 15.  Data yang dicari, yaitu 17, dibandingkan dengan data tengah   82
ini.  Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama
dengan posisi tengah + 1 atau 5.

3 9 11 12 15 17 20 23 31 35
  awal tengah akhir

Data tengah yang baru didapat dengan rumus (5 + 9) / 2 = 7.  Berarti data tengah
yang baru adalah data ke-7, yaitu 23.  Data yang dicari yaitu 17 dibandingkan dengan
data tenah ini.  Karena 17 < 23, berarti proses dilanjukkan tetapi kali ini posisi akhir
dianggap sama dengan posisi tengah – 1 atau 6.

3 9 11 12 15 17 20 23 31 35
  awal=tengah  akhir

Data tengah yang baru didapat dengan rumus (5 + 6) / 2 = 5.  Berarti data tengah
yang baru adalah data ke-5, yaitu 17.  data yang dicari dibandingkan dengan data tengah
ini dan ternyata sama.  Jadi data ditemukan pada indeks ke-5.
Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar
daripada posisi akhir.  Jika posisi sudah lebih besar daripada posisi akhir berarti data
tidak ditemukan.
Untuk lebih jelasnya perhatikan contoh pencarian data 16 pada data diatas. 
Prosesnya hampir sama dengan pencarian data 17.  Tetapi setelah posisi awal 5 dan
posisi akhir 6, data tidak ditemukan dan 16 < 17, maka posisi akhir menjadi posisi tengah
– 1 atau = 4 sedangkan posisi awal = 5. 

3 9 11 12 15 17 20 23 31 35
 akhir awal

Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang
artinya data tidak ditemukan.
Algoritma pencarian biner dapat dituliskan sebagai berikut :
1 L  ← 0
2 R ← N - 1
3 ketemu ← false
4 Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8   
5 m ← (L + R) / 2   83
6 Jika (Data[m] = x) maka ketemu ← true
7 Jika (x < Data[m]) maka R ← m – 1
8 Jika (x > Data[m]) maka L  ← m + 1
9 Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak
ditemukan

Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian biner.

int BinarySearch(int x)
{
 int L = 0, R = Max-1, m;
 bool ketemu = false;

 while((L <= R) && (!ketemu)) 
 {
  m = (L + R) / 2;
  if(Data[m] == x)
   ketemu = true;
  else if (x < data[m])
   R = m - 1;
  else
   L = m + 1;
 }
 if(ketemu)
  return m;
 else
  return -1;
}

Fungsi Pencarian Data dengan Metode Biner
 

Fungsi diatas akan mengembalikan indeks dari data yang dicari.  Apabila data
tidak ditemukan maka fungsi diatas akan mengembalikan nilai –1.  
Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu apabila
data yang dicari tepat berada di tengah-tengah.  Jumlah pembandingan maksimum yang
dilakukan dengan pencarian biner dapat dicari menggunakan rumus logaritma, yaitu :
C =
2
log(N)

b.Pencarian Berurutan (Sequential Searching)

               Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian
yang paling sederhana.  Pencarian berurutan menggunakan prinsip sebagai berikut : data
yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data
tersebut ditemukan atau tidak ditemukan.
Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai
dengan jumlah data.  Pada setiap pengulangan, dibandingkan data ke-i dengan yang
dicari.  Apabila sama, berarti data telah ditemukan.   Sebaliknya apabila sampai akhir
pengulangan tidak ada data yang sama, berarti data tidak ada.  Pada kasus yang paling
buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula.
Algoritma pencarian berurutan dapat dituliskan sebagai berikut :
1 i ← 0
2 ketemu ← false
3 Selama (tidak ketemu) dan (i <= N) kerjakan baris 4
4 Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i + 1
5 Jika (ketemu) maka i adalah indeks dari data yang dicari, jika tidak data tidak
ditemukan
Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian
sekuensial.

int SequentialSearch(int x)
{
 int i = 0;
 bool ketemu = false;

 while ((!ketemu) && (i < Max)){   81
  if(Data[i] == x)
   ketemu = true;
  else
   i++;
 }
 if(ketemu)
  return i;
 else
  return -1;

Fungsi untuk Mencari Data dengan Metode Sekuensial

Fungsi diatas akan mengembalikan indeks dari data yang dicari.  Apabila data
tidak ditemukan maka fungsi diatas akan mengembalikan nilai –1.  

c.Pencarian List

             Algoritma pencarian list mungkin adalah algoritma pencarian paling dasar. Tujuannya adalah mencari sebuah elemen dari sebuah himpunan dengan suatu kunci (kemungkinan memuat informasi yang terkait dengan kunci). Oleh karena hal ini adalah masalah yang lazim dalam ilmu komputer, kompleksitas komputasi algoritma-algoritma tersebuh telah dipelajri dengan baik. Algoritma paling sederhana adalah pencarian linear, yang secara sederhana melihat setiap elemen dari list secara berurutan. Waktu pengerjaan algoritma ini adalah O(n), dimana n adalah banyaknya elemen dalam list, dan dapat digunakan langsung pada list yang belum diproses. Algoritma pencarian list yang lebih canggih adalah pencarian biner; waktu pengerjaannya adalah O(log n). Waktu pengerjaannya jauh lebih baik daripada pencarian linear untuk list yang memiliki data banyak, tetapi sebelum dilakukan pencarian list terlebih dahulu harus terurut (lihat algoritma pengurutan) dan juga harus dapat diakses secara acak (pengaksesan acak). Pencarian interpolasi adalah lebih baik dari pencarian biner untuk list terurut yang sangat besar dan terdistribusi merata. Algoritma Grover adalah sebuah algoritma kuantum yang menawarkan percepatan kuadrat dibandingkan pencarian linear klasik untuk list tak terurut.
Tabel hash juga digunakan untuk pencarian list, hanya memerlukan waktu yang konstan untuk mencari pada kasus rata-rata, tetapi memiliki overhead ruang yang lebih dan pada kasus terburuk waktu pengerjaannya adalah O(n). Pencarian lain yang berdasarkan struktur data khusus, menggunakan pohon pencarian biner yang self-balancing (self-balancing binary search tree) dan membutuhkan waktu pencarian O(log n); hal ini dapat dipandang sebagai pengembangan dari ide utama pencarian biner untuk memungkinkan penyisipan dan penghapusan yang cepat. Lihat array asosiatif untuk diskusi lanjut dari struktur data pencarian list.
Sebagian besar algoritma pencarian, seperti pencarian linear, pencarian biner dan pohon pencarian biner yang self-balancing, dapat dikembangkan dengan sedikit tambahan costuntuk menemukan semua nilai yang kurang dari atau lebih dari sebuah kunci, operasi ini disebut pencarian jangkauan (range search). Pengecualin ada pada tabel hash, yang tidak dapat melakukan pencarian tersebut secara efisien.

Tidak ada komentar:

Posting Komentar