Sabtu, 01 Oktober 2016

Metode Pencarian (Searching)

08.05 Posted by Unknown No comments
1.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.
Gambar 1 Flowchart Pencarian Sequential
>Algoritma Metode Sequential

procedure pencarian_sequensial(L:larikint; n,x:integer; var idx : integer);

var
  i : integer;

  
    i  <- -1;
    while (i<n) and (L[i]<>x) do
       
        i <- i+1;
        if L[i]=x then
          idx <- i
        else
          idx <- -1;

        endif
   endprocedure

>Pascal Metode Sequential

program metode_pencarian_sequensial;
const max = 1000;
  type larikint = array [1..max] of integer;
var
  data : larikint;
  bil,jml_data,cari,indeks : integer;
procedure pencarian_sequensial(L:larikint; n,x:integer; var idx : integer);
var
  i : integer;

   begin
    i  := -1;
    while (i<n) and (L[i]<>x) do
        begin
        i := i+1;
        if L[i]=x then
          idx := i
        else
          idx := -1;
        end;
   end;
begin
  write('Masukkan Jumlah Data : '); readln(jml_data);
  for bil := 1 to jml_data do
    begin
      write(' Data ke-',bil,' : '); readln(data[bil]);
    end;

  WriteLn;
  WriteLn;
  write('Masukkan nilai yang akan dicari : '); readln(cari);

  pencarian_sequensial(data,jml_data,cari,indeks);

  WriteLn;
  WriteLn;

  if indeks <> -1 then
    write(cari,' ditemukan pada indeks ke-',indeks)
    else
    write(cari,' tidak ditemukan');

  ReadLn;

end.

>Program Metode Sequential


2.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 : 

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. 

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. 

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.  
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.
Gambar 2 Flowchart Pencarian Biner

>Algoritma Metode Pencarian Biner

procedure pencarian_biner(L:larikint; n,x:integer; var idx : integer);

var
  i,j,k : integer;
  ketemu : boolean;

  
    i <- 1;
    j <- n;
    ketemu<-false;
    while (not ketemu) and (i<=j) do
    
        k<- (i+j) div 2;
        if (L[k]=x) then
          ketemu <- true
        else
            if (L[k]>x) then
               i <- k+1
            else
                j <- k-1;
      endif

    if ketemu then
      idx:=k
    else
      idx:=-1;

  endprocedure

>Pascal Metode Pencarian Biner

program Metode_pencarian_biner;

const max = 100;
  type larikint = array [1..max] of integer;
var
  data : larikint;
  bil,jml_data,cari : integer;
  indeks : integer;

procedure pencarian_biner(L:larikint; n,x:integer; var idx : integer);

var
  i,j,k : integer;
  ketemu : boolean;

   begin
    i := 1;
    j := n;
    ketemu:=false;
    while (not ketemu) and (i<=j) do
      begin
        k:= (i+j) div 2;
        if (L[k]=x) then
          ketemu := true
        else
            if (L[k]>x) then
               i := k+1
            else
                j :=k-1;
      end;
    if ketemu then
      idx:=k
    else
      idx:=-1;
  end;

begin
  write('Masukkan Jumlah Data : '); readln(jml_data);
  for bil := 1 to jml_data do
    begin
      write(' Data ke-',bil,' : '); readln(data[bil]);
    end;
  WriteLn;
  WriteLn;
  write('Masukkan nilai yang akan dicari : '); readln(cari);

  pencarian_biner(data,jml_data,cari,indeks);

    WriteLn;
    WriteLn;
    if indeks <> -1 then
      write(cari,' ditemukan pada indeks ke-',indeks)
      else
      write(cari,' tidak ditemukan');
  ReadLn;

end.


>Program Metode Pencarian Biner








Daftar Pustaka
>http://www.brpreiss.com/books/opus5/index.html
>Penerbit Informatika (Algoritma Dan Pemrograman/Rinaldi Munir/2011)
>https://id.wikibooks.org/wiki/Ayo_Membuat_Program_Pascal/Algoritma_Sorting_Dasar

Selanjutnya - String Matching >

0 komentar:

Posting Komentar