Advertisement
_RayBoy_

Лекция 2. Упражнение 1

Feb 18th, 2022
1,086
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. """ Написать реализацию бинарного поиска на Python.
  2.    Имеется отсортированный список из 148 имен, и вы ищете в нем
  3.    значение методом бинарного поиска."""
  4. # count = 1
  5. def binary_search(li, key):
  6.     # global count
  7.     low = 0  # Нижняя граница
  8.     up = len(li)  # Верхняя граница
  9.  
  10.     while low <= up:
  11.         cent = (up + low) // 2  # Берём целую воловину
  12.         # count += 1
  13.  
  14.         if li[cent] == key:
  15.             return cent  # Возвращаем индекс
  16.         if li[cent] > key:
  17.             up = cent - 1
  18.         elif li[cent] < key:
  19.             low = cent + 1
  20.     return -1  # Не встречалось
  21.  
  22.  
  23. data = [i for i in range(1, 149)]  # Допустим, вместо имён я буду использовать цифры
  24.  
  25. print(binary_search(data, 1))  # 150 --> 1
  26. # print(count)
  27.  
  28. """
  29.    Какое максимальное количество проверок для этого может потребоваться?
  30.           Ответ: используя формулу log2 148 и округляю в большую сторону получим: 8
  31.           2^7 < 148 < 2^8
  32.          
  33.           Также можно проверить через программу написанную выше, раскомментировав
  34.           закомментированные части и введя 1
  35.  
  36.    Предположим, размер списка увеличился вдвое. Как изменится максимальное количество
  37.    проверок? 148 --> 296
  38.           Ответ: Всё та же формула log2 296, всё также округляю в большую сторону: 9
  39.           2^8 < 296 < 2^9
  40.          
  41.           Всё также можно проверить через программу.
  42. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement