Tutorial ini akan Menjelaskan Carian Binari & Carian Perduaan Rekursif di Jawa bersama-sama dengan Algoritma, Pelaksanaan dan Kod Carian Perduaan Java Contoh:
Carian binari dalam Java ialah teknik yang digunakan untuk mencari nilai yang disasarkan atau kunci dalam koleksi. Ia ialah teknik yang menggunakan teknik "bahagi dan takluk" untuk mencari kunci.
Koleksi yang digunakan carian Binari untuk mencari kunci perlu diisih dalam tertib menaik.
Biasanya, kebanyakan bahasa pengaturcaraan menyokong teknik Carian Linear, Carian Binari dan Hashing yang digunakan untuk mencari data dalam koleksi. Kami akan mempelajari pencincangan dalam tutorial kami yang seterusnya.
Carian Binari Dalam Java
Carian linear ialah teknik asas. Dalam teknik ini, tatasusunan dilalui secara berurutan dan setiap elemen dibandingkan dengan kunci sehingga kunci ditemui atau penghujung tatasusunan dicapai.
Carian linear jarang digunakan dalam aplikasi praktikal. Carian binari ialah teknik yang paling kerap digunakan kerana ia jauh lebih pantas daripada carian linear.
Java menyediakan tiga cara untuk melakukan carian binari:
- Menggunakan pendekatan berulang
- Menggunakan pendekatan rekursif
- Menggunakan kaedah Arrays.binarySearch ().
Dalam tutorial ini, kami akan melaksanakan dan membincangkan semua ini 3 kaedah.
Algoritma Untuk Carian Binari Dalam Java
Dalam binarikaedah carian, koleksi berulang kali dibahagikan kepada separuh dan elemen utama dicari di separuh kiri atau kanan koleksi bergantung pada sama ada kunci kurang daripada atau lebih besar daripada elemen pertengahan koleksi.
Algoritma Carian Perduaan yang mudah adalah seperti berikut:
- Kira elemen pertengahan koleksi.
- Bandingkan item utama dengan elemen pertengahan.
- Jika kunci = elemen tengah, maka kami mengembalikan kedudukan indeks pertengahan untuk kunci yang ditemui.
- Lain Jika kunci > elemen pertengahan, maka kuncinya terletak pada separuh kanan koleksi. Oleh itu, ulangi langkah 1 hingga 3 pada bahagian bawah (kanan) separuh koleksi.
- Kekunci lain elemen pertengahan, maka kuncinya berada di bahagian atas koleksi. Oleh itu, anda perlu mengulangi carian binari di bahagian atas.
Seperti yang anda boleh lihat daripada langkah di atas, dalam carian Binari, separuh elemen dalam koleksi diabaikan selepas perbandingan pertama.
Perhatikan bahawa urutan langkah yang sama berlaku untuk carian binari berulang dan juga rekursif.
Mari kita menggambarkan algoritma carian binari menggunakan contoh.
Contohnya , ambil tatasusunan tersusun 10 elemen berikut.
Mari kita hitung lokasi tengah tatasusunan.
Pertengahan = 0+9/2 = 4
#1) Kunci = 21
Pertama, kita akan membandingkan nilai kunci dengan elemen [pertengahan] dan kami mendapati bahawa nilai elemen padapertengahan = 21.
Oleh itu kita dapati kunci itu = [pertengahan]. Oleh itu kunci ditemui pada kedudukan 4 dalam tatasusunan.
#2) Kunci = 25
Kami mula-mula membandingkan kunci nilai hingga pertengahan. Sebagai (21 25), kita akan terus mencari kunci di bahagian atas tatasusunan.
Sekarang sekali lagi kita akan mencari pertengahan untuk separuh atas tatasusunan.
Pertengahan = 4+9/2 = 6
Nilai di lokasi [pertengahan] = 25
Sekarang kita bandingkan elemen utama dengan elemen pertengahan. Jadi (25 == 25), maka kami telah menemui kunci di lokasi [pertengahan] = 6.
Oleh itu kami berulang kali membahagi tatasusunan dan dengan membandingkan elemen utama dengan pertengahan, kami memutuskan separuh yang cari kunci. Carian binari lebih cekap dari segi masa dan ketepatan serta jauh lebih pantas.
Perlaksanaan Carian Binari Java
Dengan menggunakan algoritma di atas, marilah kita melaksanakan program carian Binari di Jawa menggunakan pendekatan berulang. Dalam atur cara ini, kami mengambil tatasusunan contoh dan melakukan carian binari pada tatasusunan ini.
import java.util.*; class Main{ public static void main(String args[]){ int numArray[] = {5,10,15,20,25,30,35}; System.out.println("The input array: " + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println("\nKey to be searched=" + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first = last ){ //if the mid key, then key to be searched is in the first half of array if ( numArray[mid] last ){ System.out.println("Element is not found!"); } } }
Output:
Susun atur input: [5, 10, 15, 20 , 25, 30, 35]
Kunci untuk dicari=20
Elemen ditemui pada indeks: 3
Atur cara di atas menunjukkan pendekatan berulang carian Binari. Pada mulanya, tatasusunan diisytiharkan, kemudian kunci yang hendak dicari ditentukan.
Selepas mengira pertengahan tatasusunan, kunci itu dibandingkan dengan elemen pertengahan. Kemudian bergantung kepada sama adakunci kurang daripada atau lebih besar daripada kunci, kunci dicari di bahagian bawah atau bahagian atas tatasusunan masing-masing.
Carian Binari Rekursif Di Java
Anda juga boleh melakukan carian binari menggunakan teknik rekursi. Di sini, kaedah carian binari dipanggil secara rekursif sehingga kunci ditemui atau keseluruhan senarai habis.
Atur cara yang melaksanakan carian binari rekursif diberikan di bawah:
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray[], int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray[mid] return mid if (intArray[mid] == key){ return mid; } //if intArray[mid] > key then key is in left half of array if (intArray[mid] > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args[]){ //define array and key int intArray[] = {1,11,21,31,41,51,61,71,81,91}; System.out.println("Input List: " + Arrays.toString(intArray)); int key = 31; System.out.println("\nThe key to be searched:" + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println("\nKey not found in given list!"); else System.out.println("\nKey is found at location: "+result + " in the list"); } }
Output:
Senarai Input: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Kunci untuk dicari :
Kunci ditemui di lokasi: 3 dalam senarai
Menggunakan kaedah Arrays.binarySearch ().
Kelas Tatasusunan dalam Java menyediakan kaedah 'binarySearch ()' yang melaksanakan carian binari pada Tatasusunan yang diberikan. Kaedah ini mengambil tatasusunan dan kunci untuk dicari sebagai argumen dan mengembalikan kedudukan kunci dalam tatasusunan. Jika kunci tidak ditemui, maka kaedah mengembalikan -1.
Contoh di bawah melaksanakan kaedah Arrays.binarySearch ().
import java.util.Arrays; class Main{ public static void main(String args[]){ //define an array int intArray[] = {10,20,30,40,50,60,70,80,90}; System.out.println("The input Array : " + Arrays.toString(intArray)); //define the key to be searched int key = 50; System.out.println("\nThe key to be searched:" + key); //call binarySearch method on the given array with key to be searched int result = Arrays.binarySearch(intArray,key); //print the return result if (result 0) System.out.println("\nKey is not found in the array!"); else System.out.println("\nKey is found at index: "+result + " in the array."); } }
Output:
Susun Input : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Kunci untuk dicari:50
Kunci ditemui pada indeks: 4 dalam tatasusunan.
Soalan Lazim
S #1) Bagaimana anda menulis carian binari ?
Jawapan: Carian binari biasanya dilakukan dengan membahagikan tatasusunan kepada dua bahagian. Jika kunci yang hendak dicari lebih besar daripada elemen pertengahan,kemudian bahagian atas tatasusunan dicari dengan membahagikan dan mencari sub-tatasusunan sehingga kunci ditemui.
Begitu juga, jika kunci kurang daripada elemen pertengahan, maka kunci itu dicari di bahagian bawah separuh daripada tatasusunan.
S #2) Di manakah carian binari digunakan?
Jawapan: Carian binari digunakan terutamanya untuk mencari mengisih data dalam aplikasi perisian terutamanya apabila ruang memori padat dan terhad.
S #3) Apakah O besar carian binari?
Jawapan : Kerumitan masa carian binari ialah O (logn) dengan n ialah bilangan elemen dalam tatasusunan. Kerumitan ruang carian binari ialah O (1).
S #4) Adakah carian binari rekursif?
Jawapan: Ya. Memandangkan carian binari ialah contoh strategi bahagi-dan-takluk dan ia boleh dilaksanakan menggunakan rekursi. Kita boleh membahagikan tatasusunan kepada separuh dan memanggil kaedah yang sama untuk melakukan carian binari berulang kali.
S #5) Mengapakah ia dipanggil carian binari?
Jawapan: Algoritma carian binari menggunakan strategi bahagi-dan-takluk yang berulang kali memotong tatasusunan kepada separuh atau dua bahagian. Oleh itu ia dinamakan sebagai carian binari.
Kesimpulan
Carian binari ialah teknik carian yang kerap digunakan di Jawa. Keperluan untuk carian binari dilakukan ialah data harus diisih dalam tertib menaik.
Carian binari bolehdilaksanakan sama ada menggunakan pendekatan berulang atau rekursif. Kelas Tatasusunan dalam Java juga menyediakan kaedah 'binarySearch' yang melakukan carian binari pada Tatasusunan.
Dalam tutorial kami yang seterusnya, kami akan meneroka pelbagai Teknik Isih dalam Java.