Tutorial ini akan menjelaskan tentang Binary Search & Recursive Binary Search di Java beserta Algoritma, Implementasi, dan Contoh Kode Pencarian Biner Java:
Pencarian biner di Java adalah teknik yang digunakan untuk mencari nilai atau kunci yang ditargetkan dalam sebuah koleksi, yaitu teknik yang menggunakan teknik "bagi dan taklukkan" untuk mencari sebuah kunci.
Koleksi yang akan digunakan pencarian Biner untuk mencari sebuah kunci harus diurutkan dalam urutan menaik.
Biasanya, sebagian besar bahasa pemrograman mendukung teknik pencarian Linear, pencarian Biner, dan Hashing yang digunakan untuk mencari data di dalam koleksi. Kita akan mempelajari hashing di tutorial selanjutnya.
Pencarian Biner di Java
Pencarian linear adalah teknik dasar. Dalam teknik ini, larik ditelusuri secara berurutan dan setiap elemen dibandingkan dengan kunci sampai kunci ditemukan atau akhir larik tercapai.
Pencarian linear jarang digunakan dalam aplikasi praktis. Pencarian biner adalah teknik yang paling sering digunakan karena jauh lebih cepat daripada pencarian linear.
Java menyediakan tiga cara untuk melakukan pencarian biner:
- Menggunakan pendekatan berulang
- Menggunakan pendekatan rekursif
- Menggunakan metode Arrays.binarySearch ().
Dalam tutorial ini, kita akan mengimplementasikan dan mendiskusikan ketiga metode ini.
Algoritma Untuk Pencarian Biner Di Java
Dalam metode pencarian biner, koleksi berulang kali dibagi menjadi dua dan elemen kunci dicari di bagian kiri atau kanan koleksi, tergantung pada apakah kuncinya kurang dari atau lebih besar dari elemen tengah koleksi.
Algoritma Pencarian Biner sederhana adalah sebagai berikut:
- Hitung elemen tengah dari koleksi.
- Bandingkan item kunci dengan elemen tengah.
- Jika key = elemen tengah, maka kita akan mengembalikan posisi indeks tengah untuk key yang ditemukan.
- Else Jika kunci> elemen tengah, maka kunci terletak di bagian kanan koleksi. Dengan demikian, ulangi langkah 1 hingga 3 pada bagian bawah (kanan) koleksi.
- Jika kuncinya adalah elemen tengah, maka kuncinya berada di bagian atas koleksi. Oleh karena itu, Anda perlu mengulangi pencarian biner di bagian atas.
Seperti yang dapat Anda lihat dari langkah-langkah di atas, dalam pencarian Biner, setengah dari elemen dalam koleksi diabaikan setelah perbandingan pertama.
Perhatikan bahwa urutan langkah yang sama berlaku untuk pencarian biner berulang maupun rekursif.
Mari kita ilustrasikan algoritme pencarian biner dengan menggunakan sebuah contoh.
Sebagai contoh, ambil larik terurut berikut ini yang terdiri atas 10 elemen.
Mari kita hitung lokasi tengah array.
Nilai tengah = 0 + 9/2 = 4
#1) Kunci = 21
Pertama, kita akan membandingkan nilai kunci dengan elemen [mid] dan kita akan menemukan bahwa nilai elemen pada mid = 21.
Dengan demikian kita menemukan bahwa kunci = [mid]. Oleh karena itu kunci ditemukan pada posisi 4 dalam larik.
#2) Kunci = 25
Pertama-tama, kita bandingkan nilai kunci dengan nilai tengahnya. Seperti (21 <25), kita akan langsung mencari kunci di bagian atas larik.
Sekarang, sekali lagi kita akan menemukan bagian tengah untuk bagian atas array.
Tengah = 4 + 9/2 = 6
Nilai di lokasi [tengah] = 25
Sekarang kita bandingkan elemen kunci dengan elemen tengah, jadi (25 == 25), maka kita telah menemukan kunci di lokasi [tengah] = 6.
Dengan demikian, kita berulang kali membagi larik dan dengan membandingkan elemen kunci dengan bagian tengahnya, kita memutuskan di bagian mana kita akan mencari kuncinya. Pencarian biner lebih efisien dalam hal waktu dan ketepatan, serta jauh lebih cepat.
Implementasi Pencarian Biner Java
Dengan menggunakan algoritma di atas, mari kita implementasikan program pencarian Biner di Java dengan menggunakan pendekatan iteratif. Pada program ini, kita mengambil sebuah contoh larik dan melakukan pencarian biner pada larik tersebut.
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("Array masukan: " + Arrays.toString(numArray)); //kunci yang akan dicari int key = 20; System.out.println("\nKunci yang akan dicari = "+ key); //mengatur indeks pertama hingga pertama int first = 0; //mengatur elemen terakhir hingga terakhir pada array int last = numArray.length-1; //menghitung pertengahan dariarray int mid = (first + last)/2; //sementara first dan last tidak tumpang tindih while( first <= last ){ //jika kunci mid <, maka kunci yang akan dicari berada di paruh pertama array if (numArray[mid] last ){ System.out.println("Elemen tidak ditemukan!"); } }
Keluaran:
Larik masukan: [5, 10, 15, 20, 25, 30, 35]
Kunci yang akan dicari = 20
Elemen ditemukan pada indeks: 3
Program di atas menunjukkan pendekatan iteratif dari pencarian Biner. Awalnya, sebuah larik dideklarasikan, kemudian kunci yang akan dicari didefinisikan.
Setelah menghitung nilai tengah larik, kunci dibandingkan dengan elemen tengah, kemudian tergantung pada apakah kunci kurang dari atau lebih besar dari kunci, kunci dicari di bagian bawah atau atas larik.
Pencarian Biner Rekursif di Java
Anda juga dapat melakukan pencarian biner dengan menggunakan teknik rekursi. Di sini, metode pencarian biner dilakukan secara rekursif sampai kunci ditemukan atau seluruh daftar habis.
Program yang mengimplementasikan pencarian biner rekursif diberikan di bawah ini:
import java.util.*; class Main{ //metode rekursif untuk pencarian biner public static int binary_Search(int intArray[], int low, int high, int key){ //jika array berurutan maka lakukan pencarian biner pada array tersebut if (high>=low){ //hitung pertengahan int mid = low + (high - low)/2; //jika key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //jika intArray[mid]> key maka key berada di sebelah kirisetengah dari array if (intArray[mid]> key){ return binary_Search(intArray, low, mid-1, key);// mencari key secara rekursif } else //key berada di setengah kanan array { return binary_Search(intArray, mid+1, high, key);// mencari key secara rekursif } } return -1; } public static void main(String args[]){ // mendefinisikan array dan key int intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("InputList: "+ Arrays.toString(intArray)); int key = 31; System.out.println("\nKunci yang akan dicari: "+ key); int high = intArray.length-1; //memanggil metode pencarian biner int hasil = binary_Search(intArray,0,high,key); //mencetak hasil if (hasil == -1) System.out.println("\nKunci tidak ditemukan di dalam daftar yang diberikan!"); else System.out.println("\nKunci ditemukan pada lokasi: "+hasil + " di dalam daftar"); } }
Keluaran:
Daftar Masukan: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Kunci yang akan dicari:
Kunci ditemukan di lokasi: 3 dalam daftar
Menggunakan metode Arrays.binarySearch ().
Kelas Array di Java menyediakan metode 'binarySearch ()' yang melakukan pencarian biner pada Array yang diberikan. Metode ini mengambil larik dan kunci yang akan dicari sebagai argumen dan mengembalikan posisi kunci dalam larik. Jika kunci tidak ditemukan, maka metode ini mengembalikan -1.
Contoh di bawah ini mengimplementasikan metode Arrays.binarySearch ().
import java.util.Arrays; class Main{ public static void main(String args[]){ //define array int intArray[] = {10,20,30,40,50,60,70,80,90}; System.out.println("Array masukan: " + Arrays.toString(intArray)); //define kunci yang akan dicari int key = 50; System.out.println("\nKunci yang akan dicari: " + key); //memanggil metode binarySearch pada array yang diberikan dengan kunci yang akan dicari int hasil =Arrays.binarySearch(intArray,key); //cetak hasil yang dikembalikan if (hasil <0) System.out.println("\nKey tidak ditemukan di array!"); else System.out.println("\nKey ditemukan pada indeks: "+hasil + " di array."); } }
Keluaran:
Array masukan: [10, 20, 30, 40, 50, 50, 60, 70, 80, 90]
Kunci yang akan dicari:50
Kunci ditemukan pada indeks: 4 dalam larik.
Pertanyaan yang Sering Diajukan
T #1) Bagaimana Anda menulis pencarian biner?
Jawaban: Pencarian biner biasanya dilakukan dengan membagi larik menjadi dua bagian. Jika kunci yang akan dicari lebih besar dari elemen tengah, maka bagian atas larik akan dicari dengan membagi lebih lanjut dan mencari sub-larik sampai kunci ditemukan.
Demikian pula, jika kunci kurang dari elemen tengah, maka kunci dicari di bagian bawah larik.
T # 2) Di mana pencarian biner digunakan?
Jawaban: Pencarian biner terutama digunakan untuk mencari data yang diurutkan dalam aplikasi perangkat lunak, terutama ketika ruang memori yang ada sangat terbatas.
T # 3) Apa yang dimaksud dengan O besar dalam pencarian biner?
Jawaban: Kompleksitas waktu dari pencarian biner adalah O (logn) di mana n adalah jumlah elemen dalam larik. Kompleksitas ruang dari pencarian biner adalah O (1).
T #4) Apakah pencarian biner bersifat rekursif?
Jawaban: Ya, karena pencarian biner adalah contoh dari strategi bagi-dan-taklukkan dan dapat diimplementasikan dengan menggunakan rekursi. Kita dapat membagi larik menjadi dua bagian dan memanggil metode yang sama untuk melakukan pencarian biner berulang kali.
T #5) Mengapa ini disebut pencarian biner?
Jawaban: Algoritma pencarian biner menggunakan strategi bagi-dan-taklukkan yang secara berulang kali memotong larik menjadi dua bagian, sehingga dinamakan pencarian biner.
Kesimpulan
Pencarian biner adalah teknik pencarian yang sering digunakan di Java. Persyaratan untuk melakukan pencarian biner adalah data harus diurutkan dalam urutan menaik.
Pencarian biner dapat diimplementasikan dengan menggunakan pendekatan iteratif atau rekursif. Kelas Array di Java juga menyediakan metode 'binarySearch' yang melakukan pencarian biner pada Array.
Dalam tutorial berikutnya, kita akan mengeksplorasi berbagai Teknik Pengurutan di Java.