Anda di halaman 1dari 13

RESUME PERANCANGAN ALGORITMA

[ASMASARI]
H12111282

STATISTIKA

SEARCHING PROBLEM Pencarian (searching) merupakan proses yang fundamental dalam pengolahan data. Operasi pencarian adalah operasi untuk menemukan sebuah nilai (data) di dalam sekumpulan nilai yang bertipe sama. Untuk menemukan nilai yang kita cari, instruksi yang paling penting untuk dilakukan ialah memeriksa jika nilai yang kita cari sama dengan salah satu nilai dalam kumpulan nilai yang dimaksud. Metode pencarian yang dibahas: 1. Linear Search ( metode pencarian beruntun/lurus) 2. Bisection Search (metode pencarian bagi dua)

1. Linear Search Linear Search adalah metode pencarian yang paling sederhana. Linear Search bekerja dengan membandingkan nilai yang dicari dengan setiap element pada array ( pada umumnya ) secara sequen.

Input: Barisan n bilangan asli (a1, a2, , an) dalam larik A dan sebuah bilangan key yang ingin dicari. Output:Lokasi key dalam A. Jika key tidak ditemukan dalam A, tambahkan key sebagai unsure terakhir.

Contoh Prosedur pencarian linear. Input barisan bilangan: A = (30, 40, 59, 23, 40, 57) dan key = 23. Algoritma pencarian (searching algorithm) mengembalikan Output menghasilkan posisi key adalah 4
Untuk menyelesaikan contoh diatas gunakan metode Linear-search, yaitu:

Linear-Search(A, key) 1 ada False 2 for i 1 to length[A] 3 if A[i] = key then 4 posisi i

5 6 7 8

ada True if not(ada) then posisi length[A] + 1 A[posisi] data

INPUT 30 40 59 23 40 Key Penguraian Pseucode ada False pernyataan ada False dianggap sebagai kondisi awal for i 1 to length[A] for i 1 to 6 if A[i] = key if 30 = key 30 40 59 23 40 57 length[A] = 6 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan. for i 2 to 6 if A[i] = key if 40 = key 30 40 59 23 40 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan. for i 3 to 6 if A[i] = key if 59 = key 30 40 59 23 40 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan.

for i 4 to 6 if A[i] = key if 23 = key then posisi 4 30 40 59 23 40 True ada True Karena pernyataan bernilai maka benar, KEY ditemukan pada posisi = 4 for i 5 to 6 if A[i] = key if 4o = key 30 40 59 23 40 57 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan. for i 6 to 6 if A[i] = key if 57 = key 30 40 59 23 40 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan. for i 7 to 6 I telah melampaui batas unsur n (tidak ada lagi barisan) sehingga eksekusi pernyataan selanjutnya. if not(ada) then tereksekusi sampai batas ini karena pada barisan terdapat unsur yang sama dengan KEY posisi length[A] + 1 A[posisi] data Tidak tereksekusi lagi.

30

40 59

23 40

57

Karena pernyataan if 23= key bernilai benar, maka ekesekusi dihentikan pada posisi A[4], sehingga output posisi key adalah 4.

RUNNING TIME

Berikut penjelasan masing-masing:

ada False for i 1 to length[A]

untuk memberikan nilai awal times-nya = n + 1, karena jumlah data akan di cek sebanyak n kali untuk mengecek kembali maka data di cek satu kali lagi . times-nya = 1 , karena hanya menentukan nilai kuncinya. times-nya = , karena apabila i=1 maka dan seterusnya sampai banyaknya data , jika i = 2 maka

if A[i] = key then posisii

ada True

times-nya = , sama halnya seperti penentuan nilai jika ada maka akan diproses sepanjang , ,dan seterusnya. times-nya = 1, karena jika nilai tidak ada pada barisan maka akan diproses sebanyak satu kali times-nya = s (variabel bebas), karena jika nilai key terpenuhi maka sintaks ini tidak akan berjalan atau nilainya = 0, namun jika key tidak terpenuhi maka sintaks ini akan berjalan sebanyak 1 kali untuk menentukan posisi key yang telah ditentukan times-nya = s (variabel bebas), karena jika nilai key terpenuhi maka sintaks ini tidak akan berjalan atau nilainya = 0, namun jika key tidak terpenuhi maka program terlebih dahulu akan memproses langkah posisilength[A] + 1 jika sudah maka akan diproses sintaks yang satu ini untuk menambahkan key yang sebelumnya tidak ada pada data sehingga data yang kita miliki menjadi n + 1

