Алгоритм Маркова - Markov algorithm
В теоретической информатике , алгоритм Маркова является строка перезаписи система , которая использует грамматику -как правила действуют на строки символов. Было показано, что марковские алгоритмы являются полными по Тьюрингу , что означает, что они подходят в качестве общей модели вычислений и могут представлять любое математическое выражение из его простой записи. Марковские алгоритмы названы в честь советского математика Андрея Маркова-младшего.
Рефал - это язык программирования, основанный на марковских алгоритмах.
Описание
Обычные алгоритмы вербальны, то есть предназначены для применения к строкам в разных алфавитах.
Определение любого нормального алгоритма состоит из двух частей: определения алфавита алгоритма (алгоритм будет применен к строкам этих символов алфавита) и определения его схемы . Схема нормального алгоритма - это конечный упорядоченный набор так называемых формул подстановки , каждая из которых может быть простой или окончательной . Формулы простой подстановки представлены строками вида , где и - две произвольные строки в алфавите алгоритма (называемые, соответственно, левой и правой частями подстановки формулы). Точно так же формулы окончательной подстановки представлены строками вида , где и - две произвольные строки в алфавите алгоритма. Это предполагает, что вспомогательные символы и не принадлежат алфавиту алгоритма (в противном случае должны быть выбраны два других символа, которые будут выполнять свою роль разделителей левой и правой сторон, которые не входят в алфавит алгоритма).
Вот пример схемы нормального алгоритма в пятибуквенном алфавите :
Процесс применения нормального алгоритма к произвольной строке в алфавите этого алгоритма представляет собой дискретную последовательность элементарных шагов, состоящую из следующих. Предположим, что это слово, полученное на предыдущем шаге алгоритма (или исходное слово , если текущий шаг является первым). Если в формулах подстановки нет левой части, которая включена в , то алгоритм завершается, и результатом его работы считается строка . В противном случае выбирается первая из формул подстановки, в которой включены левые части . Если формула подстановки имеет вид , то из всех возможных представлений строки формы (где и - произвольные строки) выбирается самое короткое . Затем алгоритм завершается и результат его работы считается . Однако, если эта формула подстановки имеет форму , то из всех возможных представлений строки выбирается форма с самой короткой , после чего строка считается результатом текущего шага, при условии для дальнейшей обработки на следующем этапе.
Например, процесс применения алгоритма описано выше со словом приводит к последовательности слов , , , , , , , , , и , после чего алгоритм останавливается с результатом .
Другие примеры см. Ниже.
Любой нормальный алгоритм эквивалентен некоторой машине Тьюринга , и наоборот - любая машина Тьюринга эквивалентна некоторому нормальному алгоритму. Вариант тезиса Чёрча-Тьюринга, сформулированный по отношению к нормальному алгоритму, называется «принципом нормализации».
Нормальные алгоритмы оказались удобным средством построения многих разделов конструктивной математики . Более того, в определение нормального алгоритма входит ряд идей, используемых в языках программирования, направленных на обработку символьной информации - например, в Refal .
Алгоритм
В Правила представляют собой последовательность пар строк, обычно представленных в виде шаблона → замены . Каждое правило может быть обычным или завершающим.
Учитывая входную строку:
- Проверьте Правила в порядке сверху вниз, чтобы увидеть, можно ли найти какой-либо из шаблонов во входной строке.
- Если ничего не найдено, алгоритм останавливается.
- Если один (или несколько) найден, используйте первый из них, чтобы заменить крайнее левое вхождение совпадающего текста во входной строке его заменой .
- Если только что примененное правило было завершающим, алгоритм останавливается.
- Переходите к шагу 1.
Обратите внимание, что после каждого применения правила поиск начинается заново с первого правила.
Пример
В следующем примере показаны основные операции алгоритма Маркова.
Правила
- «А» -> «яблоко»
- «Б» -> «сумка»
- "S" -> "магазин"
- "T" -> "the"
- "магазин" -> "мой брат"
- "никогда не использовался" -> . "правило прекращения"
Строка символов
"Я купил B of As у T S."
Исполнение
Если алгоритм применяется к приведенному выше примеру, строка символа изменится следующим образом.
- "Я купил B of As у T S."
- «Я купил яблоко в компании Т. С.»
- «Я купил сумку яблок в ТС.»
- «Я купил пакет яблок в магазине Т».
- «Я купила в магазине сумку яблок».
- «Я купил у брата мешок яблок».
Затем алгоритм завершится.
Другой пример
Эти правила дают более интересный пример. Они заменяют двоичные числа своими унарными аналогами. Например, 101 будет переписан в строку из 5 последовательных тактов.
Правила
- "| 0" -> "0 ||"
- «1» -> «0 |»
- "0" -> ""
Строка символов
«101»
Исполнение
Если алгоритм применяется к приведенному выше примеру, он завершится после следующих шагов.
- «101»
- «0 | 01»
- «00 || 1»
- «00 || 0 |»
- «00 | 0 |||»
- «000 |||||»
- «00 |||||»
- «0 |||||»
- "|||||"
Смотрите также
Рекомендации
- Караччоло ди Форино, А. Языки обработки строк и обобщенные марковские алгоритмы. В языках и методах манипулирования символами, DG Bobrow (Ed.), North-Holland Publ. Co., Амстердам, Нидерланды, 1968, стр. 191–206.
- Андрей Андреевич Марков (1903-1979) 1960. Теория алгоритмов. Переводы Американского математического общества, серии 2, 15, 1-14.