🪙
Leetcode
  • Content
  • Algorithms
    • Linear Search
    • Binary Search
    • Counting Sort
    • Merge Sort
    • Insertion Sort
    • Selection Sort
  • Array and String
    • Introduction to Array
      • Introduction to Array
      • Introduction to Dynamic Array
      • Find Pivot Index
      • Largest Number At Least Twice of Others
      • Plus One
    • Introduction to 2D Array
      • Introduction to 2D Array
      • Diagonal Traverse
      • Spiral Matrix
      • Pascal's Triangle
    • Introduction to String
      • Introduction to String
      • Immutable String - Problems & Solutions
      • Add binary
      • Implement strStr()
      • Longest Common Prefix
    • Two-Pointer Technique
      • Two-pointer Technique - Scenario I
      • Reverse String
      • Array Partition I
      • Two Sum II - Input array is sorted
      • Two-pointer Technique - Scenario II
      • Remove Element
      • Max Consecutive Ones
      • Minimum Size Subarray Sum
    • Conclusion
      • Array-related Techniques
      • Rotate Array
      • Pascal's Triangle II
      • Reverse Words in a String
      • Reverse Words in a String III
      • Remove Duplicates from Sorted Array
      • Move Zeroes
  • Linked List
    • Singly Linked List
      • Introduction - Singly Linked List
      • Add Operation - Singly Linked List
      • Delete Operation - Singly Linked List
      • Design Linked List
    • Two Pointer Technique
      • Two-Pointer in Linked List
      • Linked List Cycle
      • Linked List Cycle II
      • Intersection of Two Linked Lists
      • Remove Nth Node From End of List
      • Summary - Two-Pointer in Linked List
  • Problems
    • 1. Two Sum
    • 2. Add Two Numbers
    • 7. Reverse Integer
    • 9. Palindrome Number
    • 11. Container With Most Water
    • 12. Integer to Roman
    • 13. Roman to Integer
    • 14. Longest Common Prefix
    • 15. 3Sum
    • 21. Merge Two Sorted Lists
    • 26. Remove Duplicates from Sorted Array
    • 27. Remove Element
    • 28. Find the Index of the First Occurrence in a String
    • 34. Find First and Last Position of Element in Sorted Array
    • 35. Search Insert Position
    • 43. Multiply Strings
    • 49. Group Anagrams
    • 50. Pow(x, n)
    • 54. Spiral Matrix
    • 58. Length of Last Word
    • 66. Plus One
    • 67. Add Binary
    • 69. Sqrt(x)
    • 73. Set Matrix Zeroes
    • 75. Sort Colors
    • 88. Merge Sorted Array
    • 104. Maximum Depth of Binary Tree
    • 121. Best Time to Buy and Sell Stock
    • 122. Best Time to Buy and Sell Stock II
    • 136. Single Number
    • 146. LRU Cache
    • 189. Rotate Array
    • 206. Reverse Linked List
    • 217. Contains Duplicate
    • 219. Cotains Duplicate II
    • 226. Invert Binary Tree
    • 238. Product of Array Except Self
    • 242. Valid Anagram
    • 268. Missing Number
    • 283. Move Zeroes
    • 350. Intersection of Two Arrays II
    • 383. Ransom Note
    • 389. Find the Difference
    • 412. Fizz Buzz
    • 414. Third Maximum Number
    • 445. Add Two Numbers II
    • 448. Find All Numbers Disappeared in an Array
    • 459. Repeated Substring Pattern
    • 485. Max Consecutive Ones
    • 509. Fibonacci Number
    • 637. Average of Levels in Binary Tree
    • 657. Robot Return to Origin
    • 682. Baseball Game
    • 704. Binary Search
    • 705. Design HashSet
    • 709. To Lower Case
    • 724. Find Pivot Index
    • 876. Middle of the Linked List
    • 896. Monotonic Array
    • 860. Lemonade Change
    • 905. Sort Array By Parity
    • 916. Word Subsets
    • 941. Valid Mountain Array
    • 976. Largest Perimeter Triangle
    • 977. Squares of a Sorted Array
    • 1041. Robot Bounded In Circle
    • 1051. Height Checker
    • 1089. Duplicate Zeros
    • 1232. Check If It Is a Straight Line
    • 1275. Find Winner on a Tic Tac Toe Game
    • 1295. Find Numbers with Even Number of Digits
    • 1299. Replace Elements with Greatest Element on Right Side
    • 1342. Number of Steps to Reduce a Number to Zero
    • 1346. Check If N and Its Double Exist
    • 1476. Subrectangle Queries
    • 1480. Running Sum of 1d Array
    • 1491. Average Salary Excluding the Minimum and Maximum Salary
    • 1502. Can Make Arithmetic Progression From Sequence
    • 1523. Count Odd Numbers in an Interval Range
    • 1572. Matrix Diagonal Sum
    • 1672. Richest Customer Wealth
    • 1768. Merge Strings Alternately
    • 1752. Check if Array Is Sorted and Rotated
    • 1769. Minimum Number of Operations to Move All Balls to Each Box
    • 1790. Check if One String Swap Can Make Strings Equal
    • 1800. Maximum Ascending Subarray Sum
    • 1822. Sign of the Product of an Array
    • 1930. Unique Length-3 Palindromic Subsequences
    • 1991. Find the Middle Index in Array
    • 2185. Counting Words With a Given Prefix
    • 2235. Add Two Integers
    • 2236. Root Equals Sum of Children
    • 2270. Number of Ways to Split Array
    • 2381. Shifting Letters II
    • 2559. Count Vowel Strings in Ranges
    • 2610. Convert an Array Into a 2D Array With Conditions
    • 2657. Find the Prefix Common Array of Two Arrays
    • 3042. Count Prefix and Suffix Pairs I
    • 3105. Longest Strictly Increasing or Strictly Decreasing Subarray
    • 3151. Special Array I
    • 3223. Minimum Length of String After Operations
