algoritma

15
ALGORITMA PENCARIAN (SEARCH ALGORITHM) ALGORITMA PENCARIAN ADALAH ALGORITMA UNTUK MENCARI ITEM DENGAN SIFAT DAN NILAI YANG DITENTUKAN PADA SUATU KUMPULAN DARI ITEM.

Upload: mr-fm

Post on 13-Jul-2015

86 views

Category:

Social Media


0 download

TRANSCRIPT

Page 1: Algoritma

ALGORITMA PENCARIAN (SEARCH

ALGORITHM)

A L GO R I T M A PE N C A R I A N A D A L A H

A L GO R I T M A U N T U K M E N C A R I I TE M

D E N G A N SI FAT D A N N I L A I YA N G

DI T E N T U K A N PA D A SU AT U K U M P U L A N

D A R I I TEM .

Page 2: Algoritma

METODE PENCARIAN (SEARCH METHODS)

LINEAR SEARCH Sering dikenal dengan “pencarian berurutan” / “sequential searching”

Metode pencarian yang paling sederhana, pencarian dalam kumpulan data yang

masih acak.

BINARY SEARCH atau “pencarian interval sebagian” / “half-interval searching”

Metode pencarian dalam kumpulan data yang telah diurutkan (tidak acak).

Page 3: Algoritma

LINEAR SEARCH

PR I N S I P D A N M ETOD E Data yang ada dibandingkan satu per satu secara

berurutan dengan data yang dicari.

Pada saat data yang dicari ditemukan, maka proses

pencarian selesai.

Jika belum ditemukan, maka pencarian diteruskan

sampai seluruh data dibandingkan.

C ON TOHDiketahui : nilai_dicari = 5

var_array = [10, 8, 15, 9, 5, 6, 2, 3]

Pertanyaan : Dimanakah posisi 5 pada var_array ?

Page 4: Algoritma

LINEAR SEARCH

10 8 15 9 5 6 2 3

Apakah var_array[indeks] == nilai_dicari …..?

0 1 2 3 4 5 6 7

indek

s

Start

End

Tidak

Ya Posisi 5 =

4

Page 5: Algoritma

LINEAR SEARCH

5

10

8

15

9

5

6

2

3

0

1

2

3

4

5

6

7

ind

ek

s

Nilai yang

dicari

Ditemukan

nilai

5

di posisi ke-

Page 6: Algoritma

LINEAR SEARCH : CONTOH <LINEAR_CARIPOSISI.CPP>

# I N C L U D E < I O S T R E A M . H >

# I N C L U D E < C O N I O . H >

I N T C A R I ( I N T D A T A [ ] , I N T

N , I N T N I L A I )

