मैं केवल एक सरणी का उपयोग करके बाइनरी खोज को कैसे कार्यान्वित करूं?ऐरे में बाइनरी खोज
उत्तर
सुनिश्चित करें कि आपकी सरणी को क्रमबद्ध किया गया है क्योंकि यह एक बाइनरी खोज का क्रूक्स है।
कोई अनुक्रमित/यादृच्छिक-पहुंच डेटा संरचना द्विआधारी खोजी जा सकती है। तो जब आप "केवल एक सरणी" का उपयोग करते हुए कहते हैं, तो मैं कहूंगा कि सरणी सबसे बुनियादी/सामान्य डेटा संरचना है जो एक बाइनरी खोज पर नियोजित है।
आप इसे रिकर्सिव (सबसे आसान) या इसके बाद से कर सकते हैं। बाइनरी खोज की समय जटिलता ओ (लॉग एन) है जो ओ (एन) में प्रत्येक तत्व की जांच करने की रैखिक खोज से काफी तेज है। यहाँ Wikipedia: Binary Search Algorithm से कुछ उदाहरण हैं:
रिकर्सिव:
BinarySearch(A[0..N-1], value, low, high) {
if (high < low)
return -1 // not found
mid = low + ((high - low)/2)
if (A[mid] > value)
return BinarySearch(A, value, low, mid-1)
else if (A[mid] < value)
return BinarySearch(A, value, mid+1, high)
else
return mid // found
}
Iterative:
BinarySearch(A[0..N-1], value) {
low = 0
high = N - 1
while (low <= high) {
mid = low + ((high - low)/2)
if (A[mid] > value)
high = mid - 1
else if (A[mid] < value)
low = mid + 1
else
return mid // found
}
return -1 // not found
}
मध्य की गणना करते समय अतिप्रवाह के लिए देखना याद रखें। (http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html) –
@ फ़िरस असद, धन्यवाद, अतिप्रवाह को रोकने के साथ जुड़े फिक्स को दिखाने के लिए अद्यतन कोड – mmcdole
'मध्य = कम + ((उच्च - निम्न)/2) 'मध्य = (कम + उच्च)/2' जैसा ही है। खेल में पूर्णांक विभाजन के साथ निश्चित नहीं है, लेकिन एल्गोरिदम फिर भी दोनों सूत्रों के साथ काम करता है। –
एकल तुलना संस्करण तेजी से और संक्षिप्त है
int bsearch_double(const double a[], int n, double v) {
int low = 0, mid;
while (n - low > 1) {
mid = low + (n - low)/2;
if (v < a[mid]) n = mid;
else low = mid;
}
return (low < n && a[low] == v) ? low : -1;
}
खाली सरणी पर काम नहीं करता – user102008
यह एक 'if' कथन है यदि यह एक आवश्यकता है। – Jed
आपको अंत में एक [एन] भी जांचना चाहिए। अन्यथा नहीं मिला उदा। {0,1} से 1। – jarno
यह निर्भर करता है अगर आप पुनरावृत्ति है आपकी सरणी में एक तत्व या नहीं और यदि आप कई निष्कर्षों की परवाह करते हैं या नहीं। मेरे पास इस कार्यान्वयन में दो विधियां हैं। उनमें से एक केवल पहली खोज देता है, लेकिन दूसरा कुंजी के सभी निष्कर्ष देता है।
import java.util.Arrays;
public class BinarySearchExample {
//Find one occurrence
public static int indexOf(int[] a, int key) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
// Key is in a[lo..hi] or not present.
int mid = lo + (hi - lo)/2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
//Find all occurrence
public static void PrintIndicesForValue(int[] numbers, int target) {
if (numbers == null)
return;
int low = 0, high = numbers.length - 1;
// get the start index of target number
int startIndex = -1;
while (low <= high) {
int mid = (high - low)/2 + low;
if (numbers[mid] > target) {
high = mid - 1;
} else if (numbers[mid] == target) {
startIndex = mid;
high = mid - 1;
} else
low = mid + 1;
}
// get the end index of target number
int endIndex = -1;
low = 0;
high = numbers.length - 1;
while (low <= high) {
int mid = (high - low)/2 + low;
if (numbers[mid] > target) {
high = mid - 1;
} else if (numbers[mid] == target) {
endIndex = mid;
low = mid + 1;
} else
low = mid + 1;
}
if (startIndex != -1 && endIndex != -1){
System.out.print("All: ");
for(int i=0; i+startIndex<=endIndex;i++){
if(i>0)
System.out.print(',');
System.out.print(i+startIndex);
}
}
}
public static void main(String[] args) {
// read the integers from a file
int[] arr = {23,34,12,24,266,1,3,66,78,93,22,24,25,27};
Boolean[] arrFlag = new Boolean[arr.length];
Arrays.fill(arrFlag,false);
// sort the array
Arrays.sort(arr);
//Search
System.out.print("Array: ");
for(int i=0; i<arr.length; i++)
if(i != arr.length-1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]);
}
System.out.println("\nOnly one: "+indexOf(arr,24));
PrintIndicesForValue(arr,24);
}
}
अधिक जानकारी के लिए कृपया https://github.com/m-vahidalizadeh/foundations/blob/master/src/algorithms/BinarySearchExample.java जाएँ। मुझे उम्मीद है यह मदद करेगा।
- 1. शाखा रहित बाइनरी खोज
- 2. बाइनरी खोज समस्याएं?
- 3. बाइनरी खोज पेड़ क्यों?
- 4. बाइनरी खोज सी ++ एसटीएल
- 5. जावा बाइनरी खोज
- 6. द्विआधारी खोज बनाम बाइनरी खोज पेड़
- 7. दक्षता में ऐरे और बाइनरी खोज पेड़ के बीच क्या अंतर है?
- 8. डी 2.0 (फाबोस) में बाइनरी खोज?
- 9. जावास्क्रिप्ट बाइनरी खोज पेड़ कार्यान्वयन
- 10. क्या सुनहरी अनुभाग खोज बाइनरी खोज से बेहतर है?
- 11. रैखिक खोज और बाइनरी खोज के बीच क्या अंतर है?
- 12. स्ट्रिंग-ऐरे आइटम तत्व में स्ट्रिंग के लिए खोज
- 13. एलजी (एन) समय में एरलांग में बाइनरी खोज
- 14. जावा में सूची में बाइनरी खोज क्यों करें?
- 15. रूबी # इंडेक्स विधि वीएस बाइनरी खोज
- 16. टेक्स्ट फ़ाइल की बाइनरी खोज कैसे करें
- 17. एनएसएआरएआरई पर बाइनरी खोज कैसे करें?
- 18. बाइनरी स्ट्रिंग खोज - न्यूनतम बिन चौड़ाई?
- 19. एक क्रमबद्ध सरणी की बाइनरी खोज
- 20. एक संतुलित बाइनरी खोज पेड़ का निर्माण
- 21. एक बाइनरी खोज पेड़ की औसत ऊंचाई
- 22. बाइनरी खोज पेड़ में "आंतरिक नोड" क्या है?
- 23. अभ्यास में बाइनरी खोज कहां उपयोग की जाती है?
- 24. गैर-बाइनरी पेड़ में एक नोड के लिए रिकर्सिव खोज
- 25. पायथन में बाइनरी फ़ाइल को कैसे खोज और जोड़ना है?
- 26. एक झूठ मॉडल में बाइनरी खोज कैसे करें?
- 27. मैं पर्ल में बाइनरी खोज कैसे कार्यान्वित कर सकता हूं?
- 28. बाइनरी खोज पेड़ में डुप्लिकेट प्रविष्टियों को खोजने की रणनीति
- 29. ऐरे बनाम ऐरे सूची में महत्वपूर्ण अंतर?
- 30. बाइनरी ट्री
यह जांचें [लिंक] (http://www.msccomputerscience.com/2013/01/binary-search.html) – ARJUN
मुझे सही समझ में आता है। एक सरणी के अलावा आप एक बाइनरी पेड़ का उपयोग कर सकते हैं। – symbiont