Jumat, 23 Januari 2015

Metode Algoritma Pencarian

METODE SEARCHING (Sequential Search & Binary Search) dalam C++

METODE SEARCHING (Sequential Search & Binary Search)
Searching adalah metode pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key ). Pencarian diperlukan untuk mencari informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data yang tersimpan secara terorganisasi, kelompok data tersebut kita sebut table.
Pada metode searching (pencarian) ada 2 teknik yang digunakan yaitu : Pencarian sekuensial (sequential search) dan Pencarian biner (Binary search).
1. Pencarian sekuensial (sequential search)
Pencarian sekuensial (sequential search) atau sering disebut pencarian linier menggunakan prinsip sebagai berikut : data yang ada di bandingkan satu persatu secara berurutan dengan yang dicari.
Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap perulangan , di bandingkan data ke-i dengan yang dicari. Apabila sama , berarti data telah ditemukan . Sebaliknya apabila sampai akhir pengulangan , tidak ada yang sama berarti data tidak ada.
a. Sekuensial versi berdampingan dengan sintak C:
Contoh listing fungsi dalam bahasa C++ :
Int SequensialSearch(List_type list, Key_type target)
{ int location; // penempatan data
for (location=0;location
if (EQ(list.entry[location].key,target))
return location;
return –1
b. Sekuensial versi berangkai dengan sintak C:
Node_type* SequentialSearch (List_type list, Key_type target)
{ Node_type* location;
for (location=list.head;location!=NULL;locatioan->next)
if(EQ(location->info.key,target))
return location;
return NULL
}
Pengimplementasian sintak sekuensial search pada bahasa C :
#include
#include
void main()
{
clrscr();
int data[8] = {3,9,7,-3,11,5,2,18};
int cari,index;
int ketemu=0;
cout<<"Inputkan data yang ingin di cari = ";
cin>>cari;
for(int i=0;i<8;i++)
{
if(data[i] == cari)
{
ketemu=1;
index=1;
break;
}
}
if(ketemu == 1)
{
cout<<"Data tersedia!"<
cout<<"Data Terletak di index ke - "<
}
else cout<<"Data tidak tersedia!"<
getch();
}
2. Pencarian Biner (Binary Search)
Salah satu syarat pencarian biner (binary search) dapat dilakukan adalah data sudah dalam keadaan terurut. Dengan kata lain, apabila data belum dalam keadaan terurut , pencarian biner tidak dapat dilakukan . Dalam kehidupan sehari-hari, sebenarnya kita juga serig menggunakan pencarian biner. Misalnya saat kita ingin mencari suatu kata dalam kamus.
Langkah dalam pencarian biner adalah :
1. Mula-mula diambil dari posisi awal=1 dan posisi akhir = n
2. Kemudian kita cari posisi data tengah dengan rumus posisi tengah = (posisi awal + posisi akhir ) div 2
3. Kemudian data yang di cari dibandingkan dengan data tengah
a. Jika sama, data ditemukan, Proses selesai
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah -1,
c. Jika lebih besar , proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah +1.
4. Ulangi langkah kedua hingga data ditemukan , atau tidak ditemukan.
5. Pencarian biner ini akan berakhir jika data ditemukan posisi awal lebih besar dari pada posisi akhir. Jika posisi awal sudah lebih besar dari posisis akhir berarti data tidak diketemukan.
Contoh sintak Binary search pada bahasa C:
#include
#include
int data[10] = {1,4,6,8,18,23,35,49,60,75};
int binary_search(int cari)
{
int l,r,m;
int n = 10;
l = 0;
r = n-1;
int ketemu = 0;
while(l<=r && ketemu==0)
{
m = (l+r)/2;
if ( data[m] == cari )
ketemu = 1;
else
if (cari <>
r = m-1;
else l = m+1;
}
if(ketemu == 1) return 1; else return 0;
}
void main()
{
clrscr();
int cari,hasil;
cout<<"Masukan data yang ingin dicari = ";
cin>>cari;
hasil = binary_search(cari);
if(hasil == 1)
{
cout<<"Data tersedia!"<
}
else
if(hasil == 0)cout<<"Data tidak tersedia!"<ETODE SEARCHING (Sequential Search & Binary Search) dalam C++
METODE SEARCHING (Sequential Search & Binary Search)
Searching adalah metode pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key ). Pencarian diperlukan untuk mencari informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data yang tersimpan secara terorganisasi, kelompok data tersebut kita sebut table.
Pada metode searching (pencarian) ada 2 teknik yang digunakan yaitu : Pencarian sekuensial (sequential search) dan Pencarian biner (Binary search).
1. Pencarian sekuensial (sequential search)
Pencarian sekuensial (sequential search) atau sering disebut pencarian linier menggunakan prinsip sebagai berikut : data yang ada di bandingkan satu persatu secara berurutan dengan yang dicari.
Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap perulangan , di bandingkan data ke-i dengan yang dicari. Apabila sama , berarti data telah ditemukan . Sebaliknya apabila sampai akhir pengulangan , tidak ada yang sama berarti data tidak ada.
a. Sekuensial versi berdampingan dengan sintak C:
Contoh listing fungsi dalam bahasa C++ :
Int SequensialSearch(List_type list, Key_type target)
{ int location; // penempatan data
for (location=0;location
if (EQ(list.entry[location].key,target))
return location;
return –1
b. Sekuensial versi berangkai dengan sintak C:
Node_type* SequentialSearch (List_type list, Key_type target)
{ Node_type* location;
for (location=list.head;location!=NULL;locatioan->next)
if(EQ(location->info.key,target))
return location;
return NULL
}
Pengimplementasian sintak sekuensial search pada bahasa C :
#include
#include
void main()
{
clrscr();
int data[8] = {3,9,7,-3,11,5,2,18};
int cari,index;
int ketemu=0;
cout<<"Inputkan data yang ingin di cari = ";
cin>>cari;
for(int i=0;i<8;i++)
{
if(data[i] == cari)
{
ketemu=1;
index=1;
break;
}
}
if(ketemu == 1)
{
cout<<"Data tersedia!"<
cout<<"Data Terletak di index ke - "<
}
else cout<<"Data tidak tersedia!"<
getch();
}
2. Pencarian Biner (Binary Search)
Salah satu syarat pencarian biner (binary search) dapat dilakukan adalah data sudah dalam keadaan terurut. Dengan kata lain, apabila data belum dalam keadaan terurut , pencarian biner tidak dapat dilakukan . Dalam kehidupan sehari-hari, sebenarnya kita juga serig menggunakan pencarian biner. Misalnya saat kita ingin mencari suatu kata dalam kamus.
Langkah dalam pencarian biner adalah :
1. Mula-mula diambil dari posisi awal=1 dan posisi akhir = n
2. Kemudian kita cari posisi data tengah dengan rumus posisi tengah = (posisi awal + posisi akhir ) div 2
3. Kemudian data yang di cari dibandingkan dengan data tengah
a. Jika sama, data ditemukan, Proses selesai
b. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah -1,
c. Jika lebih besar , proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah +1.
4. Ulangi langkah kedua hingga data ditemukan , atau tidak ditemukan.
5. Pencarian biner ini akan berakhir jika data ditemukan posisi awal lebih besar dari pada posisi akhir. Jika posisi awal sudah lebih besar dari posisis akhir berarti data tidak diketemukan.
Contoh sintak Binary search pada bahasa C:
#include
#include
int data[10] = {1,4,6,8,18,23,35,49,60,75};
int binary_search(int cari)
{
int l,r,m;
int n = 10;
l = 0;
r = n-1;
int ketemu = 0;
while(l<=r && ketemu==0)
{
m = (l+r)/2;
if ( data[m] == cari )
ketemu = 1;
else
if (cari <>
r = m-1;
else l = m+1;
}
if(ketemu == 1) return 1; else return 0;
}
void main()
{
clrscr();
int cari,hasil;
cout<<"Masukan data yang ingin dicari = ";
cin>>cari;
hasil = binary_search(cari);
if(hasil == 1)
{
cout<<"Data tersedia!"<
}
else
if(hasil == 0)
cout<<"Data tidak tersedia!"<
getch();
}
· Pencarian Sekuensial :
a. Kelebihannya :
- Relatif lebih cepat dan efisien untuk data yang terbatas
- Algoritma sederhana
b. Kekuranganya :
- Kurang cepat untuk data dalam jumlah besar
- Beban komputasi cenderung lebih besar
· Pencarian Biner :
a. Kelebihannya :
- Untuk data dalam jumlah besar, waktu searching lebih cepat
- Beban komputasi lebih kecil
b. Kekuranganya :
- Data harus sudah di-sorting lebih dulu ( dalam keadaan terurut ) - See more at: http://edyuty.blogspot.com/2013/05/metode-searching-sequential-search.html#sthash.9kJZxAzl.dpuf
getch();
}
· Pencarian Sekuensial :
a. Kelebihannya :
- Relatif lebih cepat dan efisien untuk data yang terbatas
- Algoritma sederhana
b. Kekuranganya :
- Kurang cepat untuk data dalam jumlah besar
- Beban komputasi cenderung lebih besar
· Pencarian Biner :
a. Kelebihannya :
- Untuk data dalam jumlah besar, waktu searching lebih cepat
- Beban komputasi lebih kecil
b. Kekuranganya :
- Data harus sudah di-sorting lebih dulu ( dalam keadaan terurut ) - See more at: http://edyuty.blogspot.com/2013/05/metode-searching-sequential-search.html#sthash.9kJZxAzl.dpuf
BRANCH AND BOUND
          Metode Branch and Bound adalah sebuah teknik algoritma yang secara khusus mempelajari bagaimana caranya memperkecil Search Tree menjadi sekecil mungkin.
          Sesuai dengan namanya, metode ini terdiri dari 2 langkah yaitu :
        Branch yang artinya membangun semua cabang tree yang mungkin menuju solusi.
        Bound yang artinya menghitung node mana yang merupakan active node (E-node) dan node mana yang merupakan dead node (D-node) dengan menggunakan syarat batas constraint (kendala).
TEKNIK BRANCH AND BOUND
          FIFO Branch and Bound
        Adalah teknik Branch and Bound yang menggunakan bantuan queue untuk perhitungan Branch and Bound secara First In First Out.
          LIFO Branch and Bound
        Adalah teknik Branch and Bound yang menggunakan bantuan stack untuk perhitungan Branch and Bound secara Last In First Out.
          Least Cost Branch and Bound
        Teknik ini akan menghitung cost setiap node. Node yang memiliki cost paling kecil dikatakan memiliki kemungkinan paling besar menuju solusi.
MASALAH YANG DAPAT DIPECAHKAN
          Branch and Bound dapat digunakan untuk memecahkan berbagai masalah yang menggunakan Search Tree
        Traveling Salesman Problem
        N-Queen Problem
        15 Puzzle Problem
        0/1 Knapsack Problem
                                -Shortest Path
 
Algoritma Brute Force
Algoritma  Brute Force adalah sebuah  pendekatan
yang lempang (straightforward) untuk memecahkan
suatu masalah, biasanya didasarkan pada pernyataan
masalah (problem statement) dan definisi konsep
yang dilibatkan.[7]
Prinsip –  prinsip algoritma brute force untuk
menyelesaikan persoalan Integer Knapsack ialah:
1)  Mengenumerasikan semua himpunan  bagian
dari solusi.
2)  Mengevaluasi total keuntungan  dari  setiap
himpunan bagian dari langkah pertama
3)  Pilih himpunan bagian yang mempunyai total
keuntungan terbesar
Algoritma Greedy
Secara harfiah,  greedy  berarti rakus atau tamak.
Algoritma  Greedy  merupakan  algoritma sedarhana
dan lempang yang paling populer untuk pemecahan
persoalan  optimasi (maksimum atau  minimum).
Prinsip  greedy   adalah: “take what you  can  get
now!”, yang digunakan dalam konteks positif.[7]
Ada tiga pendekatan dalam  menyelesaikan
persoalan  Integer Knapsack dengan algoritma
Greedy:
1)  Greedy by profit. 
Pada setiap langkah,  knapsack diisi dengan objek
yang mempunyai keuntungan terbesar. Strategi ini
mencoba memaksimumkan keuntungan dengan
memilih objek yang paling menguntungkan terlebih
dahulu.
2)  Greedy by weight.
Pada setiap langkah,  knapsack diisi dengan objek
yang mempunyai berat paling  ringan. Strategi ini
mencoba memaksimumkan keuntungan dengan
memasukkan sebanyak mungkin objek ke dalam
knapsack.
3)  Greedy by density. 
Pada setiap langkah,  knapsack diisi dengan objek
yang mempunyai densitas,  pi  /wi  terbesar.   Strategi
ini mencoba  memaksimumkan keuntungan  dengan
memilih objek yang mempunyai keuntungan per unit
berat terbesar.
Algoritma Dynamic Programming
Program Dinamis (dynamic programming): metode
pemecahan masalah dengan cara menguraikan solusi
menjadi  sekumpulan langkah (step) atau tahapan
(stage) sedemikian  sehingga solusi dari  persoalan
dapat dipandang  dari serangkaian keputusan  yang
saling berkaitan.[7] 
Pada penyelesaian persoalan dengan metode ini:
(1)  terdapat sejumlah berhingga pilihan  yang
mungkin,
(2)  solusi pada setiap tahap dibangun  dari hasil
solusi tahap sebelumnya,
(3)  kita menggunakan  persyaratan  optimasi dan
kendala untuk membatasi sejumlah pilihan yang
harus dipertimbangkan pada suatu tahap.
Dua  pendekatan yang digunakan  dalam  Dynamic
Progamming  adalah maju (forward atau  up-down)
dan mundur (backward atau bottom-up). 
Misalkan x1, x2, …, xn menyatakan peubah (variable)
keputusan  yang harus dibuat masing-masing untuk
tahap 1, 2, …, n. Maka,
a.  Program dinamis  maju: Program dinamis
bergerak mulai dari tahap 1, terus maju ke tahap 2, 3, dan seterusnya sampai  tahap n. Runtunan
peubah keputusan adalah x1, x2, …, xn.
b.  Program dinamis  mundur: Program dinamis
bergerak mulai dari tahap  n, terus mundur ke
tahap n – 1, n – 2, dan seterusnya sampai tahap
1.  Runtunan peubah keputusan  adalah  xn,  xn-1,
…, x1.
Secara  umum, ada empat langkah yang  dilakukan
dalam  mengembangkana algoritma program
dinamis:
1.  Karakteristikkan struktur solusi optimal.
2.  Definisikan secara rekursif nilai solusi
optimal.
3.  Hitung nilai solusi optimal secara maju atau
mundur.
4.  Konstruksi solusi optimal.
Algoritma Divide and Conquer
Algoritma  divide and conquer sudah lama diperkenalkan sebagai sumber dari
pengendalian proses paralel, karena masalah-masalah yang terjadi dapat diatasi
secara independen. Banyak arsitektur dan bahasa pemrograman paralel mendesain
implementasinya (aplikasi) dengan struktur dasar dari algoritma divide and conquer.
Untuk menyelesaikan masalah-masalah yang besar, dan dibagi (dipecah) menjadi
bagian yang lebih kecil dan menggunakan sebuah solusi untuk menyelesaikan
problem awal adalah prinsip dasar dari pemrograman/strategi divide and conquer.
Terima Kasih


