IPB
ЛогинПароль:

> Закономерность в массиве
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Нужно в массиве 2n элементов поменять последовательность элементов на
а1аn+1a2an+2...ana2n
Препод говорил, что с помощью одной переменной этого сделать нельзя. (доп массив из n элементов - не интересно).
Вот что получилось (один запоминается, а на его место ставится, но уже на свое место другой):
Curr := 2;
buf := a[Curr];
for i := 1 to 2*n-3 do
begin
if Curr mod 2 = 0 then
Next := n+Curr div 2
else
Next := (Curr+1) div 2;
a[Curr] := a[Next];
Curr := Next;
end;
a[Curr] := buf;

но работает только для некоторых, и процент работающих с ростом n уменьшается.
Для неработающих: должен где-то быть вызов буфера, но этого я не делал, т.к. для этого, по моей фантазии надо как минимум еще один булевый 2n-2 массив, что еще хуже дополнительного массива.
Неужели он был прав?

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


1. Берём x
2. Берём y = 2x mod (2n-1)
3. Меняем местами элементы x и y
4. Переходим к 1.

Проблема только в условиях начала и выхода из цикла.
Для 12 элементов картинка такая, видно, что надо провести один циклический обмен по специальной траектории.
Прикрепленное изображение
Для другого n циклов может быть больше.
Суммарная длина циклов равна n-2 в любом случае.
Главное в общем виде понять, как выглядит каждая траектория (это уже я понял), и откуда начинается.
Заканчивать циклический обмен надо тогда, когда y становится равным x_start. Откуда начинать, вот в чём вопрос. Вот мы сделали один цикл, от единицы, при помощи счётчика мы даже можем установить, что мы прошли не все элементы. Каков номер следующего нетронутого элемента?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
sheka   Закономерность в массиве   30.10.2010 0:59
Гость   Парными перестановками можно переставить массив не…   30.10.2010 1:57
Гость   Или требуется именно за O(n) сделать? Хм, интересн…   30.10.2010 1:58
Lapp   Неужели он был прав?Грубо говоря, правило такое: л…   30.10.2010 9:58
Гость   TarasBer прикинул на бумаге, и TarasBer решил, что…   30.10.2010 16:43
Lapp   если задать n наперёд, то написать алгоритм, дающи…   30.10.2010 17:58
Гость   Лень перелогиниваться. До картинок дело не дошло п…   30.10.2010 18:57
Lapp   Можно, но не нужно. Надо найти закономерность, что…   30.10.2010 19:17
TarasBer   1. Берём x 2. Берём y = 2x mod (2n-1) 3. Меняем ме…   30.10.2010 19:30
Lapp   Главное в общем виде понять, как выглядит каждая т…   31.10.2010 8:54
TarasBer   Короче, алгебраисты нужны При каких эн верно min{k…   31.10.2010 14:58
sheka   Я это подразумевал :) Товарищ преподаватель чуть-ч…   31.10.2010 22:55
TarasBer   Ща попытаюсь разобраться, что тут написано. У тебя…   31.10.2010 23:53
Unconnected   Поясните плз, смысл в том, чтобы an элементы менят…   1.11.2010 1:39
Lapp   Шек, я совершенно согласен с ТарасБером: желание в…   1.11.2010 10:44
sheka   Пожалуй, прокомментирую код - думаю, отвечу на все…   1.11.2010 23:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.05.2024 13:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name