Энэ заавар нь хоёртын хайлт & Жава хэл дээрх рекурсив хоёртын хайлт, түүний алгоритм, хэрэгжүүлэлт, Java хоёртын хайлтын кодын хамт жишээ:
Java дахь хоёртын хайлт нь цуглуулгын зорилтот утга эсвэл түлхүүрийг хайхад ашигладаг техник юм. Энэ нь түлхүүр хайхдаа "хувааж, ялах" аргыг ашигладаг арга юм.
Түлхүүр хайхдаа хоёртын хайлтыг ашиглах цуглуулгыг өсөх дарааллаар эрэмбэлэх шаардлагатай.
Ихэвчлэн програмчлалын хэлнүүдийн ихэнх нь шугаман хайлт, хоёртын хайлт, цуглуулгын өгөгдлийг хайхад ашигладаг Hashing техникийг дэмждэг. Бид дараагийн хичээлүүддээ хэшинг сурах болно.
Java дахь хоёртын хайлт
Шугаман хайлт нь үндсэн техник юм. Энэ техникт массивыг дараалан дамжуулж, элемент бүрийг түлхүүр олдох эсвэл массивын төгсгөлд хүрэх хүртэл түлхүүртэй харьцуулдаг.
Практик хэрэглээнд шугаман хайлтыг ховор ашигладаг. Хоёртын хайлт нь шугаман хайлтаас хамаагүй хурдан тул хамгийн түгээмэл хэрэглэгддэг техник юм.
Java нь хоёртын хайлт хийх гурван аргыг өгдөг:
- Ашиглах давталтын арга
- Рекурсив аргыг ашиглах
- Arrays.binarySearch () аргыг ашиглах.
Энэ зааварт бид эдгээр бүх зүйлийг хэрэгжүүлж, хэлэлцэх болно. 3 арга.
Java дээр хоёртын хайлтын алгоритм
Хоёртын системдхайлтын аргын хувьд цуглуулгыг дахин дахин хагас болгон хувааж, гол элементийг цуглуулгын дунд элементээс бага эсвэл их байхаас хамаарч цуглуулгын зүүн эсвэл баруун хагаст хайдаг.
Энгийн хоёртын хайлтын алгоритм нь дараах байдалтай байна:
- Цуглуулгын дунд элементийг тооцоол.
- Гол зүйлсийг дунд элементтэй харьцуул.
- Хэрэв түлхүүр = дунд элемент бол бид олсон түлхүүрийн дунд индексийн байрлалыг буцаана.
- Үгүй бол If key > дунд элемент, дараа нь түлхүүр нь цуглуулгын баруун хагаст байрладаг. Тиймээс цуглуулгын доод (баруун) тал дээр 1-3-р алхамуудыг давт.
- Өөр товчлуур дунд элемент, дараа нь түлхүүр нь цуглуулгын дээд хагаст байна. Тиймээс та дээд талдаа хоёртын хайлтыг давтах хэрэгтэй.
Дээрх алхмуудаас харахад хоёртын хайлт дээр эхний харьцуулалтын дараа цуглуулгын хагас элементийг үл тоомсорлодог.
Итератив болон рекурсив хоёртын хайлтын хувьд ижил алхмуудын дараалал үйлчилнэ гэдгийг анхаарна уу.
Хоёртын хайлтын алгоритмыг жишээгээр тайлбарлая.
Жишээ нь , Дараах эрэмбэлэгдсэн 10 элементийн массивыг ав.
Масивын дунд байрлалыг тооцоод үзье.
Дунд = 0+9/2 = 4
#1) Түлхүүр = 21
Эхлээд бид түлхүүр утгыг дараахтай харьцуулна. [дунд] элемент ба элементийн утгыг бид олж мэднэmid = 21.
Тиймээс бид тэр түлхүүрийг = [дунд] гэж оллоо. Тиймээс түлхүүр нь массивын 4-р байрлалаас олддог.
#2) Түлхүүр = 25
Бид эхлээд түлхүүрийг харьцуулна. дунд хүртэлх үнэ цэнэ. (21 25)-ын хувьд бид массивын дээд тал дахь түлхүүрийг шууд хайх болно.
Одоо бид дахин-ийн дээд хагасын дунд хэсгийг олох болно. массив.
Дунд = 4+9/2 = 6
Байршлын утга [дунд] = 25
Одоо бид гол элементийг дунд элементтэй харьцуулах. Тиймээс (25 == 25), тиймээс бид [дунд] = 6 байрлал дахь түлхүүрийг олсон.
Тиймээс бид массивыг дахин дахин хувааж, гол элементийг дунд хэсэгтэй нь харьцуулж үзээд аль тал нь байхаа шийднэ. түлхүүрийг хайх. Хоёртын хайлт нь цаг хугацаа, зөв байдлын хувьд илүү үр дүнтэй бөгөөд илүү хурдан байдаг.
Хоёртын хайлтын хэрэгжилт Java
Дээрх алгоритмыг ашиглан Java хэл дээр хоёртын хайлтын программыг хэрэгжүүлье. давталтын арга. Энэ програмд бид жишээ массив авч, энэ массив дээр хоёртын хайлт хийдэг.
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!"); } } }
Гаралт:
Оролтын массив: [5, 10, 15, 20 , 25, 30, 35]
Хайлгах түлхүүр=20
Элементийг индекс: 3
Дээрх программ Хоёртын хайлтын давталтын аргыг харуулж байна. Эхлээд массивыг зарлаж, дараа нь хайх түлхүүрийг тодорхойлно.
Масивын дунд хэсгийг тооцоолсны дараа түлхүүрийг дунд элементтэй харьцуулна. Дараа нь эсэхээс хамаарнаТүлхүүр нь түлхүүрээс бага эсвэл их байвал түлхүүрийг массивын доод эсвэл дээд хагаст тус тус хайна.
Жава дахь рекурсив хоёртын хайлт
Та мөн хоёртын хайлт хийж болно. рекурсын техникийг ашиглан. Энд хоёртын хайлтын аргыг түлхүүр олдох эсвэл бүхэл жагсаалт дуусах хүртэл рекурсив дуудна.
Рекурсив хоёртын хайлтыг хэрэгжүүлдэг программыг доор өгөв:
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"); } }
Гаралт:
Оролтын жагсаалт: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Хайх түлхүүр :
Түлхүүр нь жагсаалтын 3 байршилд байна
Arrays.binarySearch () аргыг ашиглан.
Java дахь Arrays анги нь өгөгдсөн массив дээр хоёртын хайлт хийх ‘binarySearch ()’ аргыг өгдөг. Энэ арга нь хайж буй массив болон түлхүүрийг аргумент болгон авч, массив дахь түлхүүрийн байрлалыг буцаана. Хэрэв түлхүүр олдохгүй бол арга нь -1-ийг буцаана.
Доорх жишээнд 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."); } }
Гаралт:
Оролтын массив : [10, 20, 30, 40, 50, 60, 70, 80, 90]
Хайлгах түлхүүр:50
Түлхүүр нь массив дахь 4 индексээс олддог.
Түгээмэл асуултууд
Асуулт #1) Хоёртын хайлтыг хэрхэн бичих вэ ?
Хариулт: Хоёртын хайлтыг ихэвчлэн массивыг хагас болгон хуваах замаар гүйцэтгэдэг. Хайх түлхүүр нь дунд элементээс их байвалдараа нь массивын дээд талыг хайлтыг цааш нь хувааж, түлхүүр олдох хүртэл дэд массивыг хайна.
Үүнтэй адил, хэрэв түлхүүр нь дунд элементээс бага байвал түлхүүрийг доод хэсгээс хайна. массивын тал хувь.
Асуулт №2) Хоёртын хайлтыг хаана ашигладаг вэ?
Хариулт: Хоёртын хайлтыг голчлон хайлт хийхэд ашигладаг. Програм хангамжийн программ дахь өгөгдлийг эрэмбэлэх, ялангуяа санах ойн зай нь нягт, хязгаарлагдмал үед.
Асуулт №3) Хоёртын хайлтын том O гэж юу вэ?
Хариулт : Хоёртын хайлтын цагийн нарийн төвөгтэй байдал нь O (logn) бөгөөд n нь массив дахь элементүүдийн тоо юм. Хоёртын хайлтын орон зайн нарийн төвөгтэй байдал нь O (1).
Асуулт #4) Хоёртын хайлт рекурсив уу?
Хариулт: Тийм. Хоёртын хайлт нь хуваах ба ялах стратегийн жишээ бөгөөд үүнийг рекурс ашиглан хэрэгжүүлэх боломжтой. Бид массивыг хоёр хувааж, ижил аргыг дуудаж хоёртын хайлтыг дахин дахин хийж болно.
Асуулт #5) Яагаад үүнийг хоёртын хайлт гэж нэрлэдэг вэ?
Хариулт: Хоёртын хайлтын алгоритм нь массивыг дахин дахин хоёр буюу хоёр хэсэгт хуваасан хуваах ба ялах стратегийг ашигладаг. Тиймээс үүнийг хоёртын хайлт гэж нэрлэсэн.
Дүгнэлт
Хоёртын хайлт нь Java хэл дээр түгээмэл хэрэглэгддэг хайлтын арга юм. Хоёртын хайлт хийх шаардлага бол өгөгдлийг өсөх дарааллаар эрэмбэлэх явдал юм.
Хоёртын хайлтыг хийж болно.давталтын эсвэл рекурсив аргыг ашиглан хэрэгжүүлдэг. Java дахь Arrays анги нь мөн массив дээр хоёртын хайлт хийдэг "binarySearch" аргыг өгдөг.
Дараагийн хичээлүүддээ бид Java хэл дээрх төрөл бүрийн эрэмбэлэх аргуудыг судлах болно.