Þessi kennsla mun útskýra tvíundarleit & Endurkvæm tvíundarleit í Java ásamt reiknirit, útfærslu og Java tvíleitarkóðadæmi:
Tvíundarleit í Java er tækni sem er notuð til að leita að markverði eða lykli í safni. Það er tækni sem notar „deildu og sigra“ tæknina til að leita að lykli.
Safnið sem á að nota tvöfalda leit á til að leita að lykli þarf að flokka í hækkandi röð.
Venjulega styðja flest forritunarmálin línulega leit, tvöfalda leit og hashing tækni sem eru notuð til að leita að gögnum í safninu. Við munum læra hass í síðari námskeiðunum okkar.
Tvöfaldur leit í Java
Línuleg leit er grunntækni. Í þessari tækni er farið yfir fylkið í röð og hvert atriði borið saman við lykilinn þar til lykillinn finnst eða enda fylkisins er náð.
Línuleg leit er sjaldan notuð í hagnýtum forritum. Tvöfaldur leit er oftast notuð tækni þar sem hún er miklu hraðari en línuleg leit.
Java býður upp á þrjár leiðir til að framkvæma tvíundarleit:
- Using endurtekningaraðferðin
- Notkun endurkvæmrar aðferðar
- Með Arrays.binarySearch () aðferð.
Í þessari kennslu munum við útfæra og ræða allt þetta 3 aðferðir.
Reiknirit fyrir tvíundarleit í Java
Í tvíundileitaraðferð, safninu er ítrekað skipt í tvennt og lykilatriði er leitað í vinstri eða hægri hluta safnsins eftir því hvort lykillinn er minni eða stærri en miðþáttur safnsins.
Einfalt tvöfaldur leitarreiknirit er sem hér segir:
- Reiknið miðhluta safnsins.
- Berið saman lykilatriðin við miðhlutann.
- Ef lykill = miðþáttur, þá skilum við miðvísitölustöðu fyrir lykilinn sem fannst.
- Annað Ef lykill > miðþáttur, þá liggur lykillinn í hægri hluta safnsins. Endurtaktu þannig skref 1 til 3 á neðri (hægri) helmingi safnsins.
- Annars lykill miðþáttur, þá er lykillinn í efri hluta safnsins. Þess vegna þarftu að endurtaka tvíundarleitina í efri helmingnum.
Eins og þú sérð af skrefunum hér að ofan, í tvíundarleit er helmingur þáttanna í safninu hunsaður rétt eftir fyrsta samanburðinn.
Athugaðu að sama röð skrefa gildir fyrir endurtekna og endurtekna tvíundarleit.
Skýrum tvíundarleitaralgrímið með dæmi.
Til dæmis , taktu eftirfarandi flokkaða fylki með 10 þáttum.
Reiknum miðstað fylkisins.
Mið = 0+9/2 = 4
#1) Lykill = 21
Fyrst munum við bera saman lykilgildið við [mið] frumefni og við finnum að frumefnisgildið ámiðja = 21.
Þannig finnum við að lykillinn = [miðja]. Þess vegna er lykillinn að finna í stöðu 4 í fylkinu.
#2) Lykill = 25
Við berum fyrst saman lykilinn gildi til miðs. Eins og (21 25), munum við leita beint að lyklinum í efri hluta fylkisins.
Nú finnum við aftur miðjuna fyrir efri helming fylkisins. fylkið.
Mid = 4+9/2 = 6
Gildið á staðsetningu [mid] = 25
Nú berðu saman lykilþáttinn við miðþáttinn. Þannig að (25 == 25), þess vegna höfum við fundið lykilinn á staðsetningu [mið] = 6.
Þannig deilum við fylkinu ítrekað og með því að bera saman lykilþáttinn við miðjuna, ákveðum við í hvaða helmingi leitaðu að lyklinum. Tvöfaldur leit er skilvirkari hvað varðar tíma og réttmæti og er miklu hraðari líka.
Binary Search Implementation Java
Með því að nota ofangreind reiknirit skulum við innleiða tvíundarleitarforrit í Java með því að nota endurtekinn nálgun. Í þessu forriti tökum við dæmi fylki og gerum tvíundarleit á þessu fylki.
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!"); } } }
Úttak:
Inntaksfylki: [5, 10, 15, 20 , 25, 30, 35]
Lykil til að leita að=20
Einingur er að finna á skrá: 3
Forritið hér að ofan sýnir endurtekna nálgun við tvíundarleit. Upphaflega er fylki lýst yfir, síðan er lykill sem á að leita að skilgreindur.
Eftir að hafa reiknað út miðja fylkisins er lykillinn borinn saman við miðþáttinn. Þá fer eftir því hvortlykillinn er minni en eða stærri en lykillinn, lykillinn er leitað í neðri eða efri hluta fylkisins í sömu röð.
Endurkvæm tvíundarleit í Java
Þú getur líka framkvæmt tvíundarleit með því að nota endurtekningartæknina. Hér er tvíundarleitaraðferðin kölluð endurkvæma þar til lykillinn finnst eða allur listinn er uppurinn.
Forritið sem útfærir endurkvæma tvíundarleit er gefið upp hér að neðan:
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"); } }
Úttak:
Inntakslisti: [1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Lykillinn sem á að leita að :
Lykill er að finna á staðsetningu: 3 á listanum
Með Arrays.binarySearch () aðferð.
Arrays flokkurinn í Java býður upp á „binarySearch ()“ aðferð sem framkvæmir tvíundarleitina á tilteknu fylki. Þessi aðferð tekur fylkið og lykilinn sem á að leita að sem rök og skilar stöðu lykilsins í fylkinu. Ef lykillinn finnst ekki, þá skilar aðferðin -1.
Dæmið hér að neðan útfærir Arrays.binarySearch () aðferðina.
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:
Inntaksfylki: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Lykillinn sem á að leita að:50
Lykill er að finna á vísitölu: 4 í fylkinu.
Algengar spurningar
Q #1) Hvernig skrifar þú tvíundarleit ?
Svar: Tvöfaldur leit er venjulega framkvæmd með því að skipta fylkinu í tvennt. Ef lykillinn sem leitar á er stærri en miðþátturinn,þá er leitað í efri helming fylkisins með því að deila og leita í undirfylkinu þar til lykillinn finnst.
Á sama hátt, ef lykillinn er minni en miðþátturinn, þá er lykillinn leitað í neðri hluta fylkisins. helmingur fylkisins.
Q #2) Hvar er tvíundarleitin notuð?
Svar: Tvöfundaleitin er aðallega notuð til að leita í a flokkuð gögn í hugbúnaðarforritum, sérstaklega þegar minnisrýmið er lítið og takmarkað.
Sp. #3) Hvert er stóra O við tvíundarleit?
Svar : Tímaflækjustig tvíundarleitarinnar er O (logn) þar sem n er fjöldi staka í fylkinu. Rúmflækjustig tvíundarleitarinnar er O (1).
Sp. #4) Er tvíundarleit endurkvæm?
Svar: Já. Þar sem tvíundarleit er dæmi um skiptingu og sigra stefnu og hægt er að útfæra hana með endurkomu. Við getum skipt fylkinu í tvennt og kallað sömu aðferðina til að framkvæma tvíundarleitina aftur og aftur.
Sp. #5) Hvers vegna er það kallað tvíundarleit?
Svar: Tvíundarleitaralgrímið notar skiptu-og-sigra stefnu sem klippir fylkið ítrekað í tvennt eða tvo hluta. Þannig er hún nefnd sem tvíundarleit.
Niðurstaða
Tvöfundarleit er sú leitartækni sem oft er notuð í Java. Krafan um að tvíundarleit sé framkvæmd er að gögnin séu flokkuð í hækkandi röð.
Tvíundarleit er hægt aðútfært annað hvort með endurtekinni eða endurkvæmri nálgun. Fylkiflokkur í Java býður einnig upp á 'binarySearch' aðferðina sem framkvæmir tvíundarleit á fylki.
Í síðari námskeiðum okkar munum við kanna ýmsar flokkunartækni í Java.