पाठ 24 / 42
Binary Search
Sorted सीमा को हर चरण में आधा कर O(log n) में लक्ष्य खोजें।
हर चरण में आधा हटाएँ
Sorted array पर, लक्ष्य की मध्य तत्व से तुलना करें। यदि लक्ष्य बड़ा है, तो पूरा left आधा (mid सहित) अप्रासंगिक — left को उससे आगे ले जाएँ। अन्यथा right आधा हटाएँ। हर चरण search स्थान आधा: O(log n)।
Iterative टेम्पलेट
अन्य भाषाओं में overflow से बचने को left <= right और mid = left + (right-left)//2 उपयोग करें।
def binary_search(arr, target):
lo, hi = 0, len(arr) - 1
while lo <= hi:
mid = lo + (hi - lo) // 2
if arr[mid] == target:
return mid
if arr[mid] < target:
lo = mid + 1 # target in right half
else:
hi = mid - 1 # target in left half
return -1
Output:
binary_search([10,20,30,40,50,60,70,80], 60) -> 5
Dry run: 60 खोजें
[10 20 30 40 50 60 70 80]
- चरण 1: lo=0 hi=7 mid=3 → arr[3]=40 < 60 → lo=4
- चरण 2: lo=4 hi=7 mid=5 → arr[5]=60 → इंडेक्स 5 पर मिला
त्वरित जाँच: Binary search के लिए डेटा होना चाहिए...
- Sorted (या predicate पर monotonic)
- Hash map में संग्रहीत
- अभाज्य लंबाई का
Answer
Sorted (या predicate पर monotonic) — आधा हटाना तभी काम करता है जब एक ओर लक्ष्य न होने की गारंटी हो — इसके लिए क्रम चाहिए।