Ответ 1
Согласно Википедии, Марковская цепь - это случайный процесс, в котором следующее состояние зависит от предыдущего состояния. Это немного сложно понять, поэтому я попытаюсь объяснить это лучше:
То, что вы смотрите, похоже, представляет собой программу, которая генерирует текстовую цепочку Маркова. По сути, для этого алгоритм выглядит следующим образом:
- Разделить текст текста на токены (слова, знаки препинания).
- Создайте частотную таблицу. Это структура данных, где для каждого слова в тексте вашего тела у вас есть запись (ключ). Этот ключ сопоставляется с другой структурой данных, которая в основном представляет собой список всех слов, следующих за этим словом (ключ) вместе с его частотой.
- Генерировать цепь Маркова. Для этого вы выбираете начальную точку (ключ из вашей частотной таблицы), а затем вы произвольно выбираете другое состояние для перехода к следующему слову. Следующее слово, которое вы выберете, зависит от его частоты (поэтому некоторые слова более вероятны, чем другие). После этого вы используете это новое слово в качестве ключа и начинаете.
Например, если вы посмотрите на первое предложение этого решения, вы можете найти следующую частотную таблицу:
According: to(100%)
to: Wikipedia(100%)
Wikipedia: ,(100%)
a: Markov(50%), random(50%)
Markov: Chain(100%)
Chain: is(100%)
is: a(33%), dependent(33%), ...(33%)
random: process(100%)
process: with(100%)
.
.
.
better: :(100%)
По существу, переход состояния из одного состояния в другое зависит от вероятности. В случае текстовой Марковской цепи вероятность перехода основана на частоте слов, следующих за выбранным словом. Таким образом, выбранное слово представляет предыдущее состояние, а таблица частот или слова представляют (возможные) последовательные состояния. Вы находите следующее состояние, если знаете предыдущее состояние (это единственный способ получить правильную частотную таблицу), поэтому это соответствует определению, в котором последующее состояние зависит от предыдущего состояния.
Shameless Plug. Я написал программу, чтобы сделать это только в Perl, некоторое время назад. Вы можете прочитать об этом здесь.