Процесс бинарного выбора

Я работаю над тем, что кажется простой задачей, которая сводит меня с ума. Так что, если вы представляете себе задачу по программированию... читайте дальше.

Я хочу иметь возможность взять диапазон чисел, например. [1 :20] и вывести значения, используя механизм, аналогичный алгоритму бинарного поиска. Итак, выведите сначала наименьшее значение (, в данном случае 1 ), а затем среднее значение (, например. в этом случае 10 ), а затем разделите диапазон на четверти и выведите значения в 1/4 и 3/4 (в этом случае 5 и 15 ), а затем разделите на восьмерки и так далее, пока не все значения в диапазоне были напечатаны.

Применение этого (, которое на самом деле не обязательно понимать здесь ), относится к механизму доступа к страницам памяти, который ведет себя более эффективно, когда сначала осуществляется доступ к страницам в средних диапазонах.

Для этой задачи было бы достаточно взять любой диапазон чисел и вывести значения способом, описанным выше.

Есть мысли по этому поводу? Решение псевдокода было бы хорошо. Я бы показал попытку этого, но все, что я пробовал до сих пор, не сокращает его. Спасибо.

Обновление :В соответствии с запросом желаемый результат для примера [1 :20] будет примерно таким :1, 10, 5, 15, 3, 7, 12, 17, 2, 4, 6, 8, 11, 13, 16, 18, 9, 19, 20

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

9
задан Steve Walsh 8 August 2012 в 07:31
поделиться