12/23/2010

Makalah Praktek Alpro2


MAKALAH
ALGORITMA PENCARIAN
(diajukan untuk memenuhi salah satu tugas  praktikumAlgoritma dan Pemrograman 2)




oleh :
Widhi Anugrah Sukma Gemilang (0902023)
















PROGRAM STUDI PENDIDIKAN ILMU KOMPUTER
FAKULTAS PENDIDIKAN MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PENDIDIKAN INDONESIA
2010

KATA PENGANTAR

            Assalamu’alaikum Wr. Wb.
            Puji dan syukur kehadirat Allah SWT yang telah melimpahkan nikmat dan karunianya kepada kita semua, karena hanya dengan kekuasaan-Nya penulis dapat menyelesaikan makalah penelitian ini. Shalawat dan salam kepada Rasulullah SAW atas segala jerih payah beliau dalam mendakwahkan ajaran Islam sehingga mampu mengeluarkan manusia dari kegelapan menuju cahaya din al Islam.
Adapun maksud dan tujuan dari penulisan ini adalah untuk memenuhi sebagian tugas mata kuliah praktikum Alpro 2. Dalam penulisannya sangat diharapkan makalah ini bisa menjadi wacana yang bermanfaat dalam pengembangan ilmu pengetahuan khususnya untuk mata kuliah praktikum Alpro 2. Penyusunan makalah juga ini tidak terlepas dari bantuan berbagai pihak yang memberikan bimbingan berupa konsep, data, materi dan sebagainya.
Semoga amal perbuatannya mendapat imbalan yang setimpal dari Allah SWT.
Kesempurnaan hanya milik Allah, oleh sebab itu penulis mengharapkan kritik dan saran yang membangun demi perbaikan makalah ini. penulis pun berharap makalah ini berkenan dan bermanfaat baik bagi penulis maupun pembaca pada umumnya.
            Wassalamu’alaikum Wr. Wb.


Bandung,  November 2010


Penulis


BAB I
PENDAHULUAN

1.1.         Latar Belakang

Pada suatu data seringkali dibutuhkan pembacaan kembali informasi (retrieval information) dengan cara searching. Searching adalah pencarian data dengan menelusuri tempat pencarian
data tersebut. Tempat pencarian data tersebut dapat berupa array dalam memori, bisa juga pada file pada external storage.Bila jumlah data sudah demikian besar, dibutuhkan suatu metode untuk mendapatkan data yang dibutuhkan. Beberapa metode pengorganisasian data telah membuat proses pencarian data menjadi lebih efisien.

1.2.         Rumusan Masalah

Berdasarkan uraian pada latar belakang masalah diatas, maka permasalahan yang diteliti dapat dirumuskan:
1.      Apa pengertian searching/pencarian?
2.      Apa saja jenis-jenis algoritma pencarian?
3.      Bagaimana algoritma dan contoh programnya?

1.3.         Tujuan

Berdasarkan rumusan masalah diatas, makan tujuan disusunnya makalah ini yaitu:
1.      Untuk mengetahui pengertian searching/pencarian.
2.      Untuk mengetahui apa saja jenis-jenis algoritma pencarian.
3.      Untuk mengetahui algoritma dan contoh program searching.

1.4.         Manfaat Penulisan

Manfaat penulisan makalah ini yaitu agar dapat memberi pengetahuan lebih mengenai searching,agar menjadi bahan pembelajaran bagi pembaca maupun penulis.


BAB II
ISI

2.1.           Pengertian Searching

