ഈ ട്യൂട്ടോറിയൽ ബൈനറി തിരയൽ & ജാവയിലെ ആവർത്തന ബൈനറി തിരയൽ അതിന്റെ അൽഗോരിതം, ഇംപ്ലിമെന്റേഷൻ, ജാവ ബൈനറി സീച്ച് കോഡ് ഉദാഹരണങ്ങൾ:
ഒരു ശേഖരത്തിൽ ടാർഗെറ്റുചെയ്ത മൂല്യമോ കീയോ തിരയാൻ ഉപയോഗിക്കുന്ന ഒരു സാങ്കേതികതയാണ് ജാവയിലെ ബൈനറി തിരയൽ. ഒരു കീ തിരയാൻ "ഡിവൈഡ് ആൻഡ് കൺക്വയർ" ടെക്നിക് ഉപയോഗിക്കുന്ന ഒരു സാങ്കേതികതയാണിത്.
ഒരു കീ തിരയാൻ ബൈനറി തിരയൽ പ്രയോഗിക്കേണ്ട ശേഖരം ആരോഹണ ക്രമത്തിൽ അടുക്കേണ്ടതുണ്ട്.
സാധാരണയായി, മിക്ക പ്രോഗ്രാമിംഗ് ഭാഷകളും ശേഖരത്തിലെ ഡാറ്റ തിരയാൻ ഉപയോഗിക്കുന്ന ലീനിയർ തിരയൽ, ബൈനറി തിരയൽ, ഹാഷിംഗ് ടെക്നിക്കുകൾ എന്നിവയെ പിന്തുണയ്ക്കുന്നു. ഞങ്ങളുടെ തുടർന്നുള്ള ട്യൂട്ടോറിയലുകളിൽ ഹാഷിംഗ് പഠിക്കും.
ജാവയിലെ ബൈനറി തിരയൽ
ലീനിയർ തിരയൽ ഒരു അടിസ്ഥാന സാങ്കേതികതയാണ്. ഈ സാങ്കേതികതയിൽ, അറേ തുടർച്ചയായി സഞ്ചരിക്കുകയും കീ കണ്ടെത്തുന്നത് വരെ അല്ലെങ്കിൽ അറേയുടെ അവസാനം എത്തുന്നതുവരെ ഓരോ ഘടകവും കീയുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യുന്നു.
പ്രായോഗിക പ്രയോഗങ്ങളിൽ ലീനിയർ തിരയൽ വളരെ അപൂർവമായി മാത്രമേ ഉപയോഗിക്കൂ. ലീനിയർ സെർച്ചിനേക്കാൾ വളരെ വേഗതയുള്ളതിനാൽ ബൈനറി സെർച്ച് ആണ് ഏറ്റവും കൂടുതൽ ഉപയോഗിക്കുന്ന സാങ്കേതികത.
ബൈനറി സെർച്ച് നടത്താൻ ജാവ മൂന്ന് വഴികൾ നൽകുന്നു:
- ഉപയോഗിക്കുന്നത് ആവർത്തന സമീപനം
- ഒരു ആവർത്തന സമീപനം ഉപയോഗിക്കുന്നു
- Arays.binarySearch () രീതി ഉപയോഗിക്കുന്നു.
ഈ ട്യൂട്ടോറിയലിൽ, ഞങ്ങൾ ഇവയെല്ലാം നടപ്പിലാക്കുകയും ചർച്ച ചെയ്യുകയും ചെയ്യും 3 രീതികൾ.
ജാവയിൽ ബൈനറി തിരയലിനുള്ള അൽഗോരിതം
ബൈനറിയിൽതിരയൽ രീതി, ശേഖരത്തെ പകുതിയായി ആവർത്തിച്ച് വിഭജിക്കുകയും പ്രധാന ഘടകം ശേഖരത്തിന്റെ ഇടത് അല്ലെങ്കിൽ വലത് പകുതിയിൽ തിരയുകയും ചെയ്യുന്നു, കീ ശേഖരത്തിന്റെ മധ്യ ഘടകത്തേക്കാൾ കുറവാണോ വലുതാണോ എന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു.
ഒരു ലളിതമായ ബൈനറി തിരയൽ അൽഗോരിതം ഇപ്രകാരമാണ്:
- ശേഖരത്തിന്റെ മധ്യഭാഗം കണക്കാക്കുക.
- പ്രധാന ഇനങ്ങളെ മിഡ് എലമെന്റുമായി താരതമ്യം ചെയ്യുക.
- കീ = മധ്യ ഘടകമാണെങ്കിൽ, കണ്ടെത്തിയ കീയുടെ മധ്യ സൂചിക സ്ഥാനം ഞങ്ങൾ തിരികെ നൽകുന്നു.
- ഇല്ലെങ്കിൽ കീ > മധ്യഭാഗം, തുടർന്ന് കീ ശേഖരത്തിന്റെ വലത് പകുതിയിലാണ്. അങ്ങനെ ശേഖരത്തിന്റെ താഴെ (വലത്) പകുതിയിൽ 1 മുതൽ 3 വരെയുള്ള ഘട്ടങ്ങൾ ആവർത്തിക്കുക.
- Else key മധ്യഭാഗം, തുടർന്ന് കീ ശേഖരത്തിന്റെ മുകൾ പകുതിയിലാണ്. അതിനാൽ നിങ്ങൾ മുകളിലെ പകുതിയിൽ ബൈനറി തിരയൽ ആവർത്തിക്കേണ്ടതുണ്ട്.
മുകളിലുള്ള ഘട്ടങ്ങളിൽ നിന്ന് നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, ബൈനറി തിരയലിൽ, ആദ്യ താരതമ്യത്തിന് ശേഷം ശേഖരത്തിലെ പകുതി ഘടകങ്ങൾ അവഗണിക്കപ്പെടും.
ആവർത്തനപരവും ആവർത്തനപരവുമായ ബൈനറി തിരയലിനായി ഒരേ ഘട്ടങ്ങളുടെ ക്രമം തന്നെയുണ്ടെന്ന് ശ്രദ്ധിക്കുക.
ഒരു ഉദാഹരണം ഉപയോഗിച്ച് നമുക്ക് ബൈനറി തിരയൽ അൽഗോരിതം ചിത്രീകരിക്കാം.
ഉദാഹരണത്തിന് , 10 ഘടകങ്ങളുടെ ഇനിപ്പറയുന്ന അടുക്കിയ അറേ എടുക്കുക.
നമുക്ക് അറേയുടെ മധ്യ സ്ഥാനം കണക്കാക്കാം.
മിഡ് = 0+9/2 = 4
#1) കീ = 21
ആദ്യം, ഞങ്ങൾ കീ മൂല്യവുമായി താരതമ്യം ചെയ്യും [മധ്യം] മൂലകം, മൂലകത്തിന്റെ മൂല്യം ഞങ്ങൾ കണ്ടെത്തുന്നുmid = 21.
അങ്ങനെ നമ്മൾ ആ കീ = [മിഡ്] കണ്ടെത്തുന്നു. അതിനാൽ അറേയിലെ 4-ാം സ്ഥാനത്താണ് കീ കാണുന്നത്.
#2) കീ = 25
നാം ആദ്യം കീ താരതമ്യം ചെയ്യുന്നു മൂല്യം മധ്യത്തിലേക്ക്. (21 25) എന്ന നിലയിൽ, അറേയുടെ മുകളിലെ പകുതിയിലെ കീക്കായി ഞങ്ങൾ നേരിട്ട് തിരയും.
ഇപ്പോൾ വീണ്ടും മുകളിലെ പകുതിയുടെ മധ്യഭാഗം കണ്ടെത്തും. നിര പ്രധാന ഘടകത്തെ മധ്യ ഘടകവുമായി താരതമ്യം ചെയ്യുക. അതിനാൽ (25 == 25), അതിനാൽ ഞങ്ങൾ [മധ്യം] = 6 എന്ന സ്ഥലത്ത് കീ കണ്ടെത്തി.
ഇങ്ങനെ ഞങ്ങൾ അറേയെ ആവർത്തിച്ച് വിഭജിക്കുകയും പ്രധാന ഘടകത്തെ മിഡുമായി താരതമ്യം ചെയ്തുകൊണ്ട് ഏത് പകുതിയിൽ വേണമെന്ന് ഞങ്ങൾ തീരുമാനിക്കുകയും ചെയ്യുന്നു കീ തിരയുക. ബൈനറി സെർച്ച് സമയത്തിന്റെയും കൃത്യതയുടെയും കാര്യത്തിൽ കൂടുതൽ കാര്യക്ഷമമാണ്, കൂടാതെ വളരെ വേഗതയുള്ളതുമാണ്.
ബൈനറി സെർച്ച് ഇംപ്ലിമെന്റേഷൻ ജാവ
മുകളിലുള്ള അൽഗോരിതം ഉപയോഗിച്ച്, നമുക്ക് ജാവയിൽ ഒരു ബൈനറി തിരയൽ പ്രോഗ്രാം നടപ്പിലാക്കാം ആവർത്തന സമീപനം. ഈ പ്രോഗ്രാമിൽ, ഞങ്ങൾ ഒരു ഉദാഹരണ അറേ എടുക്കുകയും ഈ അറേയിൽ ബൈനറി തിരയൽ നടത്തുകയും ചെയ്യുന്നു.
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 () രീതി ഉപയോഗിച്ച്.
ജാവയിലെ അറേ ക്ലാസ് ഒരു ‘ബൈനറി സെർച്ച് ()’ രീതി നൽകുന്നു, അത് നൽകിയിരിക്കുന്ന അറേയിൽ ബൈനറി തിരയൽ നടത്തുന്നു. ഈ രീതി അറേയും തിരയേണ്ട കീയും ആർഗ്യുമെന്റുകളായി എടുക്കുകയും അറേയിലെ കീയുടെ സ്ഥാനം തിരികെ നൽകുകയും ചെയ്യുന്നു. കീ കണ്ടെത്തിയില്ലെങ്കിൽ, രീതി -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-ൽ കീ കണ്ടെത്തി. ?
ഉത്തരം: സാധാരണയായി ബൈനറി തിരയൽ നടത്തുന്നത് അറേയെ പകുതിയായി വിഭജിച്ചാണ്. തിരയേണ്ട കീ മിഡ് എലമെന്റിനേക്കാൾ വലുതാണെങ്കിൽ,കീ കണ്ടെത്തുന്നത് വരെ ഉപ-അറേയെ കൂടുതൽ വിഭജിച്ച് തിരയുന്നതിലൂടെ അറേയുടെ മുകളിലെ പകുതി തിരയുന്നു.
അതുപോലെ, കീ മിഡ് എലമെന്റിനേക്കാൾ കുറവാണെങ്കിൽ, കീ താഴെയായി തിരയുന്നു. അറേയുടെ പകുതി.
Q #2) ബൈനറി തിരയൽ എവിടെയാണ് ഉപയോഗിക്കുന്നത്?
ഉത്തരം: ബൈനറി തിരയൽ പ്രധാനമായും ഉപയോഗിക്കുന്നത് ഒരു സോഫ്റ്റ്വെയർ ആപ്ലിക്കേഷനുകളിലെ ഡാറ്റ സോർട്ട് ചെയ്തു, പ്രത്യേകിച്ചും മെമ്മറി സ്പേസ് ഒതുക്കമുള്ളതും പരിമിതവുമാകുമ്പോൾ.
Q #3) ബൈനറി തിരയലിന്റെ വലിയ O എന്താണ്?
ഉത്തരം : ബൈനറി തിരയലിന്റെ സമയ സങ്കീർണ്ണത O (logn) ആണ്, ഇവിടെ n എന്നത് അറേയിലെ മൂലകങ്ങളുടെ എണ്ണമാണ്. ബൈനറി തിരയലിന്റെ സ്പേസ് സങ്കീർണ്ണത O (1) ആണ്.
Q #4) ബൈനറി തിരയൽ ആവർത്തനമാണോ?
ഉത്തരം: അതെ. ബൈനറി തിരയൽ വിഭജിച്ച് കീഴടക്കുന്ന തന്ത്രത്തിന്റെ ഒരു ഉദാഹരണമായതിനാൽ അത് ആവർത്തനം ഉപയോഗിച്ച് നടപ്പിലാക്കാം. നമുക്ക് അറേയെ പകുതിയായി വിഭജിച്ച് ബൈനറി തിരയൽ വീണ്ടും വീണ്ടും നടത്താൻ ഒരേ രീതിയെ വിളിക്കാം.
Q #5) എന്തുകൊണ്ടാണ് ഇതിനെ ബൈനറി തിരയൽ എന്ന് വിളിക്കുന്നത്?
ഉത്തരം: ബൈനറി സെർച്ച് അൽഗോരിതം ഒരു വിഭജിച്ച് കീഴടക്കുന്ന തന്ത്രം ഉപയോഗിക്കുന്നു, അത് അറേയെ പകുതിയോ രണ്ടോ ഭാഗങ്ങളായി ആവർത്തിച്ച് മുറിക്കുന്നു. അതിനാൽ ഇതിനെ ബൈനറി സെർച്ച് എന്ന് നാമകരണം ചെയ്തു.
ഉപസംഹാരം
ബൈനറി സെർച്ച് എന്നത് ജാവയിൽ പതിവായി ഉപയോഗിക്കുന്ന സെർച്ചിംഗ് ടെക്നിക് ആണ്. ഒരു ബൈനറി തിരയൽ നടത്തേണ്ടതിന്റെ ആവശ്യകത, ഡാറ്റ ആരോഹണ ക്രമത്തിൽ അടുക്കണം എന്നതാണ്.
ഒരു ബൈനറി തിരയൽ ആകാം.ഒന്നുകിൽ ഒരു ആവർത്തന അല്ലെങ്കിൽ ആവർത്തന സമീപനം ഉപയോഗിച്ച് നടപ്പിലാക്കുന്നു. ജാവയിലെ അറേ ക്ലാസ്സ് ഒരു അറേയിൽ ബൈനറി സെർച്ച് നടത്തുന്ന 'ബൈനറി സെർച്ച്' രീതിയും നൽകുന്നു.
ഞങ്ങളുടെ തുടർന്നുള്ള ട്യൂട്ടോറിയലുകളിൽ, ജാവയിലെ വിവിധ സോർട്ടിംഗ് ടെക്നിക്കുകൾ ഞങ്ങൾ പര്യവേക്ഷണം ചെയ്യും.