Nama                                                    : M.Ropianto, M.Kom
NIDN:                                                  : 102867804
Status                                                  : Dosen Tetap YAPISTA / STT Ibnu Sina
Pengampuh Matakuliah                   : Algoritma & Pemrograman 3

Macam-macam Algoritma Pencarian (Searching)

Macam-macam Algoritma Pencarian (Searching)

 Pencarian sekuensial (Sequential searching)

Pengertian
Pencarian Sekuensial (sequential searching) atau pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana.  Pencarian beruntun adalah proses membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa. Pencarian beruntun terbadi dua:
1.      Pencarian beruntun pada larik tidak terurut;
2.      Pencarian beruntun pada larik terurut.
Algoritma
Pencarian berurutan menggunakan prinsip sebagai berikut :
1.      data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan.
2.      Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data.
3.      Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari.
4.       Apabila sama, berarti data telah ditemukan.   Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada.
Kelemahan 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 data tidak ditemukan
Algoritma Sequential Searching dalam bahasa C
#include <iostream.h>
#include <conio.h>

void main()
{
    int i;
    int cari,ketemu;
  int A[100]  ;

   cout<<"PROGRAM SEARCHING\n";
   cout<<"masukkan 7 buah data : \n\n";
   for (i=1;i<=7;i++)
   {
   cout<<"masukkan data ke-"<<i<<endl;
   cin>>A[i] ;
   }
   cout<<endl;
    cout<<"Input bilangan yang dicari : ";
    cin>>cari;

    ketemu=0;
    for(i=0;i<=7;i++)
    {
        if (A[i]==cari)
        {
            ketemu=1;
            cout<<"Data ditemukan pada indeks ke-"<<i;
        }
    }

    if (ketemu==0){
       cout<<"Data tidak ditemukan";
    }

 getch();
}
Contoh program nya dalam bahasa C :

#include <stdio.h>
#include <conio.h>
void main(){
int data[10] = {8,10,6,-2,11,7,1,100,11,3};
 int cari;
   int flag=0;
  printf("data = 8,10,6,-2,11,7,1,100,11,3")
  printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);
   for(int i=0;i<10;i++){
                if(data[i] == cari) flag=1;
   }
   if(flag==1) printf("Data ada!\n"); 
else printf("Data tidak ada!\n");
getch();
return 1;
}
hasil  nya adalah :
a
Dari program diatas, terlihat bahwa dilakukan perulangan untuk mengakses semua elemen array data satu persatu berdasarkan indeksnya.
  • Program menggunakan sebuah variabel flag yang berguna untuk menadai ada atau tidaknya data yang dicari dalam array data.  Hanya bernilai 0 atau 1.
  • Flag pertama kali diinisialiasasi dengan nilai 0.
  • Jika ditemukan, maka flag akan diset menjadi 1, jika tidak ada maka flag akan tetap bernilai 0.
  • Semua elemen array data akan dibandingkan satu persatu dengan data yang dicari dan diinputkan oleh user.

Pencarian Beruntun dengan Sentinel

·         Pengertian

Jika pencarian bertujuan untuk menambahkan elemen baru setelah elemen terakhir larik, maka terdapat sebuah varian dari metode pencarian beruntun yang mangkus. Nilai x yang akan dicari sengaja ditambahkan terlebih dahulu. Data yang ditambahkan setelah elemen terakhir larik ini disebut sentinel.

· Algoritma

Procedure SeqSearchWithSentinel
(input L: LarikInt, input n: integer, input x: integer, output idx: integer)
DEKLARASI
     I: integer
ALGORITMA
L[n+1]  ← X   {sentinel}
I ← 1
While (L[i] ≠ x) do
                 I ← i+1
Endwhile
If idx = n+1 then
                 idx  ← -1
else
                 idx ← 1
endif

·         Contoh dalam bahasa c :

#include <stdio.h>
#include <conio.h>
void main(){
 int data[11] = {3,12,9,-4,21,6,1,2,8,7,4};
 int cari,i;

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

hasil nya adalah :

b
Contoh 1 program dalam bahasa c ++ :
#include <iostream.h>
#include <conio.h>
void main()
{
    int i;
    int cari,ketemu;
  int A[100]  ;
   cout<<"PROGRAM SEARCHING\n";
   cout<<"masukkan 7 buah data : \n\n";
   for (i=1;i<=7;i++)
   {
   cout<<"masukkan data ke-"<<i<<endl;
   cin>>A[i] ;
   }
   cout<<endl;
    cout<<"Input bilangan yang dicari : ";
    cin>>cari;
    ketemu=0;
    for(i=0;i<=7;i++)
    {
        if (A[i]==cari)
        {
            ketemu=1;
            cout<<"Data ditemukan pada indeks ke-"<<i;
        }
    }
    if (ketemu==0){
       cout<<"Data tidak ditemukan";
    }
 getch();
}

hasil nya adalah :

c
Contoh 2 program dalam bahasa c ++ :
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
int data[10] = {8,10,6,-2,10,7,1,100,1,3};
int cari,index;
int ketemu=0;
cout<<" Data = 8,10,6,-2,10,7,1,100,1,3 \n ";
cout<<"masukkan data yang ingin dicari = ";
cin>>cari;
for(int i=0;i<10;i++)
{
if(data[i] == cari)
{
ketemu=1;
index = i;
break;
}
}
if(ketemu == 1)
{
cout<<"Data ada!"<<endl;
cout<<"Data terletak di index ke – "<<index;
}
else cout<<"Data Tidak ada!"<<endl;
getch();
}

