Bu Dərslik İkili Axtarışı və amp; Java-da rekursiv Binar Axtarış, Alqoritm, Tətbiq və Java Binar Axtarış Kodu Nümunələri:
Java-da ikili axtarış kolleksiyada hədəflənmiş dəyər və ya açarı axtarmaq üçün istifadə edilən texnikadır. Bu, açarı axtarmaq üçün “böl və fəth et” texnikasından istifadə edən texnikadır.
Açar axtarmaq üçün Binar axtarışın tətbiq ediləcəyi kolleksiya artan qaydada sıralanmalıdır.
Adətən, proqramlaşdırma dillərinin əksəriyyəti kolleksiyada verilənləri axtarmaq üçün istifadə olunan Xətti axtarış, Binar axtarış və Hashing üsullarını dəstəkləyir. Biz sonrakı dərslərimizdə hashing öyrənəcəyik.
Java-da Binar Axtarış
Xətti axtarış əsas texnikadır. Bu texnikada massiv ardıcıl olaraq keçilir və açar tapılana və ya massivin sonuna çatana qədər hər bir element açarla müqayisə edilir.
Xətti axtarış praktik tətbiqlərdə nadir hallarda istifadə olunur. İkili axtarış xətti axtarışdan daha sürətli olduğu üçün ən çox istifadə edilən texnikadır.
Java ikili axtarışı yerinə yetirmək üçün üç üsul təqdim edir:
- İstifadə etmək iterativ yanaşma
- Rekursiv yanaşmadan istifadə
- Arrays.binarySearch () metodundan istifadə.
Bu dərslikdə biz bütün bunları həyata keçirəcək və müzakirə edəcəyik 3 üsul.
Java-da Binar Axtarış Alqoritmi
İkili sistemdəaxtarış metodunda kolleksiya dəfələrlə yarıya bölünür və açarın kolleksiyanın orta elementindən kiçik və ya böyük olmasından asılı olaraq əsas element kolleksiyanın sol və ya sağ yarısında axtarılır.
Sadə İkili Axtarış Alqoritmi aşağıdakı kimidir:
- Kolleksiyanın orta elementini hesablayın.
- Əsas elementləri orta elementlə müqayisə edin.
- Əgər açar = orta elementdirsə, onda tapılan açar üçün orta indeks mövqeyini qaytarırıq.
- Else If key > orta element, sonra açar kolleksiyanın sağ yarısında yerləşir. Beləliklə, kolleksiyanın aşağı (sağ) yarısında 1-3 addımları təkrarlayın.
- Else düyməsi orta element, sonra açar kolleksiyanın yuxarı yarısındadır. Beləliklə, siz yuxarı yarıda ikili axtarışı təkrar etməlisiniz.
Yuxarıdakı addımlardan göründüyü kimi, Binar axtarışda kolleksiyadakı elementlərin yarısı ilk müqayisədən dərhal sonra nəzərə alınmır.
Nəzərə alın ki, eyni addımlar ardıcıllığı iterativ və rekursiv binar axtarış üçün də keçərlidir.
Nümunədən istifadə edərək binar axtarış alqoritmini təsvir edək.
Məsələn, , 10 elementdən ibarət aşağıdakı çeşidlənmiş massivi götürün.
Gəlin massivin orta yerini hesablayaq.
Mid = 0+9/2 = 4
#1) Açar = 21
İlk olaraq açar dəyəri ilə müqayisə edəcəyik [mid] elementi və biz elementin dəyərini tapırıqmid = 21.
Beləliklə, biz həmin açarı = [orta] tapırıq. Beləliklə, açar massivdə 4-cü mövqedə tapılır.
#2) Açar = 25
Əvvəlcə açarı müqayisə edirik orta dəyər. (21 25) olaraq biz birbaşa massivin yuxarı yarısında açarı axtaracağıq.
İndi yenə də yuxarı yarısının ortasını tapacağıq. massiv.
Orta = 4+9/2 = 6
Yerdəki dəyər [orta] = 25
İndi biz əsas elementi orta elementlə müqayisə edin. Beləliklə (25 == 25), buna görə də biz açarı [mid] = 6 yerində tapdıq.
Beləliklə, biz massivi təkrar-təkrar bölürük və əsas elementi orta ilə müqayisə edərək, hansı yarıda olacağına qərar veririk. açarı axtarın. İkili axtarış vaxt və düzgünlük baxımından daha səmərəlidir və həm də daha sürətlidir.
Binar Axtarış Tətbiqi Java
Yuxarıdakı alqoritmdən istifadə edərək, Java-da Binar axtarış proqramını həyata keçirək. iterativ yanaşma. Bu proqramda biz misal massivi götürürük və bu massivdə binar axtarış aparırıq.
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!"); } } }
Çıxış:
Giriş massivi: [5, 10, 15, 20 , 25, 30, 35]
Axtarılacaq açar=20
Element indeksdə tapılıb: 3
Yuxarıdakı proqram İkili axtarışın iterativ yanaşmasını göstərir. Əvvəlcə massiv elan edilir, sonra axtarılacaq açar müəyyən edilir.
Massivin ortası hesablandıqdan sonra açar orta elementlə müqayisə edilir. Sonra olub-olmamasından asılı olaraqaçar açardan kiçik və ya ondan böyükdürsə, açar müvafiq olaraq massivin aşağı və ya yuxarı yarısında axtarılır.
Java-da rekursiv Binar Axtarış
Siz həmçinin ikili axtarışı da həyata keçirə bilərsiniz. rekursiya texnikasından istifadə etməklə. Burada ikili axtarış metodu açar tapılana və ya bütün siyahı tükənənə qədər rekursiv çağırılır.
Rekursiv binar axtarışı həyata keçirən proqram aşağıda verilmişdir:
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"); } }
Çıxış:
Daxiletmə siyahısı: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Axtarılacaq açar :
Açar siyahıda 3-də tapılıb
Arrays.binarySearch () metodundan istifadə etməklə.
Java-dakı Arrays sinfi verilmiş Massivdə binar axtarışı həyata keçirən ‘binarySearch ()’ metodunu təmin edir. Bu üsul massivi və axtarılacaq açarı arqument kimi götürür və açarın massivdəki yerini qaytarır. Açar tapılmadıqda, metod -1 qaytarır.
Aşağıdakı nümunə Arrays.binarySearch () metodunu tətbiq edir.
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."); } }
Çıxış:
Giriş massivi : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Axtarılacaq açar:50
Açar serialda 4 indeksində tapılır.
Tez-tez verilən suallar
S #1) İkili axtarışı necə yazırsınız ?
Cavab: Binar axtarış adətən massivi yarıya bölməklə həyata keçirilir. Axtarılacaq açar orta elementdən böyükdürsə,sonra massivin yuxarı yarısı daha da bölünərək və açar tapılana qədər alt massivi axtararaq axtarılır.
Eləcə də açar orta elementdən kiçikdirsə, açar aşağı hissədə axtarılır. massivin yarısı.
Q #2) Binar axtarış harada istifadə olunur?
Cavab: İkili axtarış əsasən aranması üçün istifadə olunur. Xüsusilə yaddaş sahəsi yığcam və məhdud olduqda proqram tətbiqlərində çeşidlənmiş verilənlər.
S №3) Binar axtarışın böyük O nədir?
Cavab : Binar axtarışın vaxt mürəkkəbliyi O (logn)-dir, burada n massivdəki elementlərin sayıdır. Binar axtarışın fəza mürəkkəbliyi O (1)-dir.
Q #4) Binar axtarış rekursivdirmi?
Cavab: Bəli. İkili axtarış böl və fəth strategiyasına bir nümunə olduğundan və rekursiyadan istifadə etməklə həyata keçirilə bilər. Biz massivi yarıya bölə və ikili axtarışı təkrar-təkrar yerinə yetirmək üçün eyni metodu çağıra bilərik.
Q #5) Nəyə görə o binar axtarış adlanır?
Cavab: İkili axtarış alqoritmi massivi dəfələrlə yarıya və ya iki hissəyə kəsən böl və fəth strategiyasından istifadə edir. Beləliklə, o, binar axtarış adlanır.
Nəticə
İkili axtarış Java-da tez-tez istifadə olunan axtarış texnikasıdır. İkili axtarışın yerinə yetirilməsi üçün tələb odur ki, verilənlər artan qaydada çeşidlənməlidir.
İkili axtarış ola bilər.iterativ və ya rekursiv yanaşmadan istifadə etməklə həyata keçirilir. Java-dakı massivlər sinfi həmçinin massivdə ikili axtarışı həyata keçirən 'binarySearch' metodunu təqdim edir.
Sonrakı dərsliklərimizdə Java-da müxtəlif Çeşidləmə Texnikalarını araşdıracağıq.