logo

Алгоритм бінарного пошуку в C

Швидкий спосіб знайти певний елемент у відсортованому масиві – це двійковий пошук. Початковим завданням цього алгоритму є порівняння цільового значення із середнім елементом масиву. Пошук вважається успішним, якщо цільове значення міститься в середньому елементі. Алгоритм шукатиме ліву половину масиву, якщо цільове значення менше центрального елемента. Програма просканує праву половину масиву, якщо цільове значення перевищує центральний елемент. Цей метод повторюється, доки цільове значення або діапазон пошуку не буде вичерпано.

Використання:

Бази даних, пошукові системи та обробка даних – це лише деякі програми, які використовують стратегію бінарного пошуку.

Характеристики:

  • Масив вхідних значень має бути відсортований.
  • З кожною ітерацією метод скорочує діапазон пошуку вдвічі, що робить його особливо ефективним для величезних наборів даних.
  • Алгоритм має найгіршу часову складність O (log n).
  • Пошук потрібного значення здійснюється програмою за допомогою стратегії розділяй і володарюй.

Ось простий приклад бінарного алгоритму пошуку, написаного мовою C:

 #include int binary_search(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right - left) 2; if (arr[mid]="=" target) return mid; } else < left="mid" 1; right="mid" -1; target not found main() arr[]="{1," 3, 5, 7, 9}; n="sizeof(arr)" sizeof(arr[0]); index="binary_search(arr," 0, 1, target); (index="=" -1) printf('target found
'); at %d
', index); 0; pre> <p> <strong>Output:</strong> </p> <pre> Target found at index 2 </pre> <ul> <li>The binary_search function accepts four arguments: the array to search, the left and right search range boundaries, and the target value to look for. The function returns its index if the desired value can be found; else, it returns -1.</li> <li>The main function creates an array arr and a value target. The binary_search function is then used to search the array for the desired value. The function returns the index where the target value was located if it was, the function returns the index at which it was found. Otherwise, the message &apos;Target not found&apos; is displayed.</li> <li>The binary search algorithm&apos;s implementation is basic. We begin by setting the left border to the array&apos;s initial index and the right boundary to the array&apos;s last index. Once the left boundary is less than or equal to the right border, the array is looped through one more time. We use the formula (left + right) / 2 within the loop to calculate the middle index of the search range. This formula computes the integer value of the middle index&apos;s floor.</li> <li>The centre member of the array is contrasted with the target value. We return the index of the middle element if they are equal. We change the right boundary to be one less than the middle index if the desired value is less than the middle element. If not, we adjust the left border so that it is one more than the centre index. We continue doing this until the goal value is obtained or the search space is filled.</li> <li>The temporal complexity of the binary search algorithm, where n is the array size, is O(log n). This is far more efficient than linear search, which has a temporal complexity of O(n), where n is the size of the array.</li> <li>Finally, the binary search technique offers a useful way to locate a particular member in a sorted array. It is easy to build and has an O(log n) time complexity, making it an efficient approach for large datasets.</li> </ul> <h3>Advantages:</h3> <ul> <li>For large datasets, the binary search algorithm is exceptionally efficient, and it is capable of handling a wide range of input sizes.</li> <li>The algorithm is simple to implement in almost all programming languages.</li> </ul> <h3>Disadvantages:</h3> <ul> <li>Before using the binary search technique, the input array must be sorted, which takes more time and memory.</li> <li>The algorithm cannot be applied to unsorted arrays.</li> <li>The algorithm may yield inaccurate results if the input array is not sorted.</li> <li>The binary search algorithm is not appropriate for tiny datasets since the technique&apos;s overhead may outweigh its benefits.</li> </ul> <h2>Conclusion:</h2> <p>A sorted array can be quickly searched for a specific element using the binary search technique. It employs a divide-and-conquer strategy to cut the search range in half with each iteration, allowing it to be highly efficient for large datasets. However, before using the binary search technique, the input array must be sorted, which takes extra time and memory. The binary search algorithm is a sophisticated data processing tool that is widely utilised in various sectors.</p> <hr></=>
  • Функція binary_search приймає чотири аргументи: масив для пошуку, ліві та праві межі діапазону пошуку та цільове значення для пошуку. Функція повертає свій індекс, якщо потрібне значення можна знайти; інакше повертає -1.
  • Функція main створює масив arr і цільове значення. Потім функція binary_search використовується для пошуку потрібного значення в масиві. Функція повертає індекс, де знаходилося цільове значення, якщо воно було, функція повертає індекс, за яким воно було знайдено. В іншому випадку з’явиться повідомлення «Ціль не знайдено».
  • Реалізація алгоритму бінарного пошуку є базовою. Ми починаємо з встановлення лівої межі до початкового індексу масиву, а правої межі до останнього індексу масиву. Коли ліва межа менша або дорівнює правій межі, масив повторюється ще раз. Ми використовуємо формулу (ліворуч + праворуч) / 2 у межах циклу, щоб обчислити середній індекс діапазону пошуку. Ця формула обчислює ціле значення мінімального середнього індексу.
  • Центральний елемент масиву контрастує з цільовим значенням. Ми повертаємо індекс середнього елемента, якщо вони рівні. Ми змінюємо праву межу на одиницю меншу за середній індекс, якщо бажане значення менше за середній елемент. Якщо ні, ми регулюємо ліву межу так, щоб вона була на один більше, ніж центральний індекс. Ми продовжуємо робити це, доки не буде отримано цільове значення або не буде заповнено поле пошуку.
  • Часова складність алгоритму бінарного пошуку, де n — розмір масиву, становить O(log n). Це набагато ефективніше, ніж лінійний пошук, який має часову складність O(n), де n — розмір масиву.
  • Нарешті, техніка бінарного пошуку пропонує корисний спосіб знайти певний член у відсортованому масиві. Він простий у створенні та має O(log n) часову складність, що робить його ефективним підходом для великих наборів даних.

Переваги:

  • Для великих наборів даних алгоритм двійкового пошуку надзвичайно ефективний і здатний обробляти широкий діапазон розмірів вхідних даних.
  • Алгоритм простий у реалізації практично на всіх мовах програмування.

Недоліки:

  • Перед використанням техніки бінарного пошуку необхідно відсортувати вхідний масив, що займає більше часу та пам’яті.
  • Алгоритм не можна застосувати до невідсортованих масивів.
  • Алгоритм може дати неточні результати, якщо вхідний масив не відсортовано.
  • Алгоритм бінарного пошуку не підходить для крихітних наборів даних, оскільки накладні витрати техніки можуть переважити її переваги.

Висновок:

У відсортованому масиві можна швидко знайти певний елемент за допомогою техніки бінарного пошуку. Він використовує стратегію «розділяй і володарюй», щоб скорочувати діапазон пошуку наполовину з кожною ітерацією, що дозволяє бути високоефективним для великих наборів даних. Однак перед використанням техніки бінарного пошуку необхідно відсортувати вхідний масив, що потребує додаткового часу та пам’яті. Алгоритм двійкового пошуку — це складний інструмент обробки даних, який широко використовується в різних секторах.