Поиск:

Ответ в темуСоздание новой темы Создание опроса
> каждое последующее слово отлечается от предыдущего, Помогите написать алгоритм 
:(
    Опции темы
neosapient
Дата 10.11.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Помогите написать алгоритм, чтоб каждое последующее слово отлечалось от предыдущего на один символ (в собственном алфовите)

Пример:
ГОРА
ГОРЕ
МОРЕ
и так все возможные комбинации

Визуально пример
user posted image

Допустим у меня весь алфавит состоит из двух символов (0 и 1)
В слове 2 буквы, тогда всевозмежные комбинации (2символа*2буквы=4сочетания) идут в следующем порядке:
00
01
11
10

Если в слове 3 буквы:
000
001
011
010
110
100
101
111
(этот пример частично верен, т.к. из 111 в 000 нельзя перейти изменением одного символа, надо изменить три символа; хотя я уверен что правильный алгоритм поправит этот пример)

А теперь надо чтоб алфавит состоял из 4 символов, а слово имеет 7 букв, и незабывайте о порядке, чтоб каждое последующее слово отлечалось от предыдущего на один символ 

Добавлено @ 09:47 
Есть у кого идеи

Это сообщение отредактировал(а) neosapient - 10.11.2006, 09:46
PM MAIL   Вверх
Kuvaldis
Дата 10.11.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 1
Всего: 61



neosapient,
Код

Коды Грея
...
Этот алгоритм позволяет перебирать все наборы Bm так, чтобы каждый следующий набор
отличался от предыдущего только в одном разряде. Построенная с помощью этого
алгоритма последовательность наборов называется кодом Грея. Вообще, n-разрядный код
Грея — это упорядоченная (возможно, циклическая) последовательность, состоящая из
 2n n-разрядных кодовых слов, каждое из которых отличается от соседнего в одном разряде.


Будем рассматривать бинарные коды Грея порядка n. Итак, на вход алгоритма подается
единственное число n, которое указывает порядок кода Грея. По ходу выполнения
алгоритма мы получим последовательность всех подмножеств n-элементного множества,
в которой каждое последующее подмножество получается из предыдущего добавлением
или удалением единственного элемента (наименьшим возможным изменением) — код Грея.
При этом каждое подмножество будет представляться бинарной последовательностью 
B[1], …, B[n]. 


Gray-Generation(n)
 1  for i := 1 to n do B[i] := 0;
 2  i := 0;
 3  repeat
 4      write (B[i], …, B[n]);
 5      i := i + 1; p := 1; j := i;
 6      while j mod 2 = 0 do
 7          begin
 8              j := j/2; p := p + 1;  // количество 2 в разложении числа на прост. множители + 1
 9          end;
10      if p ≤ n then B[p] := 1 − B[p];
11  until p > n   




Это сообщение отредактировал(а) Kuvaldis - 10.11.2006, 11:41


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
esperant0
Дата 10.11.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



да
меняй каждый раз случайно выбранную букву в слове.

через определенное количество шагов почти наверняка обойдешь все слова


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
neosapient
Дата 10.11.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Kuvaldis, Ваш текст программы похоже составлен на матлабе.
А можно перевести на С подобный язык.
Просто смутула меня команда write - она что ли выводит на экран?

Цитата

Коды Грея
...
Этот алгоритм позволяет перебирать все наборы Bm так, чтобы каждый следующий набор
отличался от предыдущего только в одном разряде. Построенная с помощью этого
алгоритма последовательность наборов называется кодом Грея. Вообще, n-разрядный код
Грея — это упорядоченная (возможно, циклическая) последовательность, состоящая из
 2n n-разрядных кодовых слов, каждое из которых отличается от соседнего в одном разряде.

Спасибо, хоть буду знать как это называется.

Так, а можно показать код, в котором представлен алгоритм с расширеным (не двоичным) алфавитом.
PM MAIL   Вверх
BUGOR
Дата 11.11.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 1
Всего: 16





--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
neosapient
Дата 11.11.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4




Спасибо, конечно. Однако несовсем то, что искал. Я так понял, что этот метод перебирает слова последовательно,
00
01
10
11

А я хочу, чтоб каждое последующее слово отлечалось от предыдущего на один символ 
00
01
11
10
<-> и следующее слово совпадает с первым
00
01
... и т.д.

-----------------------
Собрал, проект и вижу обыкновенный перебор всех чисел, с основой системы счисления 3 (записаных в обратном порядке, т.е. от большего к меньшему).

Нет, не подходит. Мне надо устроить перебор, чтоб каждое последующее слово отлечалось от предыдущего на один символ 
Уже неделю как голову ломаю, видно надо искать математического гения, чтоб алгоритм составил.

Это сообщение отредактировал(а) neosapient - 11.11.2006, 18:02

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  alpTest.rar 33,96 Kb
PM MAIL   Вверх
BUGOR
Дата 11.11.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 1
Всего: 16



Аа, понял, пардонsmile


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
neosapient
Дата 12.11.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Ну, ни у кого идей не осталось?
PM MAIL   Вверх
esperant0
Дата 12.11.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(neosapient @ 12.11.2006,  17:38)
Ну, ни у кого идей не осталось?

я уже дал вам алгоритм уловлетворяющий вашему критерию


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
neosapient
Дата 12.11.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Кажется дошло,
000
100
110
010
011
111
001
101
001
<-> и к началу
000
100
...

Суть в следующем (смотрите прикрепленный рисунок).
В слове n букв, то есть n векторов базиса, иными словами имеем n мерное пространство.
В данном случае в слове 3 буквы, имеем трехмерную матрицу.
Каждая буква из слова принимает значение одного из символов из алфавита, соответствующего данной позиции буквы в слове (представлено числом клеток-значений в векторе).
В данном случае каждая буква из слова принимает все символы из алфавита (здесь два символа 0 и 1).
У алгоритма такие особенности:
1) смещение на соседнюю неиспользованую ранее клетку, происходит через соединяющую "стенку (пол или потолок)" - т.е. на одну позицию из возможных в данной системе координат.
2) алгоритм должен обойти все клетки
3) последняя клетка соприкосается со стартовой по одной из координат - т.е через соединяющую "стенку (пол или потолок)".
4) если мы упираемся в стенку по одному из векторов, следующий за последним элементом вектора идет первый элемент вектора; связь двунаправленая - работаем над полем (ну над кольцом как минимум).

Входные параметры: 
1) двумерный массив, первый индекс определяет вектор (букву, позицию в слове), второй индекс определяет символ алфавита для данного вектора (значение, которое принимает буква вданной позиции слова).
2) стартовое слово - случайно определено/задано

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

Напишите пожалуйста алгоритм,  лучше если это будет итерация, но рекурсия тоже подойдет.

Это сообщение отредактировал(а) neosapient - 12.11.2006, 19:21

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  pic.JPG 4,67 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.