Powered by GitBook
On this page
  • What is Binary Search?
  • When to use Binary Search?
  • Binary Search Algorithm:
  • How does Binary Search work?
  • Step 1:
  • Step 2:
  • Step 3:
  • How to Implement Binary Search?
  • 1. Iterative Binary Search Algorithm:
  • 2. Recursive Binary Search Algorithm:
  • Complexity Analysis of Binary Search:
  • Advantages of Binary Search:
  • Disadvantage of Binary Search:

Was this helpful?

Edit on GitHub
  1. Algorithms

Binary Search

PreviousLinear SearchNextCounting Sort

Last updated 1 year ago

Was this helpful?

What is Binary Search?

Binary search bu oralig'ini qayta-qayta ikkiga bo'lish orqali tartiblangan massivda qo'llaniladigan qidiruv algoritmi.Binary search g'oyasi massivning tartiblanganligi haqidagi ma'lumotdan foydalanish va vaqt murakkabligini O(logN)ga kamaytirishdir.

Agar massivdagi elementlar tartiblangan tartibda boʻlsa, biz ikkilik qidiruv (binary search)dan foydalanishimiz mumkin. Ikkilik qidiruv - bu massivdagi o'rta elementni qayta-qayta ko'rib chiqadi va biz izlayotgan element chapda yoki o'ngda bo'lishi kerakligini aniqlaydi. Har safar buni qilganimizda, biz izlashimiz kerak bo'lgan elementlar sonini ikki baravar kamaytiradi, bu ikkilik qidiruvni chiziqli qidiruvga qaraganda ancha tezroq qiladi!

Ikkilik qidiruvning salbiy tomoni shundaki, u faqat ma'lumotlar tartiblangan bo'lsa ishlaydi.

Agar biz faqat bitta qidiruvni amalga oshirishimiz kerak bo'lsa, chiziqli qidiruvni amalga oshirish tezroq bo'ladi, chunki chiziqli qidiruvga qaraganda saralash ko'proq vaqt oladi. Agar biz ko'p qidiruvlarni amalga oshirmoqchi bo'lsak, takroriy qidiruvlar uchun ikkilik qidiruvdan foydalanishimiz uchun birinchi navbatda ma'lumotlarni saralashga arziydi.

binary search

When to use Binary Search?

  • Ma'lumotlar strukturasi tartiblangan bo'lganda

  • Ma'lumotlar strukturasining istalgan elementiga kirish doimiy(O(1)) vaqtni olganda

Binary Search Algorithm:

Bu algoritmda

  • mid - qidiruv maydonini ikkiga bo'lib o'rta indexni oling

  • Qidiruv maydonining o'rta elementini kalit bilan solishtiring.

  • Agar kalit o'rta elementda topilsa, jarayon tugatiladi.

  • Agar kalit o'rta elementda topilmasa, qaysi yarmi keyingi qidiruv maydoni sifatida ishlatilishini tanlang.

    • Agar kalit o'rta elementdan kichikroq bo'lsa, keyingi qidiruv uchun chap tomon ishlatiladi.

    • Agar kalit o'rta elementdan kattaroq bo'lsa, keyingi qidiruv uchun o'ng tomon ishlatiladi.

  • Bu jarayon kalit topilmaguncha yoki umumiy qidiruv maydoni tugamaguncha davom ettiriladi.

How does Binary Search work?

Binary Searchning ishlashini tushunish uchun quyidagi rasmni ko'rib chiqamiz: []arr = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91} massivni va key = 23 ni ko'rib chiqamiz.

Step 1:

  • O'rtadagi elementni toping va o'rta elementni kalit bilan solishtiring. Agar kalit o'rta elementdan kichik bo'lsa, chapga, agar u o'rtadan katta bo'lsa, qidiruv maydonini o'ngga o'tkazing.

  • Kalit (ya'ni, 23) joriy o'rta elementdan (ya'ni, 16) kattaroqdir. Qidiruv maydoni o'ngga siljiydi. []arr = {23, 38, 56, 72, 91}

Step 2:

  • Kalit joriy o'rta 56 dan kamroq. Qidiruv maydoni chapga siljiydi. []arr = {23, 38}

Step 3:

  • Agar kalit o'rta elementning qiymatiga mos kelsa, element topiladi va qidiruvni to'xtatadi.

How to Implement Binary Search?

Binary Search algoritmi quyidagi ikki usulda amalga oshirilishi mumkin

  • Iterative Binary Search Algorithm

  • Recursive Binary Search Algorithm

Quyida yondashuvlar uchun psevdokodlar keltirilgan.

1. Iterative Binary Search Algorithm:

  • Bu erda kalitni taqqoslash va qidiruv maydonini ikkiga bo'lish jarayonini davom ettirish uchun for tsiklidan foydalanamiz.

func binarySearch(arr []int, key int) int {
    low := 0
    high := len(arr) - 1
    for low <= high {
        mid := (low + high) / 2
        if arr[mid] == key {
            return mid
        } else if arr[mid] < key {
            low = mid + 1
        } else {
            high = mid - 1
        }
    }
    return -1
}

2. Recursive Binary Search Algorithm:

  • Rekursiv funktsiya yarating va qidiruv maydonining o'rtasini kalit bilan solishtiring. Va natijaga asoslanib, kalit topilgan indeksni qaytaring yoki keyingi qidiruv maydoni uchun rekursiv funktsiyani chaqiring.

Rekursiv binary search algoritmini amalga oshirish:

// arr - tartiblangan massiv
// key - qidiriladigan element
// low - massivning boshlang'ich indeksi
// high - massivning oxirgi indeksi, ya'ni len(arr)-1
func binarySearch(arr []int, key, low, high int) int {
    
    // Massiv oxiriga yetib bo'lganligini tekshirish
    if low <= high {

        // Massivning o'rta elementini topish
        mid := low + (high-low)/2

        // Agar kalit o'rta elementga teng bo'lsa, o'rta elementni qaytarib chiqamiz
        if arr[mid] == key {
            return mid
        
        // Agar kalit o'rta elementdan kichik bo'lsa, qidiruv maydonini chap tomoniga siljiyamiz, ya'ni, high = mid-1
        } else if arr[mid] > key {
            return binarySearch(arr, key, low, mid-1)

        // Agar kalit o'rta elementdan katta bo'lsa, qidiruv maydonini o'ng tomoniga siljiyamiz, ya'ni, low = mid+1
        } else {
            return binarySearch(arr, key, mid+1, high)
        }
    }

    // Agar kalit topilmagan bo'lsa, -1 qaytarib chiqamiz
    return -1
}

Complexity Analysis of Binary Search:

  • Time Complexity O(logN), bu yerda N - massiv uzunligi.

    • Best Case: O(logN)

    • Average Case: O(logN)

    • Worst Case: O(logN)

  • Space Complexity: O(1), agar rekursiv binary search implementi ishlatilsa, O(logN) bo'ladi.

Advantages of Binary Search:

  • Binary Search Linear Searchga qaraganda tezroq, ayniqsa katta massivlar uchun.

  • Binary Search Interpolatsiyali qidiruv yoki eksponensial qidiruv kabi vaqt murakkabligi o'xshash boshqa qidiruv algoritmlariga qaraganda samaraliroq.

  • Binary Search tashqi xotirada, masalan, qattiq diskda yoki cloudda saqlanadigan katta ma'lumotlar to'plamini qidirish uchun juda mos keladi.

Disadvantage of Binary Search:

  • Massiv tartiblangan bo'lishi kerak.

  • Binary Search izlanayotgan ma'lumotlar strukturasi qo'shni xotira joylarida saqlanishini talab qiladi.

  • Binary Search massivning elementlarini solishtirishni talab qiladi, ya'ni ularni tartiblash imkoniyati bo'lishi kerak.

image
step 1
step 2
step 3

Kodni ishlatib ko'rish uchun dan foydalaning.

Kodni ishlatib ko'rish uchun dan foydalaning.

Source:

playground
playground
GeeksforGeeks