Проблема, связанная с двоичным поиском в скрипте Python
Всем Привет,
У меня есть вопрос относительно скрипта Python, который связан с двоичным поиском. Пожалуйста, обратитесь к приведенному ниже резюме. Скрипт был построен с помощью Python 3
Имеет 3 функции
1. linear_search()
2. binary_search()
3. best_search() - функция best_search сравнивает функции linear_search и binary_search, чтобы найти ключ в списке, и возвращает, сколько шагов сделал каждый метод и какой из них лучше всего подходит для данной ситуации.
Список не нуждается в сортировке, так как функция binary_search сортирует его перед продолжением (и использует для этого один шаг). Здесь функции linear_search и binary_search возвращают количество шагов, которые потребовались, чтобы либо найти ключ, либо определить, что его нет в списке.
Если количество шагов одинаково для обоих методов (включая дополнительный шаг для сортировки в binary_search), то результат будет равен нулю.
Я хочу знать, что я должен заполнить пробелы, чтобы получить правильные ответы.
Что я уже пробовал:
<pre>def linear_search(list, key): #Returns the number of steps to determine if key is in the list #Initialize the counter of steps steps=0 for i, item in enumerate(list): steps += 1 if item == key: break return ___ def binary_search(list, key): #Returns the number of steps to determine if key is in the list #List must be sorted: list.sort() #The Sort was 1 step, so initialize the counter of steps to 1 steps=1 left = 0 right = len(list) - 1 while left <= right: steps += 1 middle = (left + right) // 2 if list[middle] == key: break if list[middle] > key: right = middle - 1 if list[middle] < key: left = middle + 1 return ___ def best_search(list, key): steps_linear = ___ steps_binary = ___ results = "Linear: " + str(steps_linear) + " steps, " results += "Binary: " + str(steps_binary) + " steps. " if (___): results += "Best Search is Linear." elif (___): results += "Best Search is Binary." else: results += "Result is a Tie." return results print(best_search([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1)) #Should be: Linear: 1 steps, Binary: 4 steps. Best Search is Linear. print(best_search([10, 2, 9, 1, 7, 5, 3, 4, 6, 8], 1)) #Should be: Linear: 4 steps, Binary: 4 steps. Result is a Tie. print(best_search([10, 9, 8, 7, 6, 5, 4, 3, 2, 1], 7)) #Should be: Linear: 4 steps, Binary: 5 steps. Best Search is Linear. print(best_search([1, 3, 5, 7, 9, 10, 2, 4, 6, 8], 10)) #Should be: Linear: 6 steps, Binary: 5 steps. Best Search is Binary. print(best_search([5, 1, 8, 2, 4, 10, 7, 6, 3, 9], 11)) #Should be: Linear: 10 steps, Binary: 5 steps. Best Search is Binary.
Afzaal Ahmad Zeeshan
Просто краткое примечание: если ваш двоичный поиск выполняет сортировку (O(N logN)), а затем выполняет двоичный поиск (O(logN)), то я могу сказать вам примерно, что линейный поиск будет выполнять меньше операций (O(N)).
Независимо от входных данных, ваш двоичный поиск будет выполнять сортировку.
Chiranthaka Sampath
С вашей точки зрения, чего мне здесь не хватает?
Afzaal Ahmad Zeeshan
Я расширил свой комментарий в ответе, см. Решение 1.