मैं एक एल्गोरिदम पुस्तक जो द्विआधारी खोज के लिए निम्नलिखित कलन विधि था पढ़ रहा था:गिना जा रहा है मध्य
public class BinSearch {
static int search (int [ ] A, int K) {
int l = 0 ;
int u = A. length −1;
int m;
while (l <= u) {
m = (l+u) /2;
if (A[m] < K) {
l = m + 1 ;
} else if (A[m] == K) {
return m;
} else {
u = m−1;
}
}
return −1;
}
}
लेखक कहते हैं, "त्रुटि काम m = (l+u)/2;
में है यह अतिप्रवाह को जन्म दे सकता है और प्रतिस्थापित किया जाना चाहिए m = l + (u-l)/2
द्वारा। "
मैं नहीं देख सकता कि इससे ओवरफ्लो कैसे होगा। जब मैं कुछ अलग इनपुट के लिए अपने दिमाग में एल्गोरिदम चलाता हूं, तो मुझे एरे इंडेक्स से बाहर जाने वाले मध्य का मूल्य दिखाई नहीं देता है।
तो, किस मामले में अतिप्रवाह होता है?
जोड़ना, घटाना, 2 संख्याओं को गुणा करना अधिक बिट्स उत्पन्न करता है, इसलिए स्पष्ट रूप से ओवरफ्लो –
का संभावित मौका है [बाइनरी खोज मध्य मूल्य गणना] (http://stackoverflow.com/questions/4534342/binary-search- मध्य-मूल्य-गणना) –