Найти - Пользователи
Полная версия: Помогите с задачей. Угадайка чисел от 1 до 1000
Начало » Python для новичков » Помогите с задачей. Угадайка чисел от 1 до 1000
1 2 3
vic57
py.user.next
Это обычный бинарный поиск (в основе лежит принцип дихотомии). Максимальное количество шагов равно log2(1000) ~= 9.96
совершенно верно
а для точности нахождения из множества 0…N начальное число должно быть
 >>> import math
>>> N=1000
>>> 1 << math.floor(math.log2(N))
512
>>> 
иначе будут ошибки
Rodegast
> да ну?

Ты мне сейчас хочешь рассказать что он 488 не найдёт?
 rodegast@rodegast:~$ python3 ./game.py
500
<
250
>
375
>
437
>
468
>
483
>
490
<
487
>
488
vic57
Rodegast
Ты мне сейчас хочешь рассказать что он 488 не найдёт?
и не только
 def f(delta,val):
    summ = 0
    while delta:
        if summ < val: summ += delta
        elif summ > val: summ -= delta
        delta >>= 1
    return summ
d = 1000
out = {}
for i in range(440,450):
    s = f(d,i)
    if s != i: print('error',s,i)
 error 442 440
error 442 441
error 444 445
error 448 447
>>> 
Rodegast
> и не только

Тогда почему оно у меня все эти числа находит? Я наверное что-то нетак делаю…
vic57
Rodegast
Я наверное что-то нетак делаю…
код покажи
Rodegast
http://python.su/forum/topic/33906/?page=1#post-185432
py.user.next
vic57
а для точности нахождения из множества 0…N начальное число должно быть

512
По условию границы равны 1 и 1000 включительно.
Медиана множества будет равна (1 + 1000) / 2 = 500.5.
vic57
py.user.next
По условию границы равны 1 и 1000 включительно.
Медиана множества будет равна (1 + 1000) / 2 = 500.5.
по такому условию ряд в целых числах не сойдется, это элементарная двоичная арифметика
vic57
Rodegast
if S > 1: S //= 2
это костыль - количество шагов у тебя может быть больше 10
py.user.next
vic57
по такому условию ряд в целых числах не сойдется
От медианы можно взять любое из соседних целых чисел (они равноудалены от неё).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB