МЕНЮ:
Аналитик | Постановщик задач | Проектировщик | Программист | Программист БД
Инженер по тестированию | Тестировщик | Инженер по документированию
Инженер по внедрению | Инженер поддержки | Менеджер проекта | Менеджер подразделения
Менеджер по продажам | Менеджер по маркетингу | Администратор | Администратор БД
Литература | Контакты
\

Книга Жемчужены творчества программистов на IT БАЗАР

Если I = 3 и N = 12, то на этой фазе элементы перемещаются в следующем порядке:
Рис. 2.2
Если при этом были перемещены не все элементы, то начнем с элемента X [2] и будем продолжать указанные действия, пока не переместим все элементы. Будьте внимательны! В задаче 3 вам брошен вызов: превра­тить эту идею в программу.
Следующий алгоритм является следствием другого подхода к задаче: циклически сдвинуть вектор X - это значит в действительности поменять местами две части вектора АВ так, чтобы получился вектор В А, где А соответствует первым I элементам вектора X. Предположим, что А короче, чем В. Разделим В на две части ^ и Вд так, чтобы часть Вд имела такую же длину, что и А. Поменяем местами А и BR, чтобы транс­формировать ABlBj^ в Bj^A. Последовательность элементов А на своем конечном месте, поэтому мы можем сосредоточиться на перестановке двух частей В. Так как эта новая задача аналогична исходной, решать ее можно рекурсивно. Такой алгоритм может привести к изящной прог­рамме (в решении задачи 3 описано итеративное решение из восьми строк, предложенное Гризом и Миллзом), но требует искусного прог­раммирования и некоторых раздумий, чтобы убедиться в его эффектив­ности.
Эта задача выглядит трудной до тех пор, пока вас не посетит ага! Оза­рение: давайте посмотрим на нее как на трансформацию массива АВ в массив ВА, но предположим, что у нас есть подпрограмма, которая ре­версирует (меняет порядок элементов на обратный) заданную часть мас­сива. Начав с массива АВ, мы реверсируем его часть А, чтобы получить ARB; реверсируем часть В, чтобы получить ARBR; а потом реверсируем их совокупность и получаем (A BR)R, что в точности соответствует мас­сиву ВА. Это приводит к следующей программе для циклического сдви­га (в комментариях показаны результаты при циклическом сдвиге пос­ледовательности ABCDEFGH на 3 элемента):
Reverse(1,1)           Л CBADEFGH */
Reverse(I+i,K) /* CBAHGFED */ Reverse(1,N)           /I DEFGHABC */
25


Страница №26
*
Зайцев нет
© "IT БАЗАР", 2003. Все права защищены. Создание: © "z-group" студия веб-дизайна, 2003.
Также может поискать работу на прямую в следуйщих организациях:
IT БАЗАР