Python3 - Как реализовать бинарный поиск в числовой игре - PullRequest
0 голосов
/ 06 ноября 2018

Здравствуйте, я работаю над изучением бинарных деревьев поиска. Программа объясняет себя. Я запутался в том, стоит ли мне писать функцию для половины чисел. Я просто запутался в логике всего этого. Если бы вы могли помочь, я был бы очень признателен.

list_of_numbers = [i for i in range(1,101)]
print("THIS IS YOUR LIST OF NUMBERS", list_of_numbers)

lowest_number = 1
highest_number = len(list_of_numbers)-1

mid = (len(list_of_numbers)) / 2
print("IS THIS YOUR NUMBER???:", mid)

number_of_guesses = 0

while lowest_number <= highest_number:
    print('Is your number: ', mid)
    print('please enter "<,>, or ="')
    first_guess = input("???:::::::::")
    first_answer = first_guess
    print(first_answer)
    equals = "="
    greaterthan = ">"
    lessthan = "<"    
    if first_answer == equals:
        print('Great JOB I GOT YOUR NUMBER ON THE FIRST TRY')
        break
    if first_answer == lessthan:
        print('The number is now between 49-1, half it.')
        break
    elif first_answer == greaterthan:
        print('The number is now between 51-100')
        break
    else:
        print('Type one of the answers')
        break


    number_of_guesses = number_of_guesses + 1

1 Ответ

0 голосов
/ 06 ноября 2018

Вам не нужна функция, чтобы просто делить на 2. Что вы должны делать для бинарного поиска, это отслеживать верхнюю и нижнюю границы числа; тогда вы можете рассчитать предположение как (upper + lower) / 2. Если игрок говорит, что предположение слишком высокое, установите верхнюю границу для текущего предположения. Если говорят, что предположение слишком низкое, установите нижнюю границу для текущего предположения. Повторяйте это, пока правильный номер не будет найден.

Кстати, на самом деле это не дерево поиска, это просто обычный двоичный поиск. Дерево поиска будет хранить все возможные числа в графе связанного дерева и использовать его для поиска ответа, чего не происходит.

...