if not(ada) then

posisilength[A] + 1

A[posisi] data

KasusTerburuk: Semua unsure dalam larik A sama dengan key. (Dalam hal ini, dan s = 0). Kasus ini terjadi bila nilai dari larik A itu sama semua dan key yang ditentukan. Misalnya A = 33, 33, 33, 33 dan key = 33. Jika kasus seperti ini otomatis nilainya langsung ketahuan maka sintaks-sintaks berikutnya tidak erlu di proses lagi. KasusTerbaik: Tidak terdapat satu pun unsur dalam larik A sama dengan key. (Dalam hal ini, dan s = 1). Kasus ini terjadi apabila key yang diitentukan tidak terdapat pada data yang diberikan. Misalnya A = 20, 42, 65, 77 dan key = 88 maka sintaks-sintaks akan di proses hingga terakhir. 2. Bisection Search Prinsip pencarian dengan membagi data atas dua bagian mengilhami metode pencarian bagidua. Data yang disimpan di dalam larik harus sudah terurut. Untuk memudahkan pembahasan, selanjutnya kita misalkan elemen larik sudah terurut menurun. Dalam proses pencarian, kita memerlukan dua buah indeks larik, yaitu indeks terkecil dan indeks terbesar. Kita menyebut indeks terkecil sebagai indek ujung kiri larik dan indeks terbesar sebagai indeks ujung kanan larik. Istilah "kiri" dan "kanan" dinyatakan dengan

membayangkan elemen larik terentang horizontal. Misalkan indeks kiri adalah i dan indeks kanan adalah j. Pada mulanya, kita inisialisasi i dengan 1 dan j dengan n. Contoh
Input barisan bilangan: A = (30, 40, 59, 23, 40, 57) dan key = 23 Algoritma pencarian (searching algorithm) mengembalikan Output menghasilkan posisi key adalah 4. Untuk menyelesaikan contoh diatas gunakan metode Bisection-search, yaitu: Bisection-Search(A, key) 1 ada False 2 for i 1 to length[A] /2 3 if A[i] = key then 4 posisi i 5 ada True 6 if A[n i + 1] = key then 7 posisi n i + 1 8 ada True 9 if not(ada) then 10 posisi length[A] + 1 11 A[posisi] data

Maksud dari metode Bisection-Search yaitu mengeksekusi unsur dari dari depan dan belakang untuk satu pernyataan sehingga running time lebih efisien. INPUT 30 40 59 23 40 Key Penguraian Psoucode ada False pernyataan ada False dianggap sebagai kondisi awal for i 1 to length[A]/2 for i 1 to 3 if A[1] = key then if 30 = key then posisi 1 length[A] = 6 57

30

40 59

23 40

57

False if A[6] = key then if 57 = key then posisi 6 30 40 59 23 40 57

False Karena pernyataan bernilai salah, maka eksekusi dilanjutkan. for i 2 to 3 if A[2] = key then if 40 = key then posisi 2 30 40 59 23 40 57

False if A[5] = key then if 40 = key then posisi 5 30 40 59 23 40 57

False Karena pernyataan berniali salah, maka eksekusi dilanjutkan. for i 3 to 3 if A[3] = key then if 59 = key then posisi 3 30 40 59 23 40 57

False if A[4] = key then if 23 = key then posisi 4 30 40 59 23 40 True 57

ada True for i 4 to 3 i melampaui batas unsur n (tidak ada lagi barisan) sehingga eksekusi pernyataan selanjutnya tereksekusi sampai batas ini karena pada barisan terdapat unsur yang sama dengan KEY, jika dalam barisan belum ditemukan KEY maka dilanjutkan ke pernyataan di bawahnya. Tidak tereksekusi lagi (Key=Ada)

if not(ada) then

posisi length[A] + 1 A[posisi] data

30

40 59

23 40

57

True Karena pernyataan if 23=key bernilai benar, maka maka ekesekusi dihentikan pada posisi A[4], sehingga output posisi key adalah 4. RUNNING TIME

Berikut penjelasannya masing-masing :

ada False

times-nya = 1 karena untuk menentukan nilai awal pada data times-nya = , karena pada sintaks panjang data A

