Binary Search
Binary search, atau metode pencarian secara biner hanya bisa dilakukan jika data sudah terurut. Keunggulan dari proses binary search ini adalah sistem pencariannya yang relatif cepat dan efisien walaupun ada banyak data sekalipun. Karena data dicari dari depan, tengah dan belakang. Tetapi sintaks dan algoritmanya sedikit lebih rumit, karena kita harus mengurutkan data terlebih dahulu. Pengurutan data disini bisa dilakukan dengan metode ascending ataupun descending. Untuk dasar dari binary search ini, diberikan array dengan data yang telah diurut sebelumnya. Agar lebih mudah memahami dasar dari binary search ini. Adapun algoritma dari binary search ini adalah sebagai berikut. Membaca data yang ada di array Jika data belum terurut, maka lakukan pengurutan data Menentukan data yang akan dicari di dalam array Menentukan nilai elemen tengah array o Jika nilai elemen tengah array sama dengan data yang dicari, maka pencarian akan dihentikan o Jika elemen tengah tidak sama dengan data yang dicari, maka: Jika nilai tengah lebih besar dari nilai yang dicari, maka pencarian hanya dilakukan pada setengah array pertama Jika nilai tengah lebih kecil dari nilai yang dicari, maka pencarian hanya dilakukan pada setengah array sisa. 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. Algoritma pencarian berurutan dapat dituliskan sebagai berikut : 1i0 2 ditemukan false 3 Selama (tidak ditemukan) dan (i <= N) kerjakan baris 4 4 Jika (Data*i+ = x) maka ditemukan true, jika tidak i i + 1 5 Jika (ditemukan) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian sekuensial. int SequentialSearch(int x) { int i = 0; bool ditemukan = false; while ((!ditemukan) && (i < Max)) { if(Data[i] == x) ditemukan = true; else i++;
} if(ditemukan) return i; else return -1; } Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1. 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 :
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 ini. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 5.
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.
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.
Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang artinya data tidak ditemukan. Algoritma pencarian biner dapat dituliskan sebagai berikut : 1L0 2RN-1 3 ditemukan false
4 Selama (L <= R) dan (tidak ditemukan) kerjakan baris 5 sampai dengan 8 5 m (L + R) / 2 6 Jika (Data*m+ = x) maka ditemukan true 7 Jika (x < Data*m+) maka R m 1 8 Jika (x > Data*m+) maka L m + 1 9 Jika (ditemukan) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan. Di bawah ini merupakan fungsi untuk mencari data menggunakan pencarian biner. int BinarySearch(int x) { int L = 0, R = Max-1, m; bool ditemukan = false; while((L <= R) && (!ditemukan)) { m = (L + R) / 2; if(Data[m] == x) ditemukan = true; else if (x < data[m]) R = m - 1; else L = m + 1; } if(ditemukan) return m; else return -1; } Fungsi diatas akan mengembalikan indeks dari data yang dicari. Apabila data tidak ditemukan maka fungsi diatas akan mengembalikan nilai 1. Jumlah pembandingan minimum pada pencarian biner adalah 1 kali, yaitu apabila data yang dicari tepat berada di tengah-tengah. Jumlah pembandingan maksimum yang dilakukan dengan pencarian biner dapat dicari menggunakan rumus logaritma, yaitu : C = 2log(N) Kesimpulan 1. Algoritma pencarian berurutan digunakan untuk mencari data pada sekumpulan data atau rekaman yang masih acak 2. Algoritma pencarian biner digunakan untuk mencari data pada sekumpulan data atau rekaman yang sudah dalam keadaan terurut. Berikut ialah contoh implementasi dalam bentuk program dari metode-metode searching yang telah dibahas:
MAKALAH BINARY SEARCH
PENDAHULUAN A. Latar Belakang Seiring dengan berkembangnya Teknologi Informasi, yang membutuhkan kecepatan dan ketepatan dalam berbagai aspek kehidupan. Kita dituntut untuk bergerak cepat dalam segala hal, termasuk juga dalam bidang komunikasi informasi. Salah satunya dalam bidang statistic yang meliputi pencarian data. Sehingga banyak programer yang membuat program yang mempermudah kerja dalam bidang statistika dan informasi, yakni dalam hal pencarian data. Dari program pencarian data terdapat algoritma-algoritma yang digunakan untuk mencari sebuah data, salah satunya adalah 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.
B. Rumusan Masalah -Bagaimana cara mencari data dengan cepat dan ukurat?
C. Batasan Masalah Pada materi makalah ini akan dibahas mengenai salah satu metode pencarian, yaitu Binary Search. Pada sesi ini hanya akan membahas mengenai: Pengertian/konsep binary search Algoritma binary search Contoh study kasus Contoh program binary search D. Tujuan - Mempermudah pekerjaan manusia dalam bidang Informasi. - Mempermudah pekerjaan manusia dalam bidang Statistik. - Mempermudah pekerjaan manusia dalam bidang komputerisasi lainya terutama dalam bidang pencarian data. E. Manfaat - Pekerjaan manusia dalam bidang teknologi jadi lebih mudah, cepat, dan efisien waktu.
PEMBAHASAN 1. Konsep Pengertian Sebuah algoritma pencarian biner (atau pemilahan biner) adalah sebuah teknik untuk menemukan nilai tertentu dalam sebuah larik (array) linear, dengan menghilangkan setengah data pada setiap langkah, dipakai secara luas tetapi tidak secara ekslusif dalam ilmu komputer. Sebuah pencarian biner mencari nilai tengah (median), melakukan sebuah pembandingan untuk menentukan apakah nilai yang dicari ada sebelum atau sesudahnya, kemudian mencari setengah sisanya dengan cara yang sama. Pada intinya, algoritma ini menggunakan prinsip divide and conquer, dimana sebuah masalah atau tujuan diselesaikan dengan cara mempartisi masalah menjadi bagian yang lebih kecil. Algoritma ini membagi sebuah tabel menjadi dua dan memproses satu bagian dari tabel itu saja.Algoritma ini bekerja dengan cara memilih record dengan indeks tengah dari tabel dan membandingkannya dengan record yang hendak dicari. Jika record tersebut lebih rendah atau lebih tinggi, maka tabel tersebut dibagi dua dan bagian tabel yang bersesuaian akan diproses kembali secara rekursif. Penerapan terbanyak dari pencarian biner adalah untuk mencari sebuah nilai tertentu dalam sebuah list terurut. Jika dibayangkan, pencarian biner dapat dilihat sebagai sebuah permainan tebaktebakan, kita menebak sebuah bilangan, atau nomor tempat, dari daftar (list) nilai. Pencarian diawali dengan memeriksa nilai yang ada pada posisi tengah list; oleh karena nilai-nilainya terurut, kita mengetahui apakah nilai terletak sebelum atau sesudah nilai yang di tengah tersebut, dan pencarian selanjutnya dilakukan terhadap setengah bagian dengan cara yang sama. Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array sudah terurut. Pengurutan Array bisa menggunakan jenis sorting descending atau asscending.
Keunggulan Keunggulan utama dari algoritma binary search adalah kompleksitas algoritmanya yang lebih kecil daripada kompleksitas algoritma sequential search. Hal ini menyebabkan waktu yang dibutuhkan algoritma binary search dalam mencari sebuah record dalam sebuah table, lebih kecil daripada waktu yang dibutuhkan algoritma sequential search. eKelemahan
Data harus disorting dahulu dan algoritma lebih rumit, tidak baik untuk data berantai. algoritma ini hanya bisa digunakan pada tabel yang elemennya sudah terurut baik menaik maupun menurun. Fungsi Pencarian Biner (Binary Search) dilakukan untuk : Memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya. Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan data tidak ditemukan). Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut, misalkan terurut menaik. Prinsip dari pencarian biner dapat dijelaskan sebagai berikut : Data diambil dari posisi 1 sampai posisi akhir N Kemudian cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2 Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar? Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah 1 Jika data sama, berarti ketemu.
Untuk lebih jelasnya, perhatikan contoh berikut. Misalkan kita ingin mencari 17 pada sekumpulan data berikut:
1. Mulamula dicari data tengah, dengan rumus (1+ 9) / 2 = 5. 2. Berarti data tengah adalah data ke-5, yaitu 15. 3. Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini. 4. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 6.
1. Data tengah yang baru didapat dengan rumus (6 + 9) / 2 = 7. Berarti data tengah yang baru adalah data ke-7, yaitu 23. 2. Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3. Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah 1 atau 6.
1. Data tengah yang baru didapat dengan rumus (6 + 6) / 2 = 6. Berarti data tengah yang baru adalah data ke-6, yaitu 17. 2. Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-6. 3. Bagaimana jika data yang dicari tidak ada, misalnya 16? 4. Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari posisi akhir. 5. Jika posisi awal sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16 pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi awal = 6 dan posisi akhir = 5 Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang artinya data tidak ditemukan. 2. Algoritma dari Binary search Algoritma pencarian biner dapat dituliskan sebagai berikut : 1L0 2RN-1 3 ketemu false 4 Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8 5 m (L + R) / 2 6 Jika (Data*m+ = x) maka ketemu true 7 Jika (x < Data*m+) maka R m 1 8 Jika (x > Data*m+) maka L m + 1 9 Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan 3. Contoh Studi Kasus Sebuah contoh aksi pencarian biner adalah sebuah permainan tebak-tebakan dimana seorang pemain harus menebak sebuah bilangan bulat positif yang dipilih oleh pemain lain di antara 1 dan N, dengan memanfaatkan jawaban pertanyaan berupa ya dan tidak. Misalnya N adalah 16 dan angka yang dipilih adalah 11, permainan dapat berjalan sebagai berikut: Apakah angka lebih besar dari 8? (ya)
Apakah angka lebih besar dari 12? (tidak) Apakah angka lebih besar dari 10? (ya) Apakah angka lebih besar dari 11? (tidak) Sehingga, angka tersebut pasti 11. Pada setiap langkah, kita memilih sebuah angka yang tepat berada di tengah-tengah jangkauan nilai-nilai yang mungkin. Sebagai contoh, saat kita mengetahui angka tersebut lebih besar dari 8, tetapi lebih kecil atau sama dengan 12, kita mengetahui untuk memilih angka di tengah-tengah jangkauan [9, 12] (pada kasus ini 10 adalah yang optimal). 4. Program #include <iostream> #include <conio.h> int binary_s(int array[], int size, int elemen); int main() { int size=10; int data[10]={2, 3, 5, 6, 12, 44, 56, 65, 73 ,81} ; cout<<"Data Array"<<endl; int i; for(i=0;i<size;i++) cout<<data[i]<<" "; cout<<endl<<endl<<"masukkan data yang ingin anda cari: "; int cari; cin>>cari; // pencarian int hasil; hasil = binary_s(data, size, cari); if (hasil==0) cout<<"Nilai tidak ditemukan"; else cout<<"Nilai ditemukan"; getch(); } int binary_s(int array[], int size, int elemen) { int awal = 0; int akhir = size-1; int nilaiTengah = (awal+akhir)/2; while (nilaiTengah<=size && awal<=akhir) { nilaiTengah = (awal+akhir)/2; if (array[nilaiTengah]==elemen) return 1; else if (elemen<array[nilaiTengah]) akhir = nilaiTengah-1; else awal = nilaiTengah+1; } return 0; }
PENUTUP Kesimpulan Kesimpulan yang dapat ditarik dari makalah binary search ini yaitu Algoritma pencarian biner digunakan untuk mencari data pada sekumpulan data atau rekaman yang sudah dalam keadaan terurut. Selain itu kita dapat mempermudah pekerjaan manusia dalam bidang Informasi, mempermudah dalam bidang Statistik, mempermudah pekerjaan manusia dalam bidang komputerisasi lainya terutama dalam bidang pencarian data. Dengan binary search ini kita dapat mempermudah pekerjaan manusia di dalam hal mencari sebuah data. Sehingga dapat menciptakan suatu progam yang bermanfaat dan memiliki nilai ekonomi. Saran - Teliti dalam menghitung binary code - Teliti dalam menghitung nilai tengah dari binary code - Dan yang terpenting adalah teliti dalam memasukan bahasa pemograman pada saat mengcompile(ngoding). DAFTAR PUSTAKA http://diankuusuma.blogspot.com/2012/01/v-behaviorurldefaultvmlo.html http://ekawirawanptn.blogspot.com/2010/05/algoritma-binary-search.html http://kabehatake.blogspot.com/2010/05/algoritma-binary-search.html http://aloen-pop.blogspot.com/2009/06/binary-searching.html http://lecturer.eepis-its.edu/...%20Algoritma/.../Data%20Structure-bab8.pdf http://mita.staff.gunadarma.ac.id/Downloads/files/.../Divide%26Conquer.doc http://en.wikipedia.org/wiki/Binary_search