πŸ” Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² Python?

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² Python?

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск - это эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для поиска элСмСнта Π² отсортированном массивС ΠΈΠ»ΠΈ спискС. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΡ‚Π΅ΠΌ дСлСния ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π½Π° Π΄Π²Π΅ Ρ€Π°Π²Π½Ρ‹Π΅ части ΠΈ сравнСния искомого элСмСнта с элСмСнтом Π² сСрСдинС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСмонстрируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска:


def binary_search(arr, target):
    left = 0
    right = len(arr) - 1
    
    while left <= right:
        mid = (left + right) // 2
        
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    
    return -1

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binary_search
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
print(f"ИндСкс искомого элСмСнта: {result}") 

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция binary_search ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ отсортированный массив arr ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ элСмСнт target. Она ΠΈΡ‰Π΅Ρ‚ target Π² массивС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ индСкс, Ссли элСмСнт Π½Π°ΠΉΠ΄Π΅Π½, ΠΈΠ»ΠΈ -1, Ссли элСмСнт отсутствуСт Π² массивС.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° врСмя O(log n), Π³Π΄Π΅ n - количСство элСмСнтов Π² массивС. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° врСмя O(n).

НадСюсь, это ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² Python.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² Python

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск - это эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска элСмСнта Π² отсортированном спискС. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС элСмСнты списка ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск раздСляСт список Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΈ сравниваСт искомый элСмСнт с элСмСнтом Π² сСрСдинС. На основС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° сравнСния ΠΎΠ½ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ поиск. Π­Ρ‚ΠΎΡ‚ процСсс повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° искомый элСмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ список Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ просмотрСн.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Π½Π° Python:

# Ѐункция для выполнСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска
def binary_search(arr, target):
    low = 0
    high = len(arr) - 1
    
    while low <= high:
        mid = (low + high) // 2
        guess = arr[mid]
        
        if guess == target:
            return mid
        
        if guess > target:
            high = mid - 1
        else:
            low = mid + 1
    
    return -1

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
my_list = [2, 4, 6, 8, 10]
target_number = 6

result = binary_search(my_list, target_number)
if result == -1:
    print("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½")
else:
    print("Π˜ΡΠΊΠΎΠΌΡ‹ΠΉ элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ", result)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ функция binary_search, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ отсортированный список arr ΠΈ искомый элСмСнт target. ΠœΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π° указатСля: low (наимСньший индСкс) ΠΈ high (наибольший индСкс) Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ списка соотвСтствСнно.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ…ΠΎΠ΄ΠΈΠΌ Π² Ρ†ΠΈΠΊΠ» while, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° low Π½Π΅ станСт большС high. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ индСкс срСднСго элСмСнта списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ (low + high) // 2 ΠΈ провСряСм, являСтся Π»ΠΈ ΠΎΠ½ искомым элСмСнтом. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² спискС.

Если срСдний элСмСнт большС искомого, ΠΌΡ‹ обновляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ high Π½Π° mid - 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠ·ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ поиска Π΄ΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ списка. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ обновляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ low Π½Π° mid + 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠ·ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ поиска Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ списка.

Если Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ ΠΌΡ‹ Π½Π΅ нашли искомый элСмСнт, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ -1 для указания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ отсортированный список [2, 4, 6, 8, 10] ΠΈ ΠΈΡ‰Π΅ΠΌ элСмСнт 6. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ элСмСнта 6 Π² спискС, которая Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ€Π°Π²Π½Π° 2.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния O(log n), Π³Π΄Π΅ n - количСство элСмСнтов Π² спискС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ врСмя выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° увСличиваСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста Ρ€Π°Π·ΠΌΠ΅Ρ€Π° списка.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск являСтся эффСктивным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ для поиска элСмСнта Π² отсортированном спискС. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΡ‚Π΅ΠΌ раздСлСния списка Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΈ сравнСния искомого элСмСнта с элСмСнтом Π² сСрСдинС. Благодаря своСй Π»ΠΎΠ³ΠΈΠΊΠΈ, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск ΠΌΠΎΠΆΠ΅Ρ‚ быстро Π½Π°ΠΉΡ‚ΠΈ искомый элСмСнт, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эффСктивно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ элСмСнты Π² отсортированных списках. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Π²Π°ΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ваш список отсортирован, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Алгоритм Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска. Binary search algorithm. Python

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ, ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ, поиск элСмСнта Π² спискС (ΠΌΠ΅Ρ‚ΠΎΠ΄ дСлСния ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ). РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Python

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ слоТном: Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”‘ Как ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ список Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ | ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ пошаговоС руководство

πŸ”½ Как ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡ‚ΠΎΠ½ Π½Π° Виндовс 10: простоС руководство ΠΈ совСты πŸ“₯

🎨 Как ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΠ½ Π² Python idle: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство

πŸ” Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² Python?

Какой Python Π½ΡƒΠΆΠ΅Π½ для Windows?

πŸ” Π ΠΎΠ»ΠΈ ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ full stack python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

Как Π½Π°ΠΉΡ‚ΠΈ наимСньший ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π²ΡƒΡ… чисСл Π² Python? πŸ”πŸ”’