Pencarian (searching) merupakan proses fundamental dalam pengelolaan data. Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan data yang bertipe sama (baik bertipe dasar atau bertipe bentukan). Search algoritma adalah algoritm,a yang menerima argument a dan mencoba untuk mencari record yang mana key-nya adalah Algoritma bisa mengembalikan nilai record, atau pointer ke record. Record sendiri adalah tipe data yang terdiri atas kumpulan variabel yang dapat berbeda tipenya. Setiap variabel disebut field. Sequensial Search (penelusuran sequensial) yaitu proses mengunjungi melalui suatu pohon dengan cara setiap simpul di kunjungi hanya satu kali yang disebut tree transversal / kunjungan pohon. Sedangkan Binary Search adalah penelusuran pohon biner dimana data yang dimasukkan atau yang suadah ada diurutkan terlebih dahulu.
Data dapat di simpan secara temporer dalam memori utama atau di simpan secara permanen di dalam memori sekunder (tape atau disk). Di dalam memori utama, struktur penyimpanan data yang umum adalah berupa larik atau tabel (array), sedangkan di dalam memori sekunder berupa arsip (file). Aktivitas yang berkaitan dengan pengolahan data ini sering di dahului dengan proses pencarian. Sebagai contoh, untuk mengubah (update) data tertentu, langkah pertama yang harus dilakukan adalah mencari keberadaaan data tersebut di dalam kumpulannya. Aktivitas yang awal sama juga dilakukan pada proses penambahan (insert) datayang baru. Proses penambahan data dimulai dengan mencari apakah data yang ditambahkan sudah terdapat di dalam kumpulan. Jika sudah dan mengasumsikan tidak boleh ada duplikasi data maka data tersebut tidak perlu ditambahkan, tetapi jika belum ada, maka tambahkan.
Algoritma pencarian yang akan dibicarakan dimulai dengan algoritma pencarian yang paling sederhana yaitu pencarian beruntun atau Sequential Search sampai pada algoritma pencarian yang lebih maju yaitu pencarian bagi dua (Binary Search).

2.2.           Jenis-jenis Searching dan Algoritmanya

