Преобразования одних текстов в другие тексты

Описание: Все и сразу: Языки программирования, Базы данных, Web технологии, Алгоритмы и прочее.
Правила раздела: http://pc-forums.ru/topic1981.html
Модератор: Junior

#1 AndreyNikIos » 22.11.2015, 10:18

Для демонстрационных целей ограничимся преобразованием слова "Ад" в слово "Агат".
Нажмите, чтобы показать/скрыть...
ПЕРВЫЙ ШАГ - вычисление собственного алфавита слова "Ад". Собственный алфавит - это различные символы, которые встречаются в слове "Ад". Таких символов 2 - буква "А" и буква "д". В собственный алфавит надо включать все встречающиеся в тексте символы: прописные и строчные буквы, пробел, знаки препинания, любые другие специальные символы. Можно включать рисунки, мультимедиа и т.п. Символы в собственном алфавите должны встречаться только один раз.
ВТОРОЙ ШАГ - вычисление собственного алфавита слова "Агат". Таких символов 4 - буква "А", буква "г", буква "а", буква "т".
ТРЕТИЙ ШАГ - вычисление собственного алфавита обоих слов. Таких символов 5 - буква "А", буква "д", буква "г", буква "а", буква "т".
ЧЕТВЕРТЫЙ ШАГ - запишем собственный алфавит обоих слов в одну строчку и перенумеруем символы алфавита числами 1, 2, ..., N. Номера букв - это адреса этих букв в алфавите.
А-1 д-2 г-3 а-4 т-5
Длина алфавита N = 5
ПЯТЫЙ ШАГ - вычисление вектора приращения, позволяющего преобразовать слово "Ад" в слово "Агат". Вектор приращения обозначим через V().
1) Берем первую букву слова "Ад" - это буква "А". Находим адрес этой буквы в общем алфавите. Это число 1. Берем первую букву слова "Агат" - это буква "А". Находим адрес этой буквы в общем алфавите. Это число 1. Находим разность адресов (из второго адреса вычитаем первый адрес) 1 - 1 = 0. Эта разность меньше 1, поэтому прибавляем к разности N = 5. Получим 0 + 5 = 5. Записываем это число на первое место в вектор приращения V(1) = 5.
2) Берем вторую букву слова "Ад" - это буква "д". Находим адрес этой буквы в общем алфавите. Это число 2. Берем вторую букву слова "Агат" - это буква "г". Находим адрес этой буквы в общем алфавите. Это число 3. Находим разность адресов 3 - 2 = 1. Это число больше 0 и меньше 6, поэтому записываем это число на второе место в вектор приращения V(2) = 1.
3) Поскольку первое слово закончилось, то начинаем использовать это слово сначала. Берем первую букву слова "Ад" - это буква "А". Находим адрес этой буквы в общем алфавите. Это число 1. Берем третью букву слова "Агат" - это буква "а". Находим адрес этой буквы в общем алфавите. Это число 4. Находим разность адресов 4 - 1 = 3. Это число больше 0 и меньше 6, поэтому записываем это число на третье место в вектор приращения V(3) = 3.
4) Берем вторую букву слова "Ад" - это буква "д". Находим адрес этой буквы в общем алфавите. Это число 2. Берем четвертую букву слова "Агат" - это буква "т". Находим адрес этой буквы в общем алфавите. Это число 5. Находим разность адресов 5 - 2 = 3. Это число больше 0 и меньше 6, поэтому записываем это число на четвертое место в вектор приращения V(4) = 3.
Вектор приращений содержит 4 числа V()={5,1,3,3}
ШЕСТОЙ ШАГ - преобразование слова "Ад" в слово "Агат".
1) Берем первую букву из слова "Ад" - это буква "А". Находим адрес этой буквы в общем алфавите. Это число 1. Прибавляем к этому адресу первое число из вектора приращения - это число 5. 1 + 5 = 6. Поскольку 6 > N = 5, то вычитаем число N. 6 - 5 = 1. Это адрес первой буквы второго слова в общем алфавите. По этому адресу находится буква "А" - это первая буква второго слова.
2) Берем вторую букву из слова "Ад" - это буква "д". Находим адрес этой буквы в общем алфавите. Это число 2. Прибавляем к этому адресу второе число из вектора приращения - это число 1. 2 + 1 = 3. Поскольку 3 больше 0 и меньше 6, то ничего больше не делаем. Это адрес второй буквы второго слова в общем алфавите. По этому адресу находится буква "г" - это вторая буква второго слова.
3) Поскольку первое закончилось, то начинаем использовать это слово сначала. Берем первую букву из слова "Ад" - это буква "А". Находим адрес этой буквы в общем алфавите. Это число 1. Прибавляем к этому адресу третье число из вектора приращения - это число 3. 1 + 3 = 4. Поскольку 4 больше 0 и меньше 6, то ничего больше не делаем. Это адрес третьей буквы второго слова в общем алфавите. По этому адресу находится буква "а" - это третья буква второго слова.
4) Берем вторую букву из слова "Ад" - это буква "д". Находим адрес этой буквы в общем алфавите. Это число 2. Прибавляем к этому адресу четвертое число из вектора приращения - это число 3. 2 + 3 = 5. Поскольку 5 больше 0 и меньше 6, то ничего больше не делаем. Это адрес четвертой буквы второго слова в общем алфавите. По этому адресу находится буква "т" - это четвертая буква второго слова.
Мы вычислили второе слово "Агат" из первого слова "Ад". Это действие мы называем преобразованием текста "Ад" в текст "Агат".
Обратите внимание: адреса в алфавите должны начинаться с 1. Если адрес в алфавите начинается с 0, то алгоритм не работает. Это связано с тем, что прибавление 0 не изменяет адрес.
Преобразование текстов не является шифрованием текста, так как целью шифрования является сокрытие смысла текста. А у нас целью преобразования является установление связи между текстами.
Преобразование текста можно производить самого в себя, в том числе можно получить весь текст из любой буквы текста. Это является изоморфизмом процесса выращивания организма из одной клетки. Конечно, в живой природе все намного сложнее, но общая схема, скорее всего, неизменна.
ОБРАТНОЕ ПРЕОБРАЗОВАНИЕ текстов всегда существует.
Если имеется вычисленный ранее вектор приращений для преобразования первого текста во второй, то этот же вектор приращений используется для обратного преобразования второго текста в первый с использованием того же самого алфавита.
Прямое преобразование слова "Ад" в слово "Агат" мы произвели с помощью вектора приращений V()={5,1,3,3} и алфавита А-1 д-2 г-3 а-4 т-5
Произведем обратное преобразование слова "Агат" в слово "Ад"
1) Берем первую букву из слова "Агат" - это буква "А". Находим адрес этой буквы в алфавите - это число 1. Вычитаем из этого числа первое число вектора приращений 1 - 5 = -4 < 1. Поэтому прибавляем длину алфавита -4 + 5 = 1. Это адрес первой буквы слова "Ад" в алфавите, то есть буква "А".
2) Берем вторую букву из слова "Агат" - это буква "г". Находим адрес этой буквы в алфавите - это число 3. Вычитаем из этого числа второе число вектора приращений 3 - 1 = 2. Поскольку 0 < 2 < 6, то ничего больше не делаем. Это адрес второй буквы слова "Ад" в алфавите, то есть буква "д".
На этом преобразование можно закончить, так как слово "Ад" получено из слова "Агат". Но можно и продолжить преобразование.
3) Берем третью букву из слова "Агат" - это буква "а". Находим адрес этой буквы в алфавите - это число 4. Вычитаем из этого числа третье число вектора приращений 4 - 3 = 1. Поскольку 0 < 1 < 6, то ничего больше не делаем. Это адрес первой буквы слова "Ад" в алфавите, то есть буква "А".
4) Берем четвертую букву из слова "Агат" - это буква "т". Находим адрес этой буквы в алфавите - это число 5. Вычитаем из этого числа четвертое число вектора приращений 5 - 3 = 2. Поскольку 0 < 2 < 6, то ничего больше не делаем. Это адрес второй буквы слова "Ад" в алфавите, то есть буква "д".
Таким абразом, результатом обратного преобразования слова "Агат" является слово "АдАд". Если бы мы остановились на втором шаге, то результатом преобразования было бы слово "Ад".
ВЫВОДЫ:
1) Прямое и обратное преобразования текстов всегда существуют независимо от размеров и содержания текстов.
2) Вся информация о преобразовании хранится в векторе приращения, алфавите и одном из текстов.
3) Если во время преобразования первого текста во второй текст мы прибавляем к адресам числа вектора приращения, то для обратного преобразования второго текста в первый текст мы должны вычитать из адресов числа вектора приращения. Если во время преобразования первого текста во второй текст мы вычитаем адресов числа вектора приращения, то для обратного преобразования второго текста в первый текст мы должны прибавлять к адресам числа вектора приращения.
УКАЗАННЫЙ АЛГОРИТМ опубликован в открытой печати в начале 2014 года.
Уважаемые коллеги, прошу высказаться и задавать интересующие Вас вопросы.
Последний раз редактировалось Junior 22.11.2015, 10:55, всего редактировалось 1 раз.
Причина: Убрал простыню под спойлер
AndreyNikIos
Автор темы, Прохожий
Прохожий
Репутация: 0
Лояльность: 0 (+0/−0)
Сообщения: 1
Темы: 1
Зарегистрирован: 22.11.2015
С нами: 1 год 9 месяцев

#2 Biotormoz » 22.11.2015, 14:40

А для чего эта "Энигма " нужна ? В чем ее целесообразность ?
Biotormoz
Любитель компьютеров
Любитель компьютеров
Аватара
Откуда: Оттуда
Репутация: -2
Лояльность: 13 (+14/−1)
Сообщения: 252
Темы: 12
Зарегистрирован: 22.02.2014
С нами: 3 года 6 месяцев


  • Понравилась тема? Поделись с друзьями!

Вернуться в Программирование