Minggu, 07 Juni 2015

Searching (Praktikum struktur daya)



Searching

            Pada suatu data seringkali dibutuhkan pembacaan kembali informasi (retrieval information) dengan cara searching. Searching adalah pencarian data dengan cara menelusuri data-data tersebut. Tempat pencarian data dapat berupa array dalam memori, bisa juga pada file pada external storage. Pada umumnya dikenal dua metode searching antara lain :
o   Sequential search
o   Binary Search


      1.      Sequential search

            Sequential search merupakan langkah membandingkan data yang dicari dengan setiap elemen data satu-persatu secara beruntun, pencarian dimulai dari elemen pertama hingga elemen ditemukan atau seluruh elemen sudah dibandingkan.

Contoh Program Sequential Search
#include <stdio.h>
#define max 10

//fungsi memasukkan nilai pada array yang akan dicari
void bacadata(int a[], int n)
{
 int i;
 printf("masukkan: \n");
 for (i=0;i<n;i++)
 {
 printf("data ke - %d = ",i+1);
 scanf(" %d",&a[i]);
 }
}

//fungsi untuk mencetak data yang telah dimasukkan nilai
void cetakdata(int a[], int n)
{
 int i;
 for(i=0;i<n;i++)
 {
 printf(" %d ",a[i]);
 }
 printf("\n");
}

//fungsi pencarian terhadap data dengan nilai yang ingin dicari
int seqsearch(int a[],int n,int key)
{
 int i = 0;
 while ((i<n)&&(a[i] !=key)) {
 i++;
 }
 if (a[i]==key) return i;
 else
 return -1;
}

//program utama yang memanggil fungsi atau subprogram
main()
{
int n,a[max], v, p;
printf(" PROGRAM MENCARI SECARA SEQUENSIAL\n");
printf("jumlah data: ");
scanf(" %d",&n);
if (n > max )
{
 printf("jumlah data maksimal %d",max);
 return -1;
}

bacadata(a,n);
printf("array data: ");
cetakdata(a,n);

printf("nilai yang dicari: ");
scanf("%d",&v);
p = seqsearch(a,n,v);
if (p>=0) printf("nilai %d ada diposisi ke - %d \n",v,p+1);
else printf("nilai %d tidak ada dalam array \n",v);
}






      2.      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 
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 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
                                                 Awal    akhir 



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.  ditemukan ← false
4.  Selama (L <= R) dan (tidak ditemukan) kerjakan baris 5 sampai dengan 8
5.  m ← (L + R) / 2
6.  Jika (Data[m] = x) maka ditemukan ← true
7.  Jika (x < Data[m]) maka R ← m – 1
8.  Jika (x > Data[m]) maka L ← m + 1
9.  Jika (ditemukan) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.

Contoh Program Binary Search
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main()
{
            //deklarasi variabel
            int A[10],n, i,j,k,tkr,right,left,middle,tm;

            //proses penginputan data
   cout<<"Masukkan jumlah data = ";
   cin>>n;
            for(i=0;i<n;i++)
            {
            cout<<"Masukkkan data ke - "<<(i+1)<<" = ";
      cin>>A[i];
            }
   cout<<"Masukkan data yang akan anda cari :";
   cin>>k;

            //proses pengurutan data
            for(i=0;i<n;i++)
            {
                        for(j=i+1;j<n;j++)
                        {
                                    if (A[i]>A[j])
                                    {
                                                tkr=A[i];
                                                A[i]=A[j];
                                                A[j]=tkr;
         }
      }
   }

            //proses pencarian data
            tm=0;
            right=n;
            left=0;
            while(right>=left)
            {
                        middle=(right+left)/2;
                        if(A[middle]==k)
                        {
                                    tm++;
                        }
                        if(A[middle]<k)
                        {
                                    left=middle+1;
                        }
                        else
                        {
                                    right=middle-1;
                        }
   }
            if (tm>0)
   {
            cout<<"Data " << k << " yang dicari ada dalam array"<<endl;
   }
            //jika tidak ditemukan
            else
            {
            cout<<"Data tidak ditemukan dalam array"<<endl;
   }
   getch();
}


http://hack.spyrozone.net/0202_Struktur_Data_Pencarian_searching_by_y3ppy_WWW.SPYROZONE.TK_06_Juni_2007.html

 

                                                                  


 

Tidak ada komentar:

Posting Komentar