1.    Sequential search
Disebut juga sebagai metode pencarian urut adalah metode  pencarian yang paling mudah.  Adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu.  Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk pencarian data sangat sebentar (minimal). Sedangkan kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan untuk pencarian data sangat lama (maksimal).Sequential search memiliki proses sebagai berikut:
ü Tentukan banyaknya data yang akan di olah, misal banyak data adalah N.
ü Tentukan data apa yang akan dicari, misal data yang akan dicari adalah C.
ü Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan, misal counternya adalah K.
ü Inisialisasikan K =0
ü Lakukanlah perulangan sebanyak N kali
ü Dalam tiap proses perulangan tersebut periksalah apakah data yang sedangpakah data ke tesebut cisal oses sebagai berikut:
ü ketemu.
ü n yang paling mudah. ebih baik kita mulai dari metode yang diolah sama dengan data yang dicari.
ü Jika ternyata sama K=K+1
ü Jika tidak, lanjutkan proses perulangan .
ü Setelah proses perulangan berhenti, periksalah nilai K.
ü Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan tampilkan nilai K ke layer sebagai jumlah data yang ditemukan.
ü Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan tampilkan ke layar bahwa data tidak ditemukan
ü Proses selesai.



Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.          
Contoh Kasus dan Programnya       
#include
int main()
{
      //deklarasi variabel
      int A[10],index[10], i,j,k;
      //proses penginputan data
      for(i=0;i<10;i++)
      {
            printf("Data ke-%d:",i+1);
            scanf("%d",&A[i]);
      }
//memasukkan data yang akan dicari ke dalam K
      printf("Masukkan data yang akan anda cari:");
      scanf("%d",&k);
      //proses pencarian data
      j=0;
      for (i=0;i<10;i++)
      {
            if(A[i]==k)
            {
                  index[j]=i;
                  j++;
            }
      }
      //jika data ditemukan dalam array
      if (j>0)
      {
            printf("Data %d yang dicari ada %d buah\n",k,j);
            printf("Data tersebut terdapat dalam index ke :");
            for(i=0;i
            {
                  printf(" %d ",index[i]);
            }
            printf("\n");
      }
      //jika tidak ditemukan
      else
      {
            printf("Data tidak ditemukan dalam array\n");
      }
getch();
return 1;
}



























GAMBARAN KERJA
Pada program diatas jumlah data yang akan diolah berjumlah 10 data dan disimpan kedalam array A[10] yang bejenis integer, array index[10] digunakan untuk mencatat index pada array A dimana data ditemukan daya tampung array sama dengan array A karena ada kemungkinan data yang akan dicari adalah semua data yang ada dalam array A. sedangkan variable I digunakan sebagai counter dalam proses perulangan, variable j digunakan sebagai counter untuk menghitung jumlah data yang ditemukan dan variable k digunakan untuk menyimpan data yang akan dicari.
Proses pertama adalah memasukkan data-data yang akan diolah ke dalam array A dan data yang akan dicari ke dalam variable K. setelah itu akan dilakukan perulangan sebanyak data yang ada dalam array A untuk mencari apakah ada data dalam variable K didalam array A, jika ada maka counter j akan mencatat jumlahnya dan array index akan mencatat pada index ke berapa data tersebut ditemukan. Setelah proses perulangan selesai, tampilkanlah hasil yang terdapat pada variable j dan array index ke layer.
Penggunaan Sentinel (Penjaga)
Perhatikan array data berikut ini:
ü  Terdapat 6 buah data dalam array (dari indeks 0 s/d 5) dan terdapat 1 indeks array tambahan (indeks ke 6) yang belum berisi data (disebut sentinel)
ü  Array pada indeks ke 6 berguna untuk menjaga agar indeks data berada pada indeks 0 s/d 5 saja. Bila pencarian data sudah mencapai array indeks yang ke-6 maka berarti data TIDAK ADA, sedangkan jika pencarian tidak mencapai indeks ke-6, maka data ADA.


Contoh program
#include

int main(){
    int data[7] = {3,12,9,-4,21,6};
    int cari,i;
    printf("masukkan data yang ingin dicari = ");
    scanf("%d",&cari);
    data[6] = cari;
    i=0;
          while(data[i] != cari){
          i++;
          }
                if(i<6){
                      printf("Data ada!\n");
                }
                else{
                      printf("Data tidak ada!\n");
                }
getch();
return 1;
}














KESIMPULAN: sangat efisien!
           
2.        Binary Search
Proses pencarian binary search hanya dapat dilakukan pada kumpulan data yang sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah, data yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari data yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Kemudian ujung data pada setiap bagian dibandingkan lagi dengan nilai yang akan dicari.
  


 Coding Program Binary Search untuk dicoba
#include
int main()
{
     //deklarasi variabel
     int A[10], i,j,k,tkr,top,bottom,middle,tm;
     //proses penginputan data
     for(i=0;i<10;i++)
     {
           printf("Data ke-%d:",i+1);
           scanf("%d",&A[i]);
     }
     printf("Masukkan data yang akan anda cari:");
     scanf("%d",&k);
     //proses pengurutan data
    
     for(i=0;i<10;i++)
     {
           for(j=i+1;j<10;j++)
           {
                 if (A[i]>A[j])
                 {
                       tkr=A[i];
                       A[i]=A[j];
                       A[j]=tkr;
                 }
           }
     }
     //proses pencarian data
     tm=0;
     top=9;
     bottom=0;
     while(top>=bottom)
     {
           middle=(top+bottom)/2;
           if(A[middle]==k)
           {
                 tm++;
           }
           if(A[middle]
           {
                 bottom=middle+1;
           }
           else
           {
                 top=middle-1;
           }
     }
     if (tm>0)
     {
       printf("Data %d yang dicari ada dalam array\n",k);
     }
     //jika tidak ditemukan
     else
     {
       printf("Data tidak ditemukan dalam array\n");
    
     }
getch();
return 1;
}






























Contoh kasus:
Ada 12 data 11 13 15 18 23 27 29 31 54 58 59 61
Data yang akan dicari : 13
ü  Proses 1
11 13 15 18 23 27 29 31 54 58 59 61 ß lebih besar dengan data yg akan dicari , lakukan pembagian data
ü  Proses 2
11 13 15 18 23 27ß lebih besar dari data yang dicari, bagi 2   29 31 54 58 59 61
ü  Proses 3
11 13 15ß lebih besar dari data yang dicari, bagi 2   18 23 27   29 31 54 58 59 61
ü  Proses 4
11 ßlebih kecil dari data yang dicari, abaikan saja 13 15ß lebih besar dari data yang dicari, bagi 2   18 23 27   29 31 54 58 59 61
ü  Proses 5
11     13 ß sesuai data yang dicari    15 ßlebih besar dari data yang dicari 18 23 27   29 31 54 58 59 61

Dari proses diatas dapat disimpulkan bahwa binary search akan membagi-bagi sekumpulan data menjadi 2 bagian sampai data yang dicari ditemukan.

3.    Interpolation Search
Proses pencarian data ini hampir sama dengan proses pencarian binary search, pencarian ini juga dilakukan pada kumpulan data yang sudah urut. Akan tetapi jika pada binary search kita membagi data menjadi 2 bagian tiap prosesnya, pada interpolation search kita akan membagi data menurut rumus sebagai berikut:

Posisi = ( kunci – data[low] / data[high] – data[low] ) * ( high – low ) + low

Singkatnya proses pencarian interpolation search hampir mirip dengan proses pencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan cara memperkirakan letak data.

Misal terdapat data sebagai berikut:
Kode                Judul                                      Buku Pengarang
025                  The C++ Programming             James Wood
034                  Mastering Delphi 6                   Marcopolo
041                  Professional C#                       Simon Webe
056                  Pure JavaScript v2                    Michael Bolton
063                  Advanced JSP & Servlet          David Dunn
072                  Calculus Make it Easy Gunner Christian
088                  Visual Basic 2005 Express        Antonie
096                  Artificial Life : Volume 1           Gloria Virginia

Kunci Pencarian ? 088
Low ? 0
High ? 7
Posisi = (088 - 025) / (096 - 025) * (7 - 0) + 0 = [6]
Kunci[6] = kunci pencarian, data ditemukan : Visual Basic 2005
Kunci Pencarian ? 060

Low ? 0
High ? 7
Posisi = (060 – 025) / (096 – 025) * (7 – 0) + 0 = [3]
Kunci[3] < kunci pencarian, maka teruskan
Low = 3 + 1 = 4
High = 7
Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060.
Berarti tidak ada kunci 060.




Contoh program Interpolation
#include
int main()
{
  //deklarasi variable
  int A[10], i,j,k,tkr,low,high,pos,tm;
  //proses penginputan data
  for(i=0;i<10;i++)
  {
      printf("data ke-%d:",i+1);
      scanf("%d",&A[i]);
  }
  //Input data yang akan dicari
  printf("Masukkan data yang akan anda cari:");
  scanf("%d",&k);
  //proses pengurutan data
  for(i=0;i<10;i++)
  {
      for(j=i+1;j<10;j++)
      {
            if (A[i]>A[j])
            {
                  tkr=A[i];
                  A[i]=A[j];
                  A[j]=tkr;
            }
      }
  }
  //proses pencarian data
  tm=0;
  high=9;
  low=0;
  do
  {
        pos = ((k - A[low]) / (A[high] - A[low]))*(high-low) + low;
        if (A[pos] == k)
            {
                  tm++;
                  break;
            }
        if (A[pos] > k)
        high = pos-1;
                  else
        if (A[pos] < k)
        low = pos + 1;
  }
  while(k >= A[low] && k <= A[high]);
  if (tm>0)
  {
       printf("data %d yang dicari ada dalam array\n",k);
  }
  //jika tidak ditemukan
  else
  {
       printf("data tidak ditemukan dalam array\n");
  }
 getch();
 return 1;
}
 





BAB III
PENUTUP

3.1.      Kesimpulan

Sequential search lebih efektif jika digunakan pada sekumpulan data yang sedikit, sedangkan binary search efektif jika digunakan pada sekumpulan data yang berjumlah banyak.
Sequential search dapat digunakan pada sekumpulan data yang urut  ataupun tidak urut, sedangkan binary search harus pada data yang sudah urut. Sedangkan proses pencarian interpolation search hampir mirip dengan proses pencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan cara memperkirakan letak data.

3.2.      Saran

Penggunaan teknik pencarian data yang sesuai dengan kebutuhan akan menyelesaikan masalah pencarian data yang efektif dan efisien.


DAFTAR PUSTAKA


Praktikum Struktur Data. (2010) .Searching Array. [Online].Tersedia:
[17 Desember 2010].

[17 Desember 2010].




Lucunya!!!

Selalu Ingin Bersama...

Walau kita telah berpisah, tapi hati ini tak pernah bisa melupakanmu..
Engkau selalu ada dalam hati dan pikiranku, dimanapun aku berada...
Sungguh engkau begitu berarti bagiku...wahai Ibu...

kata-kata bijak yang harus kita jadikan pegangan...

*Kejujuran adalah perhiasan jiwa yang lebih bercahaya daripada berlian.
*Belajar tanpa berpikir tidak ada gunanya, sedangkan berpikir tanpa belajar adalah berbahaya.
*Cinta indah seperti bertepuk dua tangan, tak akan indah jika hanya sebelah saja.
*Sabar memiliki dua sisi, sisi yang satu adalah sabar, sisi yang lain adalah bersyukur kepada Allah.
*Niat adalah ukuran dalam menilai benarnya suatu perbuatan, oleh karenanya, ketika niatnya benar, maka perbuatan itu benar, dan jika niatnya buruk, maka perbuatan itu buruk.