Поиск четных чисел в массиве без использования обратной связи

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

Дан массив длины n, содержащий не более e четных чисел и функция isEven , которая возвращает истину, если вход четный, и ложь. в противном случае напишите функцию, которая печатает все четные числа в массив, использующий наименьшее количество обращений к isEven .

Ответ на этот пост заключался в использовании двоичного поиска, что удобно, поскольку это не означает, что массив должен быть в порядке. Количество раз, которое вы должны проверить, является ли число четным, равно e log n вместо n , потому что вы выполняете двоичный поиск ( log n ), чтобы найти одно четное число каждый раз ( e раз).

Но эта идея означает, что вы делите массив пополам, проверяете его на равномерность, а затем решаете, какую половину оставить, исходя из результата.

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

Я думал об этом какое-то время и ничего не мог придумать. Идея бинарного поиска вообще не работает с этим ограничением, но, может быть, работает что-то еще? Было бы неплохо даже перейти к вызовам n / 2 вместо n (да, я знаю, что они такие же большие).

7
задан Community 23 May 2017 в 10:34
поделиться