Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Алгоритмы
Перезагрузить страницу Алгоритм преобразования одних текстов в другие тексты
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
AndreyNikIos AndreyNikIos вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.11.2015
По умолчанию Алгоритм преобразования одних текстов в другие тексты - 22.11.2015, 11:57

Для демонстрационных целей ограничимся преобразованием слова "Ад" в слово "Агат".
ПЕРВЫЙ ШАГ - вычисление собственного алфавита слова "Ад". Собственный алфавит - это различные символы, которые встречаются в слове "Ад". Таких символов 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 года.
Уважаемые коллеги, прошу высказаться и задавать интересующие Вас вопросы.
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 23.11.2015, 17:29

Не совсем понятна область применения приведённого алгоритма
Ответить с цитированием
  (#3 (permalink)) Старый
gromozeka gromozeka вне форума
Флудер
 
Аватар для gromozeka
 
Сообщений: 3,170
Сказал(а) спасибо: 6
Поблагодарили 16 раз(а) в 15 сообщениях
Регистрация: 28.02.2005
Адрес: Израиль
По умолчанию 28.12.2015, 17:03

ой.
что это и зачем оно?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кластеризация текстов Иванычи Delphi 0 21.05.2012 17:59
Комп перезагружается в одних и тех же местах adreal Любые вопросы от новичков 13 08.12.2011 23:23
Конвертор для русских текстов KOI-8, CP1251, DOS glyc Задания за деньги 0 07.06.2010 16:30
Интерактивный генератор текстов 095 Delphi 2 15.03.2010 11:01
Использование одних файлов в разных проектах Odin_KG Visual C++ 7 20.06.2007 16:27
Размещаю свои тексты Dian Зацените! 5 23.12.2005 06:14
Алгоритм сравнения двух текстов :shock: rutman Visual Basic 0 28.10.2004 14:41
Построить графики функций в одних координатах lg x ,ln x Миледи Pascal 14 04.12.2003 18:14
Алгоритм преобразования даты в дни Anonymous Visual C++ 1 09.11.2003 15:21
Как удалить все повторяющиеся тексты в строке ZX Вопросы начинающих программистов 1 03.11.2003 15:01
Нужен алгоритм для преобразования графического изображения размытие Гаусса Anonymous C++ Builder 1 20.08.2003 04:49
Синтаксический анализ англоязычных текстов Anonymous Информационные технологии 1 03.04.2003 13:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов