Minggu, 24 Juni 2012

Binary dan Sequential Search



Dalam ilmu komputer, 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. Operasi pencarian adalah operasi untuk menemukan sebuah nilai (data) di dalam sekumpulan nilai yang bertipe sama. Untuk menemukan nilai yang dicari, instruksi yang paling penting yang harus dilakukan adalah memeriksa jika nilai yang dicari sama dengan salah satu nilai dalam kumpulan nilai yang dimaksud. Metode pencarian yang bisa dipergunakan tergantung dari Bagaimana urutan nilai-nilai di dalam kumpulan nilai dan bagaimana struktur data yang dipergunakan untuk menyusun nilai-nilai tersebut

Sequential Search


Algoritma sequential search adalah salah satu algoritma yang digunakan untuk memecahkan masalah pencarian data pada suatu data larik/array. Cara kerja dari algoritma ini adalah dengan menelusuri elemen-elemen array dari awal sampai akhir, dimana data tidak perlu diurutkan terlebih dahulu. Kemungkinan terbaik(best case) dari algoritma ini adalah jika data yang dicari berada pada elemen array yang terdepan sehingga waktu yang dibutuhkan untuk pencarian data semakin singkat. Sebaliknya, akan mencapai kondisi terburuk(wors case) apabila data yang dicari berada pada elemen akhir.

Metode pencarian beruntun atau linear (sequential search) dapat dipergunakan apabila:

  1. Nilai-nilai tersebut belum berurutan.
  2. Nilai-nilai tersebut sudah berurutan, tetapi struktur data yang dipergunakan untuk menyimpan nilai-nilai tersebut adalah linked list.
Contoh implementasi sequential search pada Pascal:

PROGRAM Pencarian_Sequential_Search;



USES CRT;


CONST
Max = 100;

TYPE
                ArrData = ARRAY[1..Max] OF INTEGER;

PROCEDURE INPUT_DATA(var D :ArrData; N:INTEGER);
VAR
                I : INTEGER;
BEGIN
                FOR I:=1 TO N DO
                BEGIN
                                WRITE('Tentukan Data ke - ',I,' : ');
                                READLN(D[I]);
                END;
END;

{--------------------Fungsi Sequential search----------------------}

FUNCTION SEQUENTIAL_SEARCH(var D :ArrData; N,Cari:INTEGER):BOOLEAN;
VAR
                I : INTEGER;
                Ketemu : BOOLEAN;
BEGIN
                I:=1;
                Ketemu := False;
                WHILE((I<=N) AND (Ketemu=False)) DO
                BEGIN
                                IF(D[I]=Cari) THEN Ketemu:=True;
                I:=I+1
                END;
                SEQUENTIAL_SEARCH:=Ketemu;
END;

{--------------------------Program Utama---------------------------}

VAR
                Data : ArrData;
                Jumlah, I, Cari : INTEGER;
BEGIN
                CLRSCR;
                WRITE('Tentukan Jumlah Data : ');READLN(Jumlah);
                INPUT_DATA(Data, Jumlah);
                WRITELN;
                WRITE('Tentukan data yang ingin dicari : ');
                READLN(Cari);
                IF (SEQUENTIAL_SEARCH(Data,Jumlah,Cari)) THEN
                                WRITELN('Data Ditemukan')
                ELSE
                WRITELN('Data Tidak Ditemukan');
                READLN;
END.

Binary Search

Binary search adalah algoritma pencarian untuk data yang terurut. Pencarian dilakukan dengan cara menebak apakah data yang dicari berada ditengah-tengah data, kemudian membandingkan data yang dicari dengan data yang ada ditengah. Bila data yang ditengah sama dengan data yang dicari, berarti data ditemukan. Namun, bila data yang ditengah lebih besar dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan berada disebelah kiri dari data tengah dan data disebelah kanan data tengah dapat diabai. Upper bound dari bagian data kiri yang baru adalah indeks dari data tengah itu sendiri. Sebaliknya, bila data yang ditengah lebih kecil dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan besar berada disebelah kanan dari data tengah. Lower bound dari data disebelah kanan dari data tengah adalah indeks dari data tengah itu sendiri ditambah 1. Demikian seterusnya.
Metode pencarian beruntun (sequential) maupun metode pencarian biner (binary search) dapat dipergunakan, jika:
  1. Nilai-nilai tersebut sudah tersusun secara berurutan.
  2. Nilai-nilai tersebut disusun ke dalam bentuk array atau struktur data sejenis yang masing-masing nilai tersimpan dalam bagian-bagian yang mempunyai indeks yang unik dan indeksnya berurutan dari yang paling kecil hingga yang paling besar (bersifat ordinal).
Ilustrasi Binary search: 



Berikut ini contoh implementasi binary search pada Pascal:

PROGRAM Pencarian_Binary_Search;



USES CRT;


CONST Max = 100;

TYPE
ArrData = ARRAY[1..Max] OF INTEGER;

PROCEDURE INPUT_DATA(var D :ArrData; N:INTEGER);
VAR
                I : INTEGER;
BEGIN
                FOR I:=1 TO N DO
                BEGIN
                                WRITE('Tentukan Data ke - ',I,' : ');
                                READLN(D[I]);
                END;
END;

{----------------------Fungsi Binary search------------------------}

FUNCTION BINARY_SEARCH(var D :ArrData; N,Cari:INTEGER):BOOLEAN;
VAR
                L,R,M : INTEGER;
                Ketemu : BOOLEAN;
BEGIN
                L:=1;
                R:=N;
                Ketemu := False;
                WHILE((L<=R) AND (Ketemu=False)) DO
                BEGIN
                                M:=ROUND((L+R) / 2);
                                IF(D[M]=Cari) THEN
                                                Ketemu:=True
                                ELSE IF(D[M]>Cari) THEN
                                                R:=M-1
                                ELSE
                                                L:=M+1;
                END;
                BINARY_SEARCH:=Ketemu;
END;

{--------------------------Program Utama---------------------------}

VAR
                Data : ArrData;
                Jumlah, I, Cari : INTEGER;
BEGIN
                CLRSCR;
                WRITE('Tentukan Jumlah Data : ');READLN(Jumlah);
                INPUT_DATA(Data, Jumlah);
                WRITELN;
                WRITE('Tentukan data yang ingin dicari : ');
                READLN(Cari);
                IF (BINARY_SEARCH(Data,Jumlah,Cari)) THEN
                                WRITELN('Data Ditemukan')
                ELSE
                                WRITELN('Data Tidak Ditemukan');
                READLN;
END.

4 komentar:

  1. terimakasih untuk artikel dan illustrasi dari sequential search,,,
    membantu sekali untuk orang2 yg sulit paham algoritma spt saya jika tdk memakai gambar/flowchart :)

    oh iya ngomong2 saya pernah melihat akun dA anda :) bagus sekali gambar2 anime nya, kalau sempat , kunjungi dA saya hyonji.deviantart.com

    BalasHapus
  2. Trims... cukup membantu dengan adanya ilustrasi gambar....

    BalasHapus