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

> Закономерность в массиве
sheka
сообщение 29.10.2010 20:59
Сообщение #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 - 1.11.2010 20:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
TarasBer
сообщение 30.10.2010 15:30
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 31.10.2010 4:54
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(TarasBer @ 30.10.2010 16:30) *
Главное в общем виде понять, как выглядит каждая траектория (это уже я понял), и откуда начинается.
Заканчивать циклический обмен надо тогда, когда y становится равным x_start. Откуда начинать, вот в чём вопрос. Вот мы сделали один цикл, от единицы, при помощи счётчика мы даже можем установить, что мы прошли не все элементы. Каков номер следующего нетронутого элемента?
Именно. Подобный "пустяк" может оказаться принципиальным и пустить все "разумное, доброе, вечное" под откос )). TarasBer, мне будет очень интересно посмотреть на реализацию.. I believe in you!! respect.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 20.07.2025 2:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"