{

I N T P O S , I ;

P O S = - 1 ;

I = 0 ;

W H I L E ( I < N - 1 )

{

I F ( D A T A [ I ] = = N I L A I )

{

P O S = I ;

B R E A K ;

}

I + + ;

}

void main()

{

int data_array[8] = {10,8,15,9,5,6,2,3} ;

int nilai_dicari = 5 ;

int posisi ;

posisi = cari(data_array, 8, nilai_dicari);

if(posisi == -1)

cout <<"Nilai " <<nilai_dicari

<<" tidak ditemukan" ;

else

cout <<"Nilai " <<nilai_dicari

<<" ada di posisi ke-" <<posisi ;

getch();

}

Page

1

Page

2

Page 7: Algoritma

BINARY SEARCH

PR I N S I P D A N M ETOD E1. Data dibagi menjadi 2 bagian (dengan jumlah yang sama

atau berbeda 1, jika jumlah semua datanya ganjil).

2. Pencarian selalu dimulai pada bagian pertama.

3. Data yang dicari dibandingkan dengan elemen

terakhir pada bagian pertama.

Ada 3 kemungkinan : Data yang dicari == elemen terakhir, maka data telah

ditemukan

Data yang dicari < elemen terakhir, maka pencarian

diteruskan pada bagian pertama (dengan cara membuat bagian

pertama menjadi 2 bagian lagi, dan langkah selanjutnya sama seperti mengulangi

langkah no 3)

Data yang dicari > elemen terakhir, maka pencarian

diteruskan pada bagian kedua (selanjutnya sama seperti mengulangi

langkah no 3, hanya saja dimulai pada bagian kedua)

Page 8: Algoritma

BINARY SEARCH

C ON TOHDiketahui : nilai_dicari = 5

data = [3, 5, 7, 9, 10, 11, 15, 18, 20]

Pertanyaan : Dimanakah posisi 5 pada data ?

Page 9: Algoritma

5 =

5

BINARY SEARCH

3 5 7 9 10 11 15 18 20

11 15 18 203 5 7 9 10

5

3 5 7 9 10

3 5 7

5 < 10

Nilai yang

dicari

5 < 7

0 1 2 3 4 5 6 7 8

indek

s

Ditemukan nilai 5 di posisi

ke 1

Page 10: Algoritma

BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>

# I N C L U D E < I O S T R E A M . H >

# I N C L U D E < C O N I O . H >

I N T C A R I ( I N T D A T A [ ] , I N T

N , I N T N I L A I )

{

I N T P O S I S I ;

I N T K I R I _ A K H I R ,

K A N A N _ A K H I R , B A G I A N ,

I N D E K S _ A K H I R ;

P O S I S I = - 1 ;

K I R I _ A K H I R = ( N / 2 ) ;

K A N A N _ A K H I R = N - 1 ;

B A G I A N = 1 ;

W H I L E ( B A G I A N < = 2 )

{

I F ( B A G I A N = = 1 )

I N D E K S _ A K H I R =

K I R I _ A K H I R ;

E L S E I F ( B A G I A N = = 2 )

I N D E K S _ A K H I R =

if(nilai == data[indeks_akhir])

{

posisi = indeks_akhir;

break;

}

else if(nilai < data[indeks_akhir])

{

if(bagian==1)

{

n=kiri_akhir;

kiri_akhir = (n / 2) ;

kanan_akhir = n ;

}

else

{

n=kanan_akhir;

kiri_akhir =

n-(((n - (kiri_akhir+2))+2)/2) ;

kanan_akhir = n ;

}

bagian = 1;

}

else if(nilai > data[indeks_akhir])

bagian = 2;

}

return posisi;

}

Page

1

Page

2

Page 11: Algoritma

BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>

void main()

{

int data[] = {3,5,7,9,10,11,15,18,20} ;

int dicari, posisi ;

cout <<"Masukkan nilai : ";

cin >>dicari;

posisi = cari(data, 9, dicari);

if(posisi == -1)

cout <<"Nilai " <<dicari

<<" tidak ditemukan" ;

else

cout << "Nilai " << dicari

<<" ada di posisi ke-" <<posisi ;

getch();

}

Page

3

Page 12: Algoritma

T U G A S Tulis beberapa program dari slide Chapter 2 (Part 2) ini dan coba

jalankan, program tersebut dapat ditemukan pada slide yang judulnyaterdapat kata Contoh dan atau Latihan.

Setelah semua program sukses dijalankan, copy file .cpp dan .exe ke

satu folder yang bernamakan [C2P2-KELAS-NAMA-NIM], contoh

KELAS : 1XNIM : 2011050505NAMA : EMAN SURYAMAN JUNAEDI

C2P2-1X-EMAN SURYAMAN JUNAEDI-2011050505

Kumpulkan ke Ketua Kelas, Folder yang berisi file .cpp dan .exe anda.Ketua Kelas mengumpulkan semua latihan mahasiswa padapertemuan/perkuliahan selanjutnya dalam 1 Folder untuk kelasnya tersebut.

Namakan Foldernya dengan [C2P2-KELAS].

C2P2-1X

Page 13: Algoritma

T A N T A N G A N

Dari contoh program “binary_cariposisi.cpp” diatas, coba

buat dengan logika dan algoritma versi sendiri:

Program dapat dijalankan dengan baik (tidak ada error), dan kode

program lebih sedikit dibandingkan dengan kode program yang ada

pada contoh diatas “binary_cariposisi.cpp”. Mendapatkan 100 untuk

nilai UTS.

Program dapat dijalankan dengan baik (tidak ada error), dengan

menggunakan algoritma yang beda pada contoh program diatas

“binary_cariposisi.cpp”. Mendapatkan 90 untuk nilai UTS.

Kumpulkan langsung pada pertemuan selanjutnya (KALAU

BISA LANGSUNG DIBAHAS).

Page 14: Algoritma

BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>

# I N C L U D E < I O S T R E A M . H >

# I N C L U D E < C O N I O . H >

I N T C A R I ( I N T D A T A [ ] , I N T

N , I N T N I L A I )

{

I N T P O S I S I ;

I N T K I R I _ A K H I R ,

K A N A N _ A K H I R , B A G I A N ,

I N D E K S _ A K H I R ;

P O S I S I = - 1 ;

K I R I _ A K H I R = ( N / 2 ) ;

K A N A N _ A K H I R = N - 1 ;

B A G I A N = 1 ;

W H I L E ( B A G I A N < = 2 )

{

I F ( B A G I A N = = 1 )

I N D E K S _ A K H I R =

K I R I _ A K H I R ;

E L S E I F ( B A G I A N = = 2 )

I N D E K S _ A K H I R =

if(nilai == data[indeks_akhir])

{

posisi = indeks_akhir;

break;

}

else if(nilai < data[indeks_akhir])

{

if(bagian==1)

{

n=kiri_akhir;

kiri_akhir = (n / 2) ;

kanan_akhir = n ;

}

else

{

n=kanan_akhir;

kiri_akhir =

n-(((n - (kiri_akhir+2))+2)/2) ;

kanan_akhir = n ;

}

bagian = 1;

}

else if(nilai > data[indeks_akhir])

bagian = 2;

}

return posisi;

}

Page

1

Page

2

Page 15: Algoritma

BINARY SEARCH : CONTOH <BINARY_CARIPOSISI.CPP>

void main()

{

int data[] = {3,5,7,9,10,11,15,18,20} ;

int dicari, posisi ;

cout <<"Masukkan nilai : ";

cin >>dicari;

posisi = cari(data, 9, dicari);

if(posisi == -1)

cout <<"Nilai " <<dicari

<<" tidak ditemukan" ;

else

cout << "Nilai " << dicari

<<" ada di posisi ke-" <<posisi ;

getch();

}

Page

3