Я видел это сообщение: Нахождение четных чисел в массиве , и я думал о том, как вы могли бы сделать это без обратной связи. Вот что я имею в виду.
Дан массив длины n, содержащий не более
e
четных чисел и функцияisEven
, которая возвращает истину, если вход четный, и ложь. в противном случае напишите функцию, которая печатает все четные числа в массив, использующий наименьшее количество обращений кisEven
.
Ответ на этот пост заключался в использовании двоичного поиска, что удобно, поскольку это не означает, что массив должен быть в порядке. Количество раз, которое вы должны проверить, является ли число четным, равно e log n
вместо n
, потому что вы выполняете двоичный поиск ( log n
), чтобы найти одно четное число каждый раз ( e
раз).
Но эта идея означает, что вы делите массив пополам, проверяете его на равномерность, а затем решаете, какую половину оставить, исходя из результата.
Мой вопрос заключается в том, сможете ли вы превзойти n
вызовов по фиксированной схеме тестирования, где вы проверяете все нужные числа на четность, не зная результата, а затем выясняете, где четные числа после вы сделали все тесты по результатам. Так что я полагаю, что это без обратной связи, или слепой, или какой-то другой термин в этом роде.
Я думал об этом какое-то время и ничего не мог придумать. Идея бинарного поиска вообще не работает с этим ограничением, но, может быть, работает что-то еще? Было бы неплохо даже перейти к вызовам n / 2
вместо n
(да, я знаю, что они такие же большие).