Мы нашли решение: двоичный поиск. Теперь попробуем поискать задачи для этого решения. Рассмотрим задачу, которая может иметь несколько решений. Задача 2 заключается в циклическом сдвиге массива х из п элементов влево па i позиций за время, пропорциональное п, причем доступно лишь несколько десятков байт оперативной памяти. В некоторых языках программирования операция циклического сдвига является элементарной (то есть выполняется одним оператором). Для нас важно, что циклический сдвиг соответствует обмену соседних блоков памяти разного размера: при перемещении фрагмента текста с помощью мыши из одного места файла в другое осуществляется именно эта операция. Ограничения по времени и объему памяти существенны для многих подобных приложений.
Можно попытаться решить задачу, копируя первые i элементов массива х во временный массив, сдвигая оставшиеся n-i элементов влево на i позиций, а затем копируя данные из временного массива обратно в основной массив на последние i позиций. Однако данная схема использует i дополнительных переменных, что требует дополнительной памяти. Другой подход заключается в том, чтобы определить функцию, сдвигающую массив влево на один элемент (за время, пропорциональное п), а потом вызывать ее i раз, но такой алгоритм будет отнимать слишком много времени.
Опубликовал vovan666
April 16 2013 23:34:36 ·
0 Комментариев ·
3560 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.