hasil nya adalah :

d

Pencarian Biner (binary search)

·         Pengertian
Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array sudah teruru. pengurutan Array bisa menggunakan jenis sorting descending atau asscending. Kelebihan dari Searching dengan metode Binary Sort adalah Untuk Pencarian data yang jumlahnya banyak, waktu pencarian relatif cepat. selain itu beban komputasi juga lebih kecil karena pencarian dilakukan dari depan, belakang, dan tengah. namun ada pula kekurangannya, yaitu data harus disorting dahulu dan Algoritma lebih rumit, tidak baik untuk data berangkai.
Algoritma dari Binary Sort
Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut :
1.Membaca Array data
2.Apabila Array belum terurut maka array diurutkan terlebih dahulu.
3.Menentukan data yang akan dicari
4.Menentukan elemen tengah dari array
5.Jika nilai elemen tengah sama dengan data yang dicari, maka pencarian berhenti.
6.Jika elemen tengah tidak sama dengan data yang dicari maka :
a.Jika nilai elemen tengah > data yang dicari maka pencarian dilakukan pada setengah array pertama.
b.Jika nilai elemen tengah lebih kecil dari pada data yang dicari maka pencarian dilakukan pada setengah array berikutnya.
ILUSTRASI BINARY SEARCH
Misalkan saya mempunyai data sebagai berikut : 3,1,4,7,25,12,40,78,90,65. Maka data tersebut akan dicek, ternyata setelah dicek datanya belum terurut, maka dengan menggunakan metoda sorting yang sudah ada, maka kita bisa mengurut data tersebut, menjadi : 1,3,4,7,12,25,40,65,78,90
Setelah data tersebut diurutkan maka fungsi binary sort baru mulai bekerja mencari data. berikut cara dari Binary sort mencari data tersebut. misalnya data yang dicari adalah 65. maka pencariannya dijelaskan pada tabel berikut ini :
 
Pada data range diberi warna Hijau. Pencarian dimulai dari tengah,Kiri dan kanan. rumus untuk Posisi tengahnya adalah ( Posisi Akhir + Posisi Awal )/2. jadi Nilai tengah pada langkah pertama yaitu adalah 12 (berwarna merah) dan nilai targetnya adalah 65 (kuning). Karena nilai data yang dicari > dari data yang ditengah, maka pencarian menjadi dikanan dari nilai tengah. Setelah itu, Maka nilai 12 menjadi awal pencarian, selanjutnya dicari kembali nilai tengah pada range nilai 12 ke kanan sampai pada array dengan nilai 90. ternyata nilai tengahnya adalah 40. kemudian array dari nilai 40 dibandingkan dengan target, ternyata lebih besar, maka pencarian kembali mengarah ke kanan nilai tengah. Array dengan nilai 40 menjadi titik awal pencarian sekarang. dan sekarang nilai tengah nya adalah 65. maka dibandingkan dengan target ternyata sama, maka data sudah Ditemukan.
setiap data di subtree kiri < data root subtree < setiap data di subtree kanan.
  • Algoritma
class BinaryNode {
      void printInOrder( )‏{
              if( left != null )‏
              left.printInOrder( );   // kiri
              System.out.println( element );      // Node
              if( right != null )‏
              right.printInOrder( );            // Right
            }
        }
 class BinaryTree {
     public void printInOrder( )‏{

                    if( root != null )
                    root.printInOrder( );
   }
}
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :
  1. mula-mula diambil posisi awal 0 dan posisi akhir = N – 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2.
  2. Kemudian data yang dicari dibandingkan dengan data tengah.
  3. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.
  4. Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1.
  5. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Algoritma pencarian biner dapat dituliskan sebagai berikut :
  •  Contoh
  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 Jika (x > Data[m]) maka L  ← m + 1
  8. Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.
int binary_search(int cari){
int l,r,m;
l = 0;
r = n-1;
 int ktm = 0;
 while(l<=r && ktm==0){
                m = (l+r)/2;
               if(data[m] == cari) ktm=1;
               else if (cari < data[m]) r=m-1;
               else l=m+1; {
 if(ktm==1) 
    return 1;

     else return 0;
    }         
  }               
}

contoh program search binary :

#include <stdio.h>

int main()
{
    int c, first, last, middle, n, search, array[100];

    printf("Enter number of elements\n");
    scanf("%d",&n);

    printf("Enter %d integers\n", n);

    for ( c = 0 ; c < n ; c++ )
        scanf("%d",&array[c]);

    printf("Enter value to find\n");
    scanf("%d",&search);

    first = 0;
    last = n - 1;
    middle = (first+last)/2;

    while( first <= last )
    {
        if ( array[middle] < search )
            first = middle + 1;
        else if ( array[middle] == search )
        {
            printf("%d found at location %d.\n", search, middle+1);
            break;
        }
        else
            last = middle - 1;

        middle = (first + last)/2;
    }
    if ( first > last )
        printf("Not found! %d is not present in the list.\n", search);

    return 0;
}

hasil nya adalah :

e

Contoh Lainnya :

#include <iostream.h>
#include <conio.h>

int binary_s(int array[], int size, int elemen)
{
  int awal = 0;
  int akhir = size-1;
  int nilaiTengah;
  while (nilaiTengah<=size  && awal<=akhir)
  {
  nilaiTengah = (awal+akhir)/2;
  if (array[nilaiTengah]==elemen)
   return 1;
  else if (elemen<array[nilaiTengah])
   akhir = nilaiTengah-1;
  else
   awal = nilaiTengah+1;
  }
  return 0;
}

int main()
{
  int size=10;
  int data[10]={2, 3, 5, 6, 12, 44, 56, 65, 73 ,81} ;
  cout<<"Data Array"<<endl;
  int i, cari, hasil;

  for(i=0;i<size;i++)
  cout<<data[i]<<"  ";
  cout<<endl<<"masukkan data yang ingin anda cari: ";cin>>cari;
  hasil = binary_s(data, size, cari);
  if (hasil==0)
   cout<<"Nilai tidak ditemukan";
  else
   cout<<"Nilai ditemukan";
  getch();
}
hasil nya adalah :

f

contoh lain nya :

#include<iostream.h>
#include<conio.h>
int data[10] = {1,3,4,7,12,25,40,65,78,90};  //variabel global
int binary_search(int cari)
{
int l,r,m;
int n = 10;
l = 0;
r = n-1;
int ketemu = 0;
while(l<=r && ketemu==0)
{
m = (l+r)/2;
if( data[m] == cari )
ketemu = 1;
else
if (cari < data[m])
r = m-1;
else l = m+1;
}
if(ketemu == 1) return 1; else return 0;
}
void main()
{
clrscr();
int cari,hasil;
cout<<"data =  1,3,4,7,12,25,40,65,78,90 \n";
cout<<"masukkan data yang ingin dicari = ";
cin>>cari;
hasil = binary_search(cari);
if(hasil == 1)
{
cout<<"Data ada!"<<endl;
}
else
if(hasil == 0)
cout<<"Data Tidak ada!"<<endl;
getch();
}

hasil nya adalah :

g

ALGORITMA SEARCHING

ALGORITMA PENCARIAN (SEARCHING)
 
    Searching berarti pencarian suatu situs yang belum kita ketahui secara pasti alamat yang dimiliki. Dalam melakukan searching biasanya kita gunakan search engine sebagai mesin pembantu dalam pencarian situs tersebut.Search engine adalah sebuah fasilitas (web) yang bisa mencari links dari situs lain. Ada berbagai macam search engine yang bisa kita gunakan dalam searcing, yaitu ; yahoo, google, altavista, lycos, astaga, msn, dan lain sebagainya.
    Pencarian(searhing) merupakan proses yang sangat penting dalam pengolahan data. Proses pencarian adalah menemukan nilai(data) tertentu didalam sekumpulan data yang bertipe sama.
Sebuah algoritma pencarian dijelaskan secara luas adalah sebuah algoritma yang menerima masukan berupa sebuah masalah dan menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat dari evaluasi beberapa kemungkinan solusi. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah Kata kunci dan dengan  langkah-langkah tertentu akan mencari rekaman dengan kata kunci tersebut.  Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan atau tidak ditemukan.
1.      Macam-macam Algoritma (Searching)
1.1  Pencarian sekuensial (Sequential searching)
·         Pengertian
Pencarian Sekuensial (sequential searching) atau pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. Pencarian beruntun adalah proses yang membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama sampai elemen yang dicari ditemukan atau seluruh elemen sudah diperiksa.
1.2  Pencarian Biner (binary search)
·       Pengertian
       Terdapat metode pencarian pada data terurut yang paling efficient, yaitu metode pencarian bagi dua atau pencarian biner (binary search). Metode ini digunakan untuk kebutuhan pencarian dengan waktu yang cepat. Prinsip pencarian dengan membagi data atas dua bagian mendasari metode ini. Data yang disimpan di dalam larik harus sudah terurut. data terurut yang paling efficient, yaitu metode pencarian bagidua atau pencarian biner (binary search).
 Pada kali ini saya akan berbagi dan mencoba membuat program pencarian (search)  dengan metode Pencarian Sekuensial atau berurutan. Saya mengunakan Apikasi Codeblock dan dengan bahasa pemrograman C++... ayomari kita coba langsung...
 Jika di run hasilnya seperti ini :
         Hasil Program di atas menunjukkan bahwa ketika user menginputkan nilai yang ada dalam data maka akan tampil data yang kita inputkan dan jumlah datanya.  jika  user tidak menginputkan nilai yang ada dalam data maka hasilnya akan seperti ini :
Yaaap... Itu program Searching Semoga bermanfaat
Waasalamulaikum Wr.Wb.
  • Terima Kasih


    Nama                                                    : M.Ropianto, M.Kom
    NIDN:                                                  : 102867804
    Status                                                  : Dosen Tetap YAPISTA / STT Ibnu Sina
    Pengampuh Matakuliah                   : Algoritma & Pemrograman 3