<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC</id>
	<title>Нормальный алгоритм - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;action=history"/>
	<updated>2026-07-19T21:34:50Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=52194&amp;oldid=prev</id>
		<title>imported&gt;MBH: отмена правки 145587927 участника 188.65.247.234 (обс.)</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=52194&amp;oldid=prev"/>
		<updated>2026-01-23T10:14:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/mediawiki/index.php?title=%D0%92%D0%9F:%C3%97&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;ВП:× (страница не существует)&quot;&gt;отмена&lt;/a&gt; правки 145587927 участника &lt;a href=&quot;/mediawiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/188.65.247.234&quot; title=&quot;Служебная:Вклад/188.65.247.234&quot;&gt;188.65.247.234&lt;/a&gt; (&lt;a href=&quot;/mediawiki/index.php?title=UT:188.65.247.234&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;UT:188.65.247.234 (страница не существует)&quot;&gt;обс.&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Норма́льный алгори́тм (алгори́фм) Ма́ркова&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;НАМ&amp;#039;&amp;#039;&amp;#039;, также &amp;#039;&amp;#039;&amp;#039;марковский алгоритм&amp;#039;&amp;#039;&amp;#039;) — один из стандартных способов формального определения понятия [[алгоритм]]а (другой известный способ — [[машина Тьюринга]]). Понятие нормального алгоритма введено [[Марков, Андрей Андреевич (младший)|А. А. Марковым (младшим)]] в конце [[1940-е|1940-х]] годов в работах по неразрешимости некоторых проблем теории ассоциативных вычислений. Традиционное написание и произношение слова «алгори&amp;#039;&amp;#039;&amp;#039;ф&amp;#039;&amp;#039;&amp;#039;м» в этом термине также восходит к его автору, многие годы читавшему курс математической логики на [[Механико-математический факультет МГУ|механико-математическом]] факультете [[Московский государственный университет|МГУ]].&lt;br /&gt;
&lt;br /&gt;
Нормальный алгоритм описывает метод переписывания строк, похожий по способу задания на [[Формальная грамматика|формальные грамматики]]. НАМ — [[Полнота по Тьюрингу|полный по Тьюрингу]] язык, что делает его по выразительной силе эквивалентным [[машина Тьюринга|машине Тьюринга]] и, следовательно, современным языкам программирования. На основе НАМ был создан [[Функциональное программирование|функциональный]] [[язык программирования]] [[Рефал]].&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Нормальные алгоритмы вербальны, то есть предназначены для применения к словам в различных алфавитах.&lt;br /&gt;
&lt;br /&gt;
Определение всякого нормального алгоритма состоит из двух частей: определения &amp;#039;&amp;#039;алфавита&amp;#039;&amp;#039; алгоритма (к словам, из символов которого алгоритм будет применяться) и определения его &amp;#039;&amp;#039;схемы&amp;#039;&amp;#039;. Схемой нормального алгоритма называется конечный упорядоченный набор так называемых &amp;#039;&amp;#039;формул подстановки&amp;#039;&amp;#039;, каждая из которых может быть &amp;#039;&amp;#039;простой&amp;#039;&amp;#039; или &amp;#039;&amp;#039;заключительной&amp;#039;&amp;#039;. Простыми формулами подстановки называются слова вида &amp;lt;math&amp;gt;L\to D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — два произвольных слова в алфавите алгоритма (называемые, соответственно, левой и правой частями формулы подстановки). Аналогично, заключительными формулами подстановки называются слова вида &amp;lt;math&amp;gt;L\to\cdot D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — два произвольных слова в алфавите алгоритма. При этом предполагается, что вспомогательные буквы &amp;lt;math&amp;gt;\to&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\to\cdot&amp;lt;/math&amp;gt; не принадлежат алфавиту алгоритма (в противном случае на исполняемую ими роль разделителя левой и правой частей следует избрать другие две буквы).&lt;br /&gt;
&lt;br /&gt;
Примером схемы нормального алгоритма в пятибуквенном алфавите &amp;lt;math&amp;gt;|*abc&amp;lt;/math&amp;gt; может служить схема&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\left\{\begin{matrix} |b&amp;amp;\to&amp;amp; ba|\\ ab&amp;amp;\to&amp;amp; ba\\ b&amp;amp;\to&amp;amp;\\ {*}|&amp;amp;\to&amp;amp; b*&amp;amp; \\ {*}&amp;amp;\to&amp;amp; c&amp;amp; \\&lt;br /&gt;
|c&amp;amp;\to&amp;amp; c\\ ac&amp;amp;\to&amp;amp; c|\\ c&amp;amp;\to\cdot\end{matrix}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Процесс применения нормального алгоритма к произвольному слову &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в алфавите этого алгоритма представляет собой дискретную последовательность элементарных шагов, состоящих в следующем. Пусть &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt; — слово, полученное на предыдущем шаге работы алгоритма (или исходное слово &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;, если текущий шаг — первый). Если среди формул подстановки нет такой, левая часть которой входила бы в &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt;, то работа алгоритма считается завершённой, и результатом этой работы считается слово &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt;. Иначе среди формул подстановки, левая часть которых входит в &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt;, выбирается самая первая. Если эта формула подстановки имеет вид &amp;lt;math&amp;gt;L\to\cdot D&amp;lt;/math&amp;gt;, то из всех возможных представлений слова &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt; в виде &amp;lt;math&amp;gt;RLS&amp;lt;/math&amp;gt; выбирается такое, при котором &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; — самое короткое, после чего работа алгоритма считается завершённой с результатом &amp;lt;math&amp;gt;RDS&amp;lt;/math&amp;gt;. Если же эта формула подстановки имеет вид &amp;lt;math&amp;gt;L\to D&amp;lt;/math&amp;gt;, то из всех возможных представлений слова &amp;lt;math&amp;gt;V&amp;#039;&amp;lt;/math&amp;gt; в виде &amp;lt;math&amp;gt;RLS&amp;lt;/math&amp;gt; выбирается такое, при котором &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; — самое короткое, после чего слово &amp;lt;math&amp;gt;RDS&amp;lt;/math&amp;gt; считается результатом текущего шага, подлежащим дальнейшей переработке на следующем шаге.&lt;br /&gt;
&lt;br /&gt;
Например, в ходе процесса применения алгоритма с указанной выше схемой к слову &amp;lt;math&amp;gt;|*||&amp;lt;/math&amp;gt; последовательно возникают слова &amp;lt;math&amp;gt;|b*|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ba|*|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a|*|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a|b*&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;aba|*&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;baa|*&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;aa|*&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;aa|c&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;aac&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ac|&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;c||&amp;lt;/math&amp;gt;, после чего алгоритм завершает работу с результатом &amp;lt;math&amp;gt;||&amp;lt;/math&amp;gt;. Другие примеры смотрите ниже.&lt;br /&gt;
&lt;br /&gt;
Любой нормальный алгоритм эквивалентен некоторой [[Машина Тьюринга|машине Тьюринга]], и наоборот — любая машина Тьюринга эквивалентна некоторому нормальному алгоритму. Вариант [[Тезис Чёрча — Тьюринга|тезиса Чёрча — Тьюринга]], сформулированный применительно к нормальным алгоритмам, принято называть «принципом нормализации».&lt;br /&gt;
&lt;br /&gt;
Нормальные алгоритмы оказались удобным средством для построения многих разделов [[Конструктивная математика|конструктивной математики]]. Кроме того, заложенные в определении нормального алгоритма идеи используются в ряде ориентированных на обработку символьной информации языков программирования — например, в языке [[РЕФАЛ|Рефал]].&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
Использование алгоритма Маркова для преобразований над строками.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Алфавит:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: { а…я, А…Я, «пробел», «точка» }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Правила:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# А → апельсин&lt;br /&gt;
# кг → килограмм&lt;br /&gt;
# М → магазинчике&lt;br /&gt;
# Т → том&lt;br /&gt;
# магазинчике →. ларьке &amp;#039;&amp;#039;(заключительная формула)&amp;#039;&amp;#039;&lt;br /&gt;
# в том ларьке → на том рынке&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Исходная строка:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Я купил кг Аов в Т М.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;При выполнении алгоритма строка претерпевает следующие изменения:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# Я купил кг апельсинов в Т М.&lt;br /&gt;
# Я купил килограмм апельсинов в Т М.&lt;br /&gt;
# Я купил килограмм апельсинов в Т магазинчике.&lt;br /&gt;
# Я купил килограмм апельсинов в том магазинчике.&lt;br /&gt;
# Я купил килограмм апельсинов в том ларьке.&lt;br /&gt;
&lt;br /&gt;
На этом выполнение алгоритма завершится (так как будет достигнута формула № 5, которую мы сделали заключительной).&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
Данный алгоритм преобразует [[Двоичная система счисления|двоичные числа]] в «[[Унарная система счисления|единичные]]» (в которых записью целого неотрицательного числа N является строка из N палочек). Например, двоичное число 101 преобразуется в 5 палочек: |||||.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Алфавит:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: { 0, 1, | }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Правила:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# 1 → 0|&lt;br /&gt;
# |0 → 0||&lt;br /&gt;
# 0 → &amp;quot;&amp;quot; (пустая строка)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Исходная строка:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: 101&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Выполнение:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# 0|01&lt;br /&gt;
# 0|00|&lt;br /&gt;
# 00||0|&lt;br /&gt;
# 00|0|||&lt;br /&gt;
# 000|||||&lt;br /&gt;
# 00|||||&lt;br /&gt;
# 0|||||&lt;br /&gt;
# |||||&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [https://yad-studio.github.io/ Yad Studio — IDE и интерпретатор для Нормальных Алгоритмов Маркова (Open Source)]&lt;br /&gt;
* [http://matinf.vsgao.com/simulator/na.html Javascript-эмулятор нормальных алгорифмов Маркова (работает on-line)]&lt;br /&gt;
{{вс}}&lt;br /&gt;
&lt;br /&gt;
{{плохое оформление|дата=2021-06-29}}&lt;br /&gt;
{{переработать|дата=2011-08-05}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы]]&lt;br /&gt;
[[Категория:Модели вычислений]]&lt;/div&gt;</summary>
		<author><name>imported&gt;MBH</name></author>
	</entry>
</feed>