Для полного раскрытия я недавно написал статью о понимании формального определения алгоритма Кнутом (до примера). Существенная часть ниже - это просто копия / вставка соответствующего текста из статьи, подробно отвечающей на ваш первый вопрос;
Ваш первый вопрос (Q, I, Ω, f)
Давайте формально определим вычислительный метод как четырехкратный (Q, I,
Ω, f), в которой Q - множество, содержащее подмножества I и Ω, а f - это
функция из Q в себя.
Когда Кнут ссылается на вычислительный метод как на четверку, он просто говорит, что вычислительный метод состоит из четырех четко определенных частей. Эти четыре части он помечает как (Q, I, Ω, f)
. Затем он переходит к краткому описанию каждого компонента этого четверки. I
и Ω
являются наборами (коллекциями вещей), а Q
также является набором, который содержит вещи в наборах I
и Ω
. В этот момент легко ошибочно предположить, что он имеет в виду, что Q
содержит только наборы I
и Ω
и ничего больше. Но позже мы обнаружим, что это не так. Наконец, он описывает f
как функцию от Q
в себя. Это означает, что f
- это процесс, который принимает входные данные, являющиеся элементом из набора Q
, и возвращает или выводит другой элемент из Q
.
Кроме того, f должен оставлять Ω точечно фиксированным; то есть f (q) должен
равно q для всех элементов q из Ω.
По сути это означает, что то, что возвращает наша функция f, будет таким же, как ее аргумент (т.е. значение не изменится), если аргумент является членом или элементом (вещь в) набора Ω
. Это имеет больше смысла, когда Кнут делает разъяснение в своем следующем заявлении; Оповещение о спойлере - Ω
- это набор возможных выходных данных нашего вычислительного метода. Как только мы узнаем это, это станет немного легче понять. Передача вывода обратно в нашу функцию не изменит его.
Четыре величины Q, I, Ω, f предназначены для представления соответственно
состояния вычислений, вход, выход и
вычислительное правило.
Итак, Q
- это набор, который содержит все возможные состояния вычисления, то есть все возможные вариации ввода, вывода и все промежуточные этапы. Набор I
содержит все возможные входы. Набор Ω
содержит все возможные выходы (извините, если я испортил это откровение для вас ранее). И наконец, f
представляет вычислительное правило; то есть процессы применяются к каждому состоянию, чтобы получить следующее состояние, в конце концов (надеюсь), пока мы не получим наш вывод.
Для пояснения, f
представляет одну функцию, выходы которой определены на основе ее возможных входов. В этом конкретном примере он имеет только три возможных выхода и может иметь больше (или меньше) других алгоритмов. Итак, какова цель определения компонентов алгоритма таким образом? Определив их с помощью формальных обозначений, они также могут быть проанализированы и подвергнуты математическому анализу, когда дело доходит до анализа конкретных алгоритмов.
Вопрос о трактовке алгоритма как набора строк
Я ответил другой вопрос на эту тему здесь . Но, по сути, то, что здесь делает Кнут, использует алгоритм Маркова для достижения того, что он уже описал. Стоит изучить (и проработать несколько примеров) марковские алгоритмы, чтобы помочь вам точно понять, что здесь происходит.
Ссылки
- Марковские алгоритмы Wiki
- Статья «Определение алгоритма».
- Кнут искусства компьютерного программирования из 1.1.8