Anda di halaman 1dari 18

ALGORITMA DAN PEMROGRAMAN

Pertemuan XII

Well talk about..


SEARCHING in Java
Definition Example Linier searching Binary searching Comparison between two methods You try

Nucke Widowati KP, M.Sc

Searching
Proses pencarian item di dalam array dengan memasukkan key tertentu Asumsikan tidak ada duplikasi data di dalam array Proses pencarian akan berakhir ketika item yang sesuai sudah ditemukan di dalam array Jika key yang dimasukkan tidak ada di dalam array maka proses pengecekan harus dilakukan ke seluruh elemen array sebelum muncul pesan data tidak ditemukan
Nucke Widowati KP, M.Sc

Algoritma Searching
Proses pengecekan dilakukan rata-rata separuh dari item data untuk menemukan item data sesuai dengan key Item yang berada di awal array akan segera ditemukan, sedangkan item di akhir array akan ditemukan kemudian Jika N adalah jumlah item maka rata-rata jumlah langkah untuk menemukan item data adalah N/2 Di skenario terburuk, item yang dicari terletak di akhir array, maka diperlukan N langkah untuk mencari item data tersebut
Nucke Widowati KP, M.Sc

Duplikasi Data
Ketika mendesign struktur penyimpanan data, perlu diperhatikan apakah duplikasi data diperbolehkan atau tidak Duplikasi data membuat item-item data di dalam array menjadi tidak unik Algoritma menjadi lebih kompleks, karena proses pengecekan akan terus dilakukan hingga akhir array yang terisi (sebanyak N langkah) Tergantung dari model pencarian yang dilakukan:
Find me everyone with blue eyes Find me someone with blue eyes
Nucke Widowati KP, M.Sc

Duplicates OK Versus No Duplicates

Nucke Widowati KP, M.Sc

Ordered Array
Misalkan kita sudah memiliki array yang sudah terurut secara ascending, nilai terkecil pada index ke-0 Setiap elemen memiliki nilai yang lebih besar daripada elemen sebelumnya Array tersebut adalah ordered array Keuntungan: mempersingkat waktu pencarian menggunakan binary search Duplikasi data tidak diperbolehkan

Nucke Widowati KP, M.Sc

Linier Search
Proses pencarian seperti pada array yang belum diurutkan Pada array yang sudah diurutkan, proses pencarian akan berhenti jika nilai yang lebih besar dari key sudah ditemukan Contoh: {13,34,248,287,313,386,427,505,805,915} Akan dicari nilai = 400 (tidak ada dalam array). Proses pencarian akan berhenti setelah membaca elemen 427. Algoritma akan mengetahui bahwa tidak ada gunanaya pengecekan diteruskan untuk mencari angka 400
Nucke Widowati KP, M.Sc

class SequentialSearch { static int SequentialSearch ( int [ ] array , int key ) { int i ; for ( i=0; i<array . length ; i++) i f ( array [ i ]==key ) return i ; return 1; } public static void main ( St r ing [ ] args ) { int [ ] v={1 ,6 ,9 ,12 ,45 , 67 , 76 , 80 , 95}; System . out . pr int ln ( "Seeking for element 6: Position "+ SequentialSearch (v , 6 ) ) ; System . out . pr int ln ( "Seeking for element 80: Position "+ SequentialSearch (v ,80) ) ; System . out . pr int ln ( "Seeking for element 33: Position "+ SequentialSearch (v ,33) ) ; } }

Binary Search
Pada array yang sudah diurutkan, proses pencarian dengan binary search akan lebih cepat daripada linier search terutama pada array berukuran besar Algoritma nya bisa dianalogikan dengan permainan menebak angka Contoh: menebak angka antara 1-100 Untuk mendapatkan hasil dengan jumlah tebakan yang paling sedikit, bisa dimulai dengan menebak 50 dst..
Nucke Widowati KP, M.Sc

Menebak Angka

Nucke Widowati KP, M.Sc

Dimulai dengan mencari interval [left,rigth], dimana left = 0, dan right = n-1 (n = array.length) m adalah elemen yang terletak di tengah array, m = (left+right)/2 Lakukan secara rekursif untuk:
Jika array[m]==E maka selesai, return index m Jika array[m]<E, maka jika elemen di dalam array, maka akan terletak pada range [m+1, right] Jika array[m]>E, jika elemen di dalam array, maka terletak pada range [left, m+1]

Algoritma kan berhenti jika sudah menemukan elemen atau left>right

Nucke Widowati KP, M.Sc

class BinarySearch { static int Dichotomy ( int [ ] array , int l e f t , int right , int key ) { i f ( left >r i g h t ) return 1; int m=( l e f t+r ight ) /2; i f ( array [m]==key ) {return m;} else { i f ( array [m]<key ) return Dichotomy ( array ,m+1, r ight , key ) ; else return Dichotomy ( array , l e f t ,m1, key ) ; } } static int DichotomicSearch ( int [ ] array , int key ) {return Dichotomy ( array , 0 , ar ray . length 1, key ) ; } public static void main ( String [ ] args ) { int [ ] v={1 ,6 ,9 ,12 ,45 , 67 , 76 , 80 , 95}; System . out.println ( "Seeking for element 6: Position "+ DichotomicSearch (v , 6 ) ) ; System . out . println ( "Seeking for element 33: Position "+ DichotomicSearch (v ,33) ) ; }}

Seeking for element 6: Position 1 Seeking for element 33: Position -1

Langkah dalam Binary Search


Range Langkah (Perbandingan) yang diperlukan 10 4 100 7 1.000 10 10.000 14 100.000 17 1.000.000 20 10.000.000 24 100.000.000 27 1.000.000.000 30
Nucke Widowati KP, M.Sc

Perbandingan Linier dan Binary Search


Pada jumlah item data yang kecil, perbandingan jumlah langkah antara linier dan binary search tidak terlalu dramatis Linier searching pada N = 10, rata-rata jumlah langkah (10/2 = 5), dan maximum 4 pada binary search Bandingkan pada N = 100 (50 dengan 7 langkah), atau ketika N = 1.000, 1.000.000???
Nucke Widowati KP, M.Sc

Thats way..
Linier search (atau sequential search), karena jumlah langkah (perbandingan) yang harus dilakukan adalah proporsional dengan panjang array Binary search (dichotomic search), jumlah langkah (perbandingan) yang harus dilakukan adalah proporsional terhadap 2 Binary search dikatakan juga memiliki logarithmic time complexity
Nucke Widowati KP, M.Sc

Big O Notation
Cara mudah untuk membandingkan bahwa suatu algoritma lebih efisien dibandingkan algoritma yang lain Linier search:
Jika N adalah total item dalam array Waktu pencarian adalah T yang proporsional terhadap setengah dari N, T = K * N/2 Atau T = K *N (Nilai K yang baru adalah K/2) Big O notation : O(N)
Nucke Widowati KP, M.Sc

Binary search: T = K*2 N Atau T = K* N Big O notation : O(log N)

Nucke Widowati KP, M.Sc