for i 1 tolength[A] /2

dibagi 2 maka waktunya pun dibagi 2 serta ditamnah 1 untuk melakukan pengecekan kembali. if A[i] = key then times-nya = 2

, karena key pada data yang telah dibagi dengan

posisii

times-nya = , times-nya = , sama halnya seperti penentuan nilai jika ada maka akan diproses sepanjang , ,dan seterusnya times-nya = , sama halnya seperti penentuan nilai jika ada maka akan diproses sepanjang , ,dan seterusnya times-nya = dengan 2

ada True

if A[n i + 1] = keythen

, karena key pada data yang telah dibagi

posisin i+ 1

times-nya = , times-nya = , sama halnya seperti penentuan nilai jika ada maka akan diproses sepanjang , ,dan seterusnya times-nya = , sama halnya seperti penentuan nilai jika ada maka akan diproses sepanjang , ,dan seterusnya

ada True

if not(ada) then

times-nya = 1, karena jika nilai tidak ada pada barisan maka akan diproses sebanyak satu kali posisilength[A] + 1 times-nya = s (variabel bebas), karena jika nilai key terpenuhi maka sintaks ini tidak akan berjalan atau nilainya = 0, namun jika key tidak terpenuhi maka sintaks ini akan berjalan sebanyak 1 kali untuk menentukan posisi key yang telah ditentukan A[posisi] data times-nya = s (variabel bebas), karena jika nilai key terpenuhi maka sintaks ini tidak akan berjalan atau nilainya = 0, namun jika key tidak terpenuhi maka program terlebih dahulu akan memproses langkah posisilength[A] + 1 jika sudah maka akan diproses sintaks yang satu ini untuk menambahkan key yang

sebelumnya tidak ada pada data sehingga data yang kita miliki menjadi n + 1 KasusTerburuk: SemuaunsurdalamlarikAsamadengankey. (Dalamhalini,

dans = 0)

Kasus ini terjadi apabila semua unsur dalam larik A dalam hal ini ruas kanan

dan ruas kiri sama dengan key yang diberikan. Sehingga untuk memprosesna tak perlumemperhatikan proses selanjutnya. KasusTerbaik:TerdapattepatsatuunsurdalamlarikAsamadengankey. (Dalamhalini,

dans = 0)

Kasus ini terjadi apabila tidak satu pun unsur pada larik A yang sama dengan key, sehingga ada sintaks yang dikerjakan hanya 1 kali.

OTHERS IDEAL Ada ide lain yang membuat waktu komputasi (running time) pencarian data menjadi lebih cepat!! Pengembangan alamiah: Pencarian dipecah beberapa bagian lagi; , 1/8, 1/16, dst. Ide dengan metode dynamic programming (akan dibahas pada materi strategi algoritmik) Namun pengembangan alamiah hanya mengurangi + + 1/8 + 1/16 dari jumlah data n. Adakah metode lain yang membuat running time berkurang secara drastis!??

BINARY SEARCH TREE ( BST ) Struktur Data: Prosedur penyimpanan data dalam bentuk tertentu sedemikian sehingga operasi dasar pada algoritma menjadi lebih efisien atau optimal Binary Search Tree (BST): Struktur data yang memenuhi sifat : Contoh : Diberikan barisan bilangan 5,6,7,8,9,10,11 dengan Key = 9, tunjukan dengan metode Binary Search Tree

BINARY SEARCH TREE Metode Binary searh tree lebih memudahkan kita dalam masalah pencarian data, dengan cara yang mudah yaitu bagi unsur ke dalam dua sisi, sisi kiri untuk unsur yang lebih kecil sedangkan sisi kanan untuk unsur yang lebih besar.

6 5 7 9

10 11

Setelah BST telah terbentuk, maka mulailah melakukan pencarian data, mulai dari atas Jika 9 > 8 maka ke kanan dan jika 9 < 8 maka ke kiri.Karena 9 > 8 maka ke kanan.

6 5 7 9

10 11

Maka sekarang 8 adalah patokan, Jika 9 > 10 maka ke kanan dan jika 9 < 10 maka ke kiri. Karena 9 < 10 maka ke kiri.

6 5 7 9

10 11

key Dengan cara yang lebih mudah dan cepat, KEY dapat ditemukan.

Anda mungkin juga menyukai