Моя функция бинарного поиска в Python не работает

Это всего лишь цикл for...in. Проверьте документацию в Mozilla .

2
задан Hamish DRUMMOND 28 March 2019 в 05:53
поделиться

3 ответа

Вы на самом деле ничего не делаете с start_point и end_point.

Кроме того, если элемент в середине больше, чем искомый элемент, не хотите ли вы переместить end_point в середину? То же самое относится и к вашему elif-утверждению - если элемент посередине меньше, чем искомый элемент, вам нужно переместить start_point в середину.

0
ответ дан user10987432 28 March 2019 в 05:53
поделиться

Прежде чем решить проблему, давайте обсудим бинарный поиск,

Бинарный поиск: Поиск отсортированного массива путем многократного деления интервала поиска пополам. Начните с интервала, охватывающего весь массив. Если значение ключа поиска меньше, чем элемент в середине интервала, сузьте интервал до нижней половины. В противном случае сузьте его до верхней половины.

Здесь вам нужно менять среднюю точку каждый раз, когда цикл завершает один цикл, а затем вам нужно проверить, находится ли элемент в нижней или верхней половине, если он присутствует в нижней половине, тогда вам нужно изменить конечную точку, а не запускать -point, а если в верхней половине, то изменить нижнюю точку

И еще одна важная вещь: в вашем условии while, если элемент отсутствует, он будет находиться в бесконечном цикле, поэтому ваше условие while должно быть в то время как (end_point> start_point), потому что мы меняем точки в каждом цикле.

Код для справки:

def binary_search(array,item):
    start_point = 0
    end_point = len(array)
    array.sort()
    print(array)
    while end_point > start_point:
        mid_point = int((start_point + end_point) / 2)
        if array[mid_point] < item:
            start_point = mid_point+1
        elif array[mid_point] > item:
            end_point = mid_point-1
        elif array[mid_point] == item:
            print(mid_point)
            return
    print("ELement is not present")

binary_search([0,99,2,6,7,8],3)
0
ответ дан gaurav 28 March 2019 в 05:53
поделиться

Что идет не так, так это то, что цикл while сравнивает одно и то же значение array[mid_point] на каждой итерации, таким образом, заканчивая бесконечным циклом, если условие удовлетворяется.

Бинарный поиск является рекурсивным подходом и выполняет итерации по меньшим элементам одного и того же списка с каждой итерацией, пока не будет получен индекс требуемого элемента, если он присутствует в списке. Ваш код будет работать, если вы нарежете array и вызовете binary_search рекурсивно, передавая новый список в качестве аргумента. Цикл while может быть заменен простым условием if.

Для получения дополнительной информации, проверьте эту ссылку и сравните с вашей функцией, чтобы понять разницу. :)

0
ответ дан Devisha Mehta 28 March 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: