У цьому посібнику ми дізнаємося, як ми можемо застосувати алгоритм бінарного пошуку за допомогою Python, щоб знайти позицію індексу елемента в заданому списку.
вступ
Бінарний пошук — це алгоритм пошуку певного елемента в списку. Припустимо, у нас є список із тисячі елементів, і нам потрібно отримати позицію індексу певного елемента. Ми можемо дуже швидко знайти позицію індексу елемента за допомогою алгоритму бінарного пошуку.
Існує багато пошукових алгоритмів, але найпопулярнішим серед них є бінарний пошук.
Щоб застосувати двійковий алгоритм пошуку, елементи в списку потрібно відсортувати. Якщо елементи не відсортовані, спочатку відсортуйте їх.
turbo c++ завантажити
Давайте розберемося з концепцією бінарного пошуку.
Концепція бінарного пошуку
В алгоритмі бінарного пошуку ми можемо знайти позицію елемента за допомогою наступних методів.
- Рекурсивний метод
- Ітераційний метод
За технікою підходу «розділяй і володарюй» слідує рекурсивний метод. У цьому методі функція викликається знову і знову, доки не знайде елемент у списку.
Набір операторів повторюється кілька разів, щоб знайти позицію індексу елемента в ітераційному методі. The поки Для виконання цього завдання використовується цикл.
Двійковий пошук ефективніший за лінійний, оскільки нам не потрібно шукати кожен індекс списку. Список має бути відсортований для досягнення алгоритму бінарного пошуку.
Розглянемо крок за кроком реалізацію бінарного пошуку.
У нас є відсортований список елементів, і ми шукаємо позицію індексу 45.
[12, 24, 32, 39, 45, 50, 54]
Отже, ми встановлюємо два покажчики в нашому списку. Один покажчик використовується для позначення меншого викликаного значення низький а другий покажчик використовується для позначення найвищого викликаного значення висока .
бінарне дерево проти bst
Далі обчислюємо значення середина елемент у масиві.
mid = (low+high)/2 Here, the low is 0 and the high is 7. mid = (0+7)/2 mid = 3 (Integer)
Тепер ми порівняємо шуканий елемент із середнім значенням індексу. В цьому випадку, 32 не дорівнює Чотири. Отже, нам потрібно провести подальше порівняння, щоб знайти елемент.
Якщо число, яке ми шукаємо, дорівнює середині. Потім поверніться середина інакше переходимо до подальшого порівняння.
Число для пошуку більше, ніж середина кількість, порівнюємо п із середнім елементом елементів з правого боку середина і встановіть низький рівень низький = середній + 1.
В іншому випадку порівняйте п з середній елемент елементів з лівого боку середина і встановити висока до високий = середній - 1.
Повторюйте, доки не буде знайдено номер, який ми шукаємо.
Реалізація бінарного пошуку в Python
По-перше, ми реалізуємо двійковий пошук за допомогою ітераційного методу. Ми повторимо набір операторів і повторимо кожен елемент списку. Знаходимо середнє значення, поки пошук не завершиться.
Давайте розберемося з наступною програмою ітераційного методу.
Реалізація Python
# Iterative Binary Search Function method Python Implementation # It returns index of n in given list1 if present, # else returns -1 def binary_search(list1, n): low = 0 high = len(list1) - 1 mid = 0 while low <= 1 2 high: # for get integer result mid="(high" + low) check if n is present at list1[mid] n: high="mid" - smaller, compared to the left of else: return element was not in list, -1 initial list1 24, 32, 39, 45, 50, 54] function call n) !="-1:" print('element index', str(result)) list1') < pre> <p> <strong>Output:</strong> </p> <pre> Element is present at index 4 </pre> <p> <strong>Explanation:</strong> </p> <p>In the above program -</p> <ul> <li>We have created a function called <strong>binary_search()</strong> function which takes two arguments - a list to sorted and a number to be searched.</li> <li>We have declared two variables to store the lowest and highest values in the list. The low is assigned initial value to 0, <strong>high</strong> to <strong>len(list1)</strong> - 1 and mid as 0.</li> <li>Next, we have declared the <strong>while</strong> loop with the condition that the <strong>lowest</strong> is equal and smaller than the <strong>highest</strong> The while loop will iterate if the number has not been found yet.</li> <li>In the while loop, we find the mid value and compare the index value to the number we are searching for.</li> <li>If the value of the mid-index is smaller than <strong>n</strong> , we increase the mid value by 1 and assign it to The search moves to the left side.</li> <li>Otherwise, decrease the mid value and assign it to the <strong>high</strong> . The search moves to the right side.</li> <li>If the n is equal to the mid value then return <strong>mid</strong> .</li> <li>This will happen until the <strong>low</strong> is equal and smaller than the <strong>high</strong> .</li> <li>If we reach at the end of the function, then the element is not present in the list. We return -1 to the calling function.</li> </ul> <p>Let's understand the recursive method of binary search.</p> <h2>Recursive Binary Search</h2> <p>The recursion method can be used in the binary search. In this, we will define a recursive function that keeps calling itself until it meets the condition.</p> <p>Let's understand the above program using the recursive function.</p> <h3>Python Program</h3> <pre> # Python program for recursive binary search. # Returns index position of n in list1 if present, otherwise -1 def binary_search(list1, low, high, n): # Check base case for the recursive function if low n: return binary_search(list1, low, mid - 1, n) # Else the search moves to the right sublist1 else: return binary_search(list1, mid + 1, high, n) else: # Element is not available in the list1 return -1 # Test list1ay list1 = [12, 24, 32, 39, 45, 50, 54] n = 32 # Function call res = binary_search(list1, 0, len(list1)-1, n) if res != -1: print('Element is present at index', str(res)) else: print('Element is not present in list1') </pre> <p> <strong>Output:</strong> </p> <pre> Element is present at index 2 </pre> <p> <strong>Explanation</strong> </p> <p>The above program is similar to the previous program. We declared a recursive function and its base condition. The condition is the lowest value is smaller or equal to the highest value.</p> <ul> <li>We calculate the middle number as in the last program.</li> <li>We have used the <strong>if</strong> statement to proceed with the binary search.</li> <li>If the middle value equal to the number that we are looking for, the middle value is returned.</li> <li>If the middle value is less than the value, we are looking then our recursive function <strong>binary_search()</strong> again and increase the mid value by one and assign to low.</li> <li>If the middle value is greater than the value we are looking then our recursive function <strong>binary_search()</strong> again and decrease the mid value by one and assign it to low.</li> </ul> <p>In the last part, we have written our main program. It is the same as the previous program, but the only difference is that we have passed two parameters in the <strong>binary_search()</strong> function.</p> <p>This is because we can't assign the initial values to the low, high and mid in the recursive function. Every time the recursive is called the value will be reset for those variables. That will give the wrong result.</p> <h2>Complexity</h2> <p>The complexity of the binary search algorithm is <strong>O(1)</strong> for the best case. This happen if the element that element we are looking find in the first comparison. The <strong>O(logn)</strong> is the worst and the average case complexity of the binary search. This depends upon the number of searches are conducted to find the element that we are looking for.</p> <h2>Conclusion</h2> <p>A binary search algorithm is the most efficient and fast way to search an element in the list. It skips the unnecessary comparison. As the name suggests, the search is divided into two parts. It focuses on the side of list, which is close to the number that we are searching.</p> <p>We have discussed both methods to find the index position of the given number.</p> <hr></=>
Пояснення:
У наведеній вище програмі -
- Ми створили функцію під назвою binary_search() функція, яка приймає два аргументи - список для сортування та число для пошуку.
- Ми оголосили дві змінні для зберігання найнижчого та найвищого значень у списку. Низькому початковому значенню присвоюється 0, висока до len(список1) - 1 і середина як 0.
- Далі ми оголосили поки циклу з умовою, що найнижчий рівний і менший за найвищий Цикл while буде повторюватися, якщо число ще не знайдено.
- У циклі while ми знаходимо середнє значення та порівнюємо значення індексу з числом, яке ми шукаємо.
- Якщо значення середнього індексу менше ніж п , ми збільшуємо середнє значення на 1 і призначаємо його Пошук переміщується вліво.
- В іншому випадку зменшіть середнє значення та призначте його висока . Пошук переміститься в праву сторону.
- Якщо n дорівнює середньому значенню, повертається середина .
- Це відбуватиметься доти низький рівний і менший за висока .
- Якщо ми досягнемо кінця функції, значить, елемента немає в списку. Ми повертаємо -1 функції виклику.
Давайте розберемося з рекурсивним методом бінарного пошуку.
javascript для спадного меню
Рекурсивний двійковий пошук
У двійковому пошуку можна використовувати метод рекурсії. Тут ми визначимо рекурсивну функцію, яка продовжує викликати саму себе, доки не виконає умову.
Давайте розберемося з наведеною вище програмою за допомогою рекурсивної функції.
Програма Python
# Python program for recursive binary search. # Returns index position of n in list1 if present, otherwise -1 def binary_search(list1, low, high, n): # Check base case for the recursive function if low n: return binary_search(list1, low, mid - 1, n) # Else the search moves to the right sublist1 else: return binary_search(list1, mid + 1, high, n) else: # Element is not available in the list1 return -1 # Test list1ay list1 = [12, 24, 32, 39, 45, 50, 54] n = 32 # Function call res = binary_search(list1, 0, len(list1)-1, n) if res != -1: print('Element is present at index', str(res)) else: print('Element is not present in list1')
Вихід:
Element is present at index 2
Пояснення
Наведена вище програма схожа на попередню. Ми оголосили рекурсивну функцію та її базову умову. Умова: найменше значення менше або дорівнює найвищому значенню.
- Розраховуємо середнє число, як і в минулій програмі.
- Ми використали якщо оператор для продовження двійкового пошуку.
- Якщо середнє значення дорівнює числу, яке ми шукаємо, повертається середнє значення.
- Якщо середнє значення менше значення, ми шукаємо нашу рекурсивну функцію binary_search() знову та збільште середнє значення на одиницю та призначте низьке.
- Якщо середнє значення більше за значення, яке ми шукаємо, тоді наша рекурсивна функція binary_search() знову та зменшіть середнє значення на одиницю та призначте його низькому.
В останній частині ми написали нашу основну програму. Це те саме, що й попередня програма, але єдина відмінність полягає в тому, що ми передали два параметри в binary_search() функція.
Це пояснюється тим, що ми не можемо призначити початкові значення низьким, високим і середнім рівням у рекурсивній функції. Щоразу, коли викликається рекурсія, значення цих змінних буде скинуто. Це дасть неправильний результат.
Складність
Складність алгоритму бінарного пошуку полягає в тому О(1) на кращий випадок. Це трапляється, якщо елемент, який ми шукаємо, знаходимо під час першого порівняння. The O (вхід) є найгіршим і середнім випадком складності бінарного пошуку. Це залежить від кількості пошуків, які проводяться, щоб знайти елемент, який ми шукаємо.
як перетворити рядок на ціле число
Висновок
Алгоритм бінарного пошуку є найбільш ефективним і швидким способом пошуку елемента в списку. Він пропускає непотрібне порівняння. Як випливає з назви, пошук ділиться на дві частини. Він фокусується на стороні списку, яка ближча до номера, який ми шукаємо.
Ми обговорили обидва методи пошуку позиції індексу даного числа.
=>