<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.118.78.38&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=217.118.78.38&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%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/217.118.78.38"/>
		<updated>2026-06-11T14:09:01Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42164</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42164"/>
				<updated>2014-12-14T10:18:45Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt;A = \mathrm {RE} &amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return &amp;lt;tex&amp;gt;L(p_X) \in \mathrm{RE}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' &amp;lt;tex&amp;gt;U(i, x)&amp;lt;/tex&amp;gt; == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42163</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42163"/>
				<updated>2014-12-14T10:03:39Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Свойства языков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt;A = \mathrm {RE} &amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return &amp;lt;tex&amp;gt;L(p_X) \in \mathrm{RE}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' &amp;lt;tex&amp;gt;U(i, x)&amp;lt;/tex&amp;gt; == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42162</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42162"/>
				<updated>2014-12-14T10:02:07Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Свойства языков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return &amp;lt;tex&amp;gt;L(p_X) \in A&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;p(A)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' &amp;lt;tex&amp;gt;U(i, x)&amp;lt;/tex&amp;gt; == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42160</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42160"/>
				<updated>2014-12-14T09:59:06Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Свойства языков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return &amp;lt;tex&amp;gt;L(p_X) \in A&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;p(A)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' &amp;lt;tex&amp;gt;U(i, x)&amp;lt;/tex&amp;gt; == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42159</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42159"/>
				<updated>2014-12-14T09:54:46Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' &amp;lt;tex&amp;gt;U(i, x)&amp;lt;/tex&amp;gt; == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42158</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42158"/>
				<updated>2014-12-14T09:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42157</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42157"/>
				<updated>2014-12-14T09:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  &amp;lt;font color=green&amp;gt; // если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42156</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42156"/>
				<updated>2014-12-14T09:48:58Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  //если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42155</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42155"/>
				<updated>2014-12-14T09:06:19Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A \neq \mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  //если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42154</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42154"/>
				<updated>2014-12-14T09:03:55Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  //если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42153</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42153"/>
				<updated>2014-12-14T09:03:07Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  //если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое (при построении функции  &amp;lt;tex&amp;gt;L(g_{i,x}))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42152</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=42152"/>
				<updated>2014-12-14T08:58:36Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Теорема Успенского-Райса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
* Язык должен содержать слово ''hello''.&lt;br /&gt;
* Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Псевдокод для  &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
 p_A(p_X)&lt;br /&gt;
   '''return L(p_X) \in A&lt;br /&gt;
&lt;br /&gt;
Псевдокод для &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
 p(A)&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Пример.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} разрешитель некоторого языка &lt;br /&gt;
 p(&amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства не является разрешимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Приведём доказательство от противного.&lt;br /&gt;
 &lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо и нетривиально, &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} программа, разрешающая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не умаляя общности, можно считать, что &amp;lt;tex&amp;gt;\varnothing \notin A&amp;lt;/tex&amp;gt; (в противном случае перейдём к &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt;, которое также будет разрешимым и нетривиальным, так как &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; \mathrm {RE} \setminus A&amp;lt;/tex&amp;gt; != &amp;lt;tex&amp;gt;\mathrm {RE} ) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; непусто, то найдётся перечислимый язык &amp;lt;tex&amp;gt;X \in A&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим вспомогательную программу:&lt;br /&gt;
&amp;lt;tex&amp;gt; U(i, x) &amp;lt;/tex&amp;gt; {{---}} универсальная функция&lt;br /&gt;
 &amp;lt;tex&amp;gt;g_{i,x}(y):&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''if''' U(i, x) == 1  //если i (где i - это программа),  на входе x выдает 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_X(y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''else'''&lt;br /&gt;
     '''while''' ''true''&lt;br /&gt;
Исключение пустого множества нам нужно чтобы различать &amp;lt;tex&amp;gt; X&amp;lt;/tex&amp;gt; и пустое (при построении функции  &amp;lt;tex&amp;gt;L(g_{i,x}))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Значит, можно рассмотреть такую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;US(\langle i, x \rangle )&amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_A ( g_{i,x} ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
L(g_{i,x}) = \begin{cases}&lt;br /&gt;
  X, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  \varnothing, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно, &amp;lt;br/&amp;gt; &amp;lt;tex&amp;gt; &lt;br /&gt;
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}&lt;br /&gt;
  p_A(p_X), &amp;amp;  U(i, x) = 1; \\&lt;br /&gt;
  p_A(p_\varnothing ), &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases} = \begin{cases}&lt;br /&gt;
  1, &amp;amp; U(i, x) = 1; \\&lt;br /&gt;
  0, &amp;amp; U(i, x) \neq 1; \\&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&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;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. &amp;quot;Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41476</id>
		<title>Детерминированные конечные автоматы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41476"/>
				<updated>2014-11-29T09:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Детерминированный конечный автомат (ДКА)''' (англ. ''deterministic finite automaton (DFA)'') — набор из пяти элементов &amp;lt;tex&amp;gt;\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; — алфавит (англ. ''alphabet''), &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; — множество состояний (англ. ''finite set of states''), &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — начальное (стартовое) состояние (англ. ''start state''), &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; — множество допускающих состояний (англ. ''set of accept states''), &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt; — функция переходов (англ. ''transition function'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Процесс допуска ==&lt;br /&gt;
Изначально автомат находится в стартовом состоянии &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. Автомат считывает символы по очереди. При считывании очередного символа &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; автомат переходит в состояние &amp;lt;tex&amp;gt;\delta(q, p_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=допускает&lt;br /&gt;
|definition=&lt;br /&gt;
Будем говорить, что автомат '''допускает''' слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».&lt;br /&gt;
&lt;br /&gt;
== Способы представления ==&lt;br /&gt;
* Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.&lt;br /&gt;
* Таблица переходов &amp;lt;tex&amp;gt;T (|Q| \times |\Sigma|)&amp;lt;/tex&amp;gt;, дающая табличное представление функции &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; width=60%&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|Автомат, принимающий непустые строки из чередующихся символов ''a'' и ''b'',&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;а) без «дьявольской вершины», &amp;lt;br/&amp;gt;б) с «дьявольской вершиной» (отмечена серым цветом).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\bigcirc&amp;lt;/tex&amp;gt; — нетерминальное состояние,&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;\circledcirc&amp;lt;/tex&amp;gt; — терминальное состояние.&lt;br /&gt;
&amp;lt;br/&amp;gt;Стрелка &amp;lt;tex&amp;gt;\downarrow&amp;lt;/tex&amp;gt; указывает на начальное состояние.&amp;lt;/small&amp;gt;&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|а)[[Файл:Finite state machine 1.png|150 px]]&lt;br /&gt;
б)[[Файл:Finite state machine 2.png|200 px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Автомат для поиска образца в тексте]] для строки ''abbab''.&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Файл:Automata_Search.png|340px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Автоматные языки ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Мгновенное описание''' ('''конфигурация''') (англ. ''instant configuration'') {{---}} пара &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} текущее состояние, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} оставшиеся символы.&lt;br /&gt;
}}&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за один шаг &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta (q, c)=p &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за конечное число шагов &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\exists n:&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c_1 c_2 ... c_n\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\langle q, c_1 c_2 c_3 ... c_n\beta \rangle \vdash \langle u_1, c_2 c_3 ... c_n\beta \rangle \vdash \langle u_2, c_3 ... c_n\beta \rangle \vdash ... \vdash \langle u_{n-1}, c_n\beta \rangle \vdash \langle p, \beta \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle, \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle \Rightarrow \langle q, \alpha\beta \rangle \vdash^* \langle r, \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество &amp;lt;tex&amp;gt;L(\mathcal{A})=\{\alpha \mid \exists t \in T : \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle\}&amp;lt;/tex&amp;gt; называется '''языком автомата''' (англ. ''automata's language'') &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Иначе говоря, языком автомата является множество всех допускаемых им слов. Произвольный язык является автоматным, если существует ДКА, допускающий те и только те слова, которые принадлежат языку.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество языков всех ДКА образует множество '''автоматных языков''' &amp;lt;tex&amp;gt;\mathrm{AUT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Изоморфизм двух автоматов ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Автоматы называются изоморфными, если существует [[wikipedia:Биекция | биекция]] между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, начальные {{---}} начальным&lt;br /&gt;
}}&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition= &lt;br /&gt;
Задано два детерминированных конечных автомата. Определить, изоморфны ли они друг другу.&lt;br /&gt;
Гарантируется, что все состояния автоматов достижимы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Будем проверять множества переходов для двух вершин. Запустим [[Обход в глубину, цвета вершин | обход в глубину]] из стартовых вершин, если множество переходов по ребрам для двух вершин совпадают и также это выполнено для вершин соответствующим концам ребер (если у нас соответствующие вершины дьявольские, то множество переходов считаем равными) то два автомата изоморфны. Заметим, что если мы рассмотрим два автомата состоящих из пройденных вершин, то эти два автомата будут изоморфны (из этого следует, что на когда мы обойдем все вершины, это тоже будет выполнено). Этот алгоритм пройдет по всем вершинам и ребрам ровно один раз, из этого следует время работы &amp;lt;tex&amp;gt;O(N + M) &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; N&amp;lt;/tex&amp;gt; {{---}} суммарное число вершин в автоматах, &amp;lt;tex&amp;gt; M&amp;lt;/tex&amp;gt; {{---}} суммарное число ребер.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
&amp;lt;tex&amp;gt;Transitions&amp;lt;/tex&amp;gt; {{---}} множество пар (&amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Vertex&amp;lt;/tex&amp;gt;), где &amp;lt;tex&amp;gt; a \in \Sigma&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Vertex \in Q&amp;lt;/tex&amp;gt; &lt;br /&gt;
 '''boolean''' dfs(Vertex u, Vertex v) &lt;br /&gt;
    '''for''' (Transition e : u.transitions) &lt;br /&gt;
      '''if''' ('''not''' v.transitions.contains(e)) &lt;br /&gt;
        '''return''' ''false''     &lt;br /&gt;
    &lt;br /&gt;
    '''if''' (v.transitions.size '''!=''' u.transitions.size) &lt;br /&gt;
      '''return''' ''false''&lt;br /&gt;
        &lt;br /&gt;
    '''boolean''' result = ''true''&lt;br /&gt;
    '''for''' (Transition t : u.transitions) &lt;br /&gt;
      '''char''' symbol = t.getSymbol()&lt;br /&gt;
      Vertex t1 = u.transitions.getVertex(symbol)&lt;br /&gt;
      Vertex t2 = v.transitions.getVertex(symbol)&lt;br /&gt;
      result =  result '''and''' dfs(t1, t2)&lt;br /&gt;
    &lt;br /&gt;
    '''return''' result&lt;br /&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4&lt;br /&gt;
* ''Lawson, Mark V. (2004). Finite automata''. Chapman and Hall/CRC. ISBN 1-58488-255-7.&lt;br /&gt;
* [[wikipedia:Deterministic finite automaton | Wikipedia {{---}} Deterministic finite automaton]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41475</id>
		<title>Детерминированные конечные автоматы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41475"/>
				<updated>2014-11-29T09:43:31Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Детерминированный конечный автомат (ДКА)''' (англ. ''deterministic finite automaton (DFA)'') — набор из пяти элементов &amp;lt;tex&amp;gt;\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; — алфавит (англ. ''alphabet''), &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; — множество состояний (англ. ''finite set of states''), &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — начальное (стартовое) состояние (англ. ''start state''), &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; — множество допускающих состояний (англ. ''set of accept states''), &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt; — функция переходов (англ. ''transition function'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Процесс допуска ==&lt;br /&gt;
Изначально автомат находится в стартовом состоянии &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. Автомат считывает символы по очереди. При считывании очередного символа &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; автомат переходит в состояние &amp;lt;tex&amp;gt;\delta(q, p_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=допускает&lt;br /&gt;
|definition=&lt;br /&gt;
Будем говорить, что автомат '''допускает''' слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».&lt;br /&gt;
&lt;br /&gt;
== Способы представления ==&lt;br /&gt;
* Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.&lt;br /&gt;
* Таблица переходов &amp;lt;tex&amp;gt;T (|Q| \times |\Sigma|)&amp;lt;/tex&amp;gt;, дающая табличное представление функции &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; width=60%&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|Автомат, принимающий непустые строки из чередующихся символов ''a'' и ''b'',&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;а) без «дьявольской вершины», &amp;lt;br/&amp;gt;б) с «дьявольской вершиной» (отмечена серым цветом).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\bigcirc&amp;lt;/tex&amp;gt; — нетерминальное состояние,&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;\circledcirc&amp;lt;/tex&amp;gt; — терминальное состояние.&lt;br /&gt;
&amp;lt;br/&amp;gt;Стрелка &amp;lt;tex&amp;gt;\downarrow&amp;lt;/tex&amp;gt; указывает на начальное состояние.&amp;lt;/small&amp;gt;&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|а)[[Файл:Finite state machine 1.png|150 px]]&lt;br /&gt;
б)[[Файл:Finite state machine 2.png|200 px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Автомат для поиска образца в тексте]] для строки ''abbab''.&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Файл:Automata_Search.png|340px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Автоматные языки ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Мгновенное описание''' ('''конфигурация''') (англ. ''instant configuration'') {{---}} пара &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} текущее состояние, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} оставшиеся символы.&lt;br /&gt;
}}&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за один шаг &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta (q, c)=p &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за конечное число шагов &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\exists n:&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c_1 c_2 ... c_n\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\langle q, c_1 c_2 c_3 ... c_n\beta \rangle \vdash \langle u_1, c_2 c_3 ... c_n\beta \rangle \vdash \langle u_2, c_3 ... c_n\beta \rangle \vdash ... \vdash \langle u_{n-1}, c_n\beta \rangle \vdash \langle p, \beta \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle, \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle \Rightarrow \langle q, \alpha\beta \rangle \vdash^* \langle r, \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество &amp;lt;tex&amp;gt;L(\mathcal{A})=\{\alpha \mid \exists t \in T : \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle\}&amp;lt;/tex&amp;gt; называется '''языком автомата''' (англ. ''automata's language'') &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Иначе говоря, языком автомата является множество всех допускаемых им слов. Произвольный язык является автоматным, если существует ДКА, допускающий те и только те слова, которые принадлежат языку.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество языков всех ДКА образует множество '''автоматных языков''' &amp;lt;tex&amp;gt;\mathrm{AUT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Изоморфизм двух автоматов ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Автоматы называются изоморфными, если существует [[wikipedia:Биекция | биекция]] между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, начальные {{---}} начальным&lt;br /&gt;
}}&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition= &lt;br /&gt;
Задано два детерминированных конечных автомата. Определить, изоморфны ли они друг другу.&lt;br /&gt;
Гарантируется, что все состояния автоматов достижимы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Будем проверять множества переходов для двух вершин. Запустим [[Обход в глубину, цвета вершин | обход в глубину]] из стартовых вершин, если множество переходов по ребрам для двух вершин совпадают и также это выполнено для вершин соответствующим концам ребер (если у нас соответствующие вершины дьявольские, то множество переходов считаем равными) то два автомата изоморфны. Этот алгоритм пройдет по всем вершинам и ребрам ровно один раз, из этого следует время работы &amp;lt;tex&amp;gt;O(N + M) &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; N&amp;lt;/tex&amp;gt; {{---}} суммарное число вершин в автоматах, &amp;lt;tex&amp;gt; M&amp;lt;/tex&amp;gt; {{---}} суммарное число ребер.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
&amp;lt;tex&amp;gt;Transitions&amp;lt;/tex&amp;gt; {{---}} множество пар (&amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Vertex&amp;lt;/tex&amp;gt;), где &amp;lt;tex&amp;gt; a \in \Sigma&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Vertex \in Q&amp;lt;/tex&amp;gt; &lt;br /&gt;
 '''boolean''' dfs(Vertex u, Vertex v) &lt;br /&gt;
    '''for''' (Transition e : u.transitions) &lt;br /&gt;
      '''if''' ('''not''' v.transitions.contains(e)) &lt;br /&gt;
        '''return''' ''false''     &lt;br /&gt;
    &lt;br /&gt;
    '''if''' (v.transitions.size '''!=''' u.transitions.size) &lt;br /&gt;
      '''return''' ''false''&lt;br /&gt;
        &lt;br /&gt;
    '''boolean''' result = ''true''&lt;br /&gt;
    '''for''' (Transition t : u.transitions) &lt;br /&gt;
      '''char''' symbol = t.getSymbol()&lt;br /&gt;
      Vertex t1 = u.transitions.getVertex(symbol)&lt;br /&gt;
      Vertex t2 = v.transitions.getVertex(symbol)&lt;br /&gt;
      result =  result '''and''' dfs(t1, t2)&lt;br /&gt;
    &lt;br /&gt;
    '''return''' result&lt;br /&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4&lt;br /&gt;
* ''Lawson, Mark V. (2004). Finite automata''. Chapman and Hall/CRC. ISBN 1-58488-255-7.&lt;br /&gt;
* [[wikipedia:Deterministic finite automaton | Wikipedia {{---}} Deterministic finite automaton]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41474</id>
		<title>Детерминированные конечные автоматы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B&amp;diff=41474"/>
				<updated>2014-11-29T09:43:09Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Детерминированный конечный автомат (ДКА)''' (англ. ''deterministic finite automaton (DFA)'') — набор из пяти элементов &amp;lt;tex&amp;gt;\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to Q \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; — алфавит (англ. ''alphabet''), &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; — множество состояний (англ. ''finite set of states''), &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — начальное (стартовое) состояние (англ. ''start state''), &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; — множество допускающих состояний (англ. ''set of accept states''), &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt; — функция переходов (англ. ''transition function'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Процесс допуска ==&lt;br /&gt;
Изначально автомат находится в стартовом состоянии &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. Автомат считывает символы по очереди. При считывании очередного символа &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; автомат переходит в состояние &amp;lt;tex&amp;gt;\delta(q, p_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — текущее состояние автомата. Процесс продолжается до тех пор, пока не будет достигнут конец входного слова.&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=допускает&lt;br /&gt;
|definition=&lt;br /&gt;
Будем говорить, что автомат '''допускает''' слово, если после окончания описанного выше процесса автомат окажется в допускающем состоянии.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание.''' Если в какой-то момент из текущего состояния нет перехода по считанному символу, то будем считать, что автомат не допускает данное слово. При реализации вместо отдельного рассмотрения данного случая иногда удобно вводить фиктивную нетерминальную '''''«дьявольскую вершину»''''' (также '''''тупиковое состояние''''', '''''сток'''''), из которой любой переход ведет в неё же саму, и заменить все несуществующие переходы на переходы в «дьявольскую вершину».&lt;br /&gt;
&lt;br /&gt;
== Способы представления ==&lt;br /&gt;
* Диаграмма переходов — граф, вершины которого соответствуют состояниям автомата, а рёбра — переходам между состояниями.&lt;br /&gt;
* Таблица переходов &amp;lt;tex&amp;gt;T (|Q| \times |\Sigma|)&amp;lt;/tex&amp;gt;, дающая табличное представление функции &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; width=60%&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|Автомат, принимающий непустые строки из чередующихся символов ''a'' и ''b'',&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;а) без «дьявольской вершины», &amp;lt;br/&amp;gt;б) с «дьявольской вершиной» (отмечена серым цветом).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\bigcirc&amp;lt;/tex&amp;gt; — нетерминальное состояние,&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;\circledcirc&amp;lt;/tex&amp;gt; — терминальное состояние.&lt;br /&gt;
&amp;lt;br/&amp;gt;Стрелка &amp;lt;tex&amp;gt;\downarrow&amp;lt;/tex&amp;gt; указывает на начальное состояние.&amp;lt;/small&amp;gt;&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|а)[[Файл:Finite state machine 1.png|150 px]]&lt;br /&gt;
б)[[Файл:Finite state machine 2.png|200 px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Автомат для поиска образца в тексте]] для строки ''abbab''.&lt;br /&gt;
|style=&amp;quot;background:#ffffff&amp;quot;|[[Файл:Automata_Search.png|340px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Автоматные языки ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Мгновенное описание''' ('''конфигурация''') (англ. ''instant configuration'') {{---}} пара &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} текущее состояние, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; {{---}} оставшиеся символы.&lt;br /&gt;
}}&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за один шаг &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta (q, c)=p &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Будем говорить, что конфигурация &amp;lt;tex&amp;gt;\langle p, \beta \rangle&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;\langle q, \alpha \rangle&amp;lt;/tex&amp;gt; за конечное число шагов &amp;lt;tex&amp;gt;(\langle q, \alpha \rangle \vdash^* \langle p, \beta \rangle)&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\exists n:&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha = c_1 c_2 ... c_n\beta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\langle q, c_1 c_2 c_3 ... c_n\beta \rangle \vdash \langle u_1, c_2 c_3 ... c_n\beta \rangle \vdash \langle u_2, c_3 ... c_n\beta \rangle \vdash ... \vdash \langle u_{n-1}, c_n\beta \rangle \vdash \langle p, \beta \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha \rangle \vdash^* \langle p, \varepsilon \rangle, \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle \Rightarrow \langle q, \alpha\beta \rangle \vdash^* \langle r, \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\langle q, \alpha\beta \rangle \vdash^* \langle p, \beta \rangle \vdash^* \langle r, \varepsilon \rangle.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество &amp;lt;tex&amp;gt;L(\mathcal{A})=\{\alpha \mid \exists t \in T : \langle s, \alpha \rangle \vdash^* \langle t, \varepsilon \rangle\}&amp;lt;/tex&amp;gt; называется '''языком автомата''' (англ. ''automata's language'') &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Иначе говоря, языком автомата является множество всех допускаемых им слов. Произвольный язык является автоматным, если существует ДКА, допускающий те и только те слова, которые принадлежат языку.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Множество языков всех ДКА образует множество '''автоматных языков''' &amp;lt;tex&amp;gt;\mathrm{AUT}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Изоморфизм двух автоматов ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Автоматы называются изоморфными, если существует [[wikipedia:Биекция | биекция]] между их вершинами такая, что сохраняются все переходы, терминальные состояния соответствуют терминальным, начальные {{---}} начальным&lt;br /&gt;
}}&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition= &lt;br /&gt;
Задано два детерминированных конечных автомата. Определить, изоморфны ли они друг другу.&lt;br /&gt;
Гарантируется, что все состояния автоматов достижимы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Будем проверять множества переходов для двух вершин. Запустим [[Обход в глубину, цвета вершин | обход в глубину]] из стартовых вершин, если множество переходов по ребрам для двух вершин совпадают и также это выполнено для вершин соответствующим концам ребер (если у нас соответствующие вершины дьявольские, то множество переходов считаем равными) то два автомата изоморфны. Этот алгоритм пройдет по всем вершинам и ребрам ровно один раз, из этого следует время работы &amp;lt;tex&amp;gt;O(N + M) &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; N&amp;lt;/tex&amp;gt; {{---}} суммарное число вершин в автоматах, &amp;lt;tex&amp;gt; M&amp;lt;/tex&amp;gt; {{---}} суммарное число ребер.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
&amp;lt;tex&amp;gt;Transitions&amp;lt;/tex&amp;gt; {{---}} множество пар (&amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Vertex&amp;lt;/tex&amp;gt;), где &amp;lt;tex&amp;gt; a \in \Sigma&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C \in Q&amp;lt;/tex&amp;gt; &lt;br /&gt;
 '''boolean''' dfs(Vertex u, Vertex v) &lt;br /&gt;
    '''for''' (Transition e : u.transitions) &lt;br /&gt;
      '''if''' ('''not''' v.transitions.contains(e)) &lt;br /&gt;
        '''return''' ''false''     &lt;br /&gt;
    &lt;br /&gt;
    '''if''' (v.transitions.size '''!=''' u.transitions.size) &lt;br /&gt;
      '''return''' ''false''&lt;br /&gt;
        &lt;br /&gt;
    '''boolean''' result = ''true''&lt;br /&gt;
    '''for''' (Transition t : u.transitions) &lt;br /&gt;
      '''char''' symbol = t.getSymbol()&lt;br /&gt;
      Vertex t1 = u.transitions.getVertex(symbol)&lt;br /&gt;
      Vertex t2 = v.transitions.getVertex(symbol)&lt;br /&gt;
      result =  result '''and''' dfs(t1, t2)&lt;br /&gt;
    &lt;br /&gt;
    '''return''' result&lt;br /&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4&lt;br /&gt;
* ''Lawson, Mark V. (2004). Finite automata''. Chapman and Hall/CRC. ISBN 1-58488-255-7.&lt;br /&gt;
* [[wikipedia:Deterministic finite automaton | Wikipedia {{---}} Deterministic finite automaton]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25030</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25030"/>
				<updated>2012-06-11T19:05:32Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Доказательство корректности алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
Так как нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то достаточно показать, что составленное расписание достигает этой оценки.&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в начале алгоритма мы имеем &amp;lt;tex&amp;gt; p_1(0) \ge p_2(0) \ge ... \ge p_n(0) &amp;lt;/tex&amp;gt;. Это утверждение не меняется на протяжении всего выполнения алгоритма, для любого момента времени. Получаем: &amp;lt;tex&amp;gt; p_1(t) \ge p_2(t) \ge ... \ge p_n(t) &amp;lt;/tex&amp;gt;. Докажем что алгоритм составляет расписание в соответствии с этим свойством. Чтобы доказать этот факт, будем считать что в любой момент времени T нет простоев машин, когда есть хотя бы одна невыполненная работа. Получаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;  T(s_1 + ... + s_m) = p_1 + p_2 + ... + p_n &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; T = {P_n \over S_n} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом необходимая оценка достигается нашим алгоритмом.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25006</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25006"/>
				<updated>2012-06-11T18:04:09Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Алгоритм построения расписания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
Так как нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то достаточно показать, что составленное расписание достигает этой оценки.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25005</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25005"/>
				<updated>2012-06-11T18:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Доказательство корректности алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
Так как нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то достаточно показать, что составленное расписание достигает этой оценки.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25004</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25004"/>
				<updated>2012-06-11T18:03:22Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Алгоритм построения расписания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
Так как нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то достаточно показать, что составленное расписание достигает этой оценки.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25003</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=25003"/>
				<updated>2012-06-11T18:02:49Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: /* Доказательство корректности алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max&amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;\max\limits_{j=1}^{m-1} P_i/S_j, P_n/S_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
Так как нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;w = \max\{\max\limits_{j=1}^{m-1} {P_i \over S_j}, {P_n \over S_m}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то достаточно показать, что составленное расписание достигает этой оценки.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24921</id>
		<title>QpmtnCmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=QpmtnCmax&amp;diff=24921"/>
				<updated>2012-06-11T11:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;&amp;quot;&amp;gt;Эта статья находится в разработке!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория: В разработке]]&amp;lt;/includeonly&amp;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;
2. Составим оптимальное расписание.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм построения расписания==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_i = p_1 + ... + p_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S_j = s_1 + ... + s_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;i = 1 ... n&amp;lt;/tex&amp;gt;;  &amp;lt;tex&amp;gt;j = 1 ... m&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt; - вес i-ой работы ;&amp;lt;tex&amp;gt; s_j&amp;lt;/tex&amp;gt; - скорость работы j-oй машины ; &amp;lt;tex&amp;gt; n \ge m&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Необходимое условие для выполнения всех работ в интервале &amp;lt;tex&amp;gt;[0;T]&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_n = p_1 + ... + p_n \le s_1T + ... + s_mT = S_mT&amp;lt;/tex&amp;gt; или  &amp;lt;tex&amp;gt;P_n/S_m \le T&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нижняя граница &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w = \max&amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;\max\limits_{j=1}^{m-1} P_i/S_j, P_n/S_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Будем назвать Level-ом работы &amp;lt;tex&amp;gt; lvl(p_i(t)) &amp;lt;/tex&amp;gt; - невыполненную часть работы &amp;lt;tex&amp;gt; p_i &amp;lt;/tex&amp;gt; в момент времени &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее построим расписание, которое достигает нашей оценки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, с помощью Level-алгоритма.&lt;br /&gt;
&lt;br /&gt;
Level - алгоритм:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;t \leftarrow 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''WHILE''' существуют работы с положительным level&lt;br /&gt;
       Assign(t)&lt;br /&gt;
       &amp;lt;tex&amp;gt;t1 \leftarrow min(s&amp;gt;t |&amp;lt;/tex&amp;gt;работа выполненная в момент времени &amp;lt;tex&amp;gt; s)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;t2 \leftarrow min(s&amp;gt;t | p_i(t)&amp;gt;p_j(t)&amp;lt;/tex&amp;gt; &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;  p_i(s) == p_j(s))&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt; t \leftarrow min(t1,t2) &amp;lt;/tex&amp;gt;&lt;br /&gt;
   Построение расписания&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tex&amp;gt;Assign(t)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tex&amp;gt;J = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;i|p_i(t)&amp;gt;0&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   &amp;lt;tex&amp;gt;M = &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;M_1,...,M_m&amp;lt;/tex&amp;gt;}&lt;br /&gt;
   '''WHILE''' (&amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; != 0 &amp;amp;&amp;amp; &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; != 0)&lt;br /&gt;
      Найти множество работ &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; подмножество &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; ,level которых максимальный&lt;br /&gt;
      &amp;lt;tex&amp;gt;r \leftarrow min&amp;lt;/tex&amp;gt;(|&amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;|,|&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;|)&lt;br /&gt;
      Назначаем работы из мн-ва &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;J \leftarrow J&amp;lt;/tex&amp;gt;\&amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;&lt;br /&gt;
      удаляем из мн-ва &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; самых быстрых машин&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
[[Файл:qptmncmax.png|400px|thumb|right|Картинка к примеру]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть 5 работ и 4 станка. Покажем работу алгоритма для данного случая.&lt;br /&gt;
&lt;br /&gt;
В начальный момент времени начинаем обрабатывать работы с наибольшим временем выполнения &amp;lt;tex&amp;gt;J_1-J_4&amp;lt;/tex&amp;gt; на станках &amp;lt;tex&amp;gt;M_1-M_4&amp;lt;/tex&amp;gt; соответственно. В момент времени &amp;lt;tex&amp;gt;t_1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;lvl&amp;lt;/tex&amp;gt; 4-ой работы опускается до времени выполнения 5-ой работы. С этого момента начинаем обрабатывать работы &amp;lt;tex&amp;gt; J_4,J_5&amp;lt;/tex&amp;gt; на одном станке: &amp;lt;tex&amp;gt;M_4&amp;lt;/tex&amp;gt;. В момент времени &amp;lt;tex&amp;gt;t_2&amp;lt;/tex&amp;gt; происходит похожая ситуация. С этого момента времени работы &amp;lt;tex&amp;gt; J_1,J_2&amp;lt;/tex&amp;gt; выполняются синхронно на двух станках &amp;lt;tex&amp;gt; M_1,M_2&amp;lt;/tex&amp;gt;. Далее работы не пересекаются друг с другом и каждая заканчивается на ранее выделенных им станках.&lt;br /&gt;
&lt;br /&gt;
==Время работы==&lt;br /&gt;
Level-алгоритм вызывает функцию Assign(t) в самом худшем случае &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; раз. Функция Assign(t) выполняется за &amp;lt;tex&amp;gt;O(nm)&amp;lt;/tex&amp;gt;. Итоговое время работы &amp;lt;tex&amp;gt;O(n^2m)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2-3_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=24246</id>
		<title>2-3 дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2-3_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=24246"/>
				<updated>2012-06-06T21:28:03Z</updated>
		
		<summary type="html">&lt;p&gt;217.118.78.38: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:23дерево_new.jpg‎ |right|300px|thumb|Пример 2-3 дерева]]‎&lt;br /&gt;
''' 2-3 дерево ''' — структура данных, представляющая собой сбалансированное дерево поиска, такое что из каждого узла может выходить две или три ветви и глубина всех листьев одинакова. 2-3 дерево можно обобщить до [[B-дерево#B.2B-.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D0.BE|B+-дерева]]. &lt;br /&gt;
&lt;br /&gt;
== Структура ==&lt;br /&gt;
:*Все данные хранятся в листьях, в вершинах хранится вспомогательная информация,необходимая для организации поиска по поддеревьям. &lt;br /&gt;
:*Сыновья упорядочены по значению максимума поддерева сына. &lt;br /&gt;
:*Нелистовые вершины содержат 1 или 2 ключа, указывающие на диапазон значений в их поддеревьях. &lt;br /&gt;
:*Если нелистовая вершина имеет двух сыновей, то вершина хранит минимум правого поддерева; если трех, то первый ключ равен минимуму среднего поддерева, а второй ключ равен минимуму правого поддерева. &lt;br /&gt;
:*2-3 деревья сбалансированы, то есть каждое левое, правое, и центральное поддерево одинаковой высоты, и таким образом содержат равное (или почти равное) число данных. &lt;br /&gt;
:*Высота 2-3 дерева &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; - количество элементов в дереве, поэтому операции поиска, добавления, удаления, слияния выполняются за время  &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Поиск ===&lt;br /&gt;
Для поиска в 2-3  дереве необходимо последовательно просматривать ключи, &lt;br /&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;
Есть два варианта вставки в 2-3 дерево.&lt;br /&gt;
&lt;br /&gt;
1) Чтобы поместить новый ключ в узел, в котором содержится ровно один ключ, необходимо просто добавить его как второй ключ к узлу.&lt;br /&gt;
&lt;br /&gt;
[[Файл:23treeadd3.png|440px|border]]  [[Файл:23treeadd4.png|400px|border]] &lt;br /&gt;
&lt;br /&gt;
2) Если же в узле уже содержатся два ключа, делим его на два &amp;quot;одноключевых&amp;quot; узла и вставляем средний ключ в родительский узел.Это может привести к тому, что придется делить родительский узел. Тогда таким же образом проходим до корня дерева.&lt;br /&gt;
&lt;br /&gt;
[[Файл:23treeadd1.png|490px|border]]  [[Файл:23treeadd2.png|400px|border]]&lt;br /&gt;
&lt;br /&gt;
=== Удаление элемента ===&lt;br /&gt;
При удалении ключа из узла возникают три варианта.&lt;br /&gt;
&lt;br /&gt;
1) Если после удаления ключа в узле содержится два ключа, то после удаления ничего не меняется.&lt;br /&gt;
&lt;br /&gt;
2) Если же у ключа после удаления остался один элемент, то проверяем количество потомков второго ребенка того узла, ребенком которого является узел с удаляемым ключом. Если у него два ребенка, то присваиваем ему оставшийся один элемент. Вершину, оставшуюся без детей, удаляем рекурсивно. &lt;br /&gt;
&lt;br /&gt;
[[Файл:23treedel1.png|330px|border]]  [[Файл:23treedel2.png|300px|border]] [[Файл:23treedel5.png|300px|border]]&lt;br /&gt;
&lt;br /&gt;
3) Иначе у него три ребенка. Тогда присваиваем узлу с одним ключом один из этих ключей, таким образом получая два узла с двумя ключами.&lt;br /&gt;
&lt;br /&gt;
[[Файл:23treedel3.png|300px|border]]  [[Файл:23treedel4.png|320px|border]] [[Файл:23treedel6.png|300px|border]] &lt;br /&gt;
&lt;br /&gt;
=== Слияние двух деревьев ===&lt;br /&gt;
Возможно два варианта слияния двух деревьев.&lt;br /&gt;
&lt;br /&gt;
1) Если два дерева одной высоты, то слияние представляет собой добавление общей вершины.&lt;br /&gt;
&lt;br /&gt;
[[Файл:23treemerge1.png|400px|border]]  [[Файл:23treemerge2.png|400px|border]] &lt;br /&gt;
&lt;br /&gt;
2) Если два дерева разной высоты, то при слиянии меньшее добавляем как поддерево к одной из вершин большего.Если возникает ситуация,когда у необходимого узла уже есть три ребенка, то делим его на два узла с двумя поддеревьями, переходим в родителя.Таким образом будем проходим по дереву вверх пока дерево не станет корректным.&lt;br /&gt;
&lt;br /&gt;
[[Файл:23treemerge3.png|400px|border]]  [[Файл:23treemerge4.png|400px|border]]&lt;br /&gt;
&lt;br /&gt;
== Cсылки ==&lt;br /&gt;
* [http://is.ifmo.ru/vis/tree23/tree23_ru.html is.ifmo.ru - Визуализатор 2-3 дерева — 1]&lt;br /&gt;
* [http://rain.ifmo.ru/cat/view.php/vis/trees/2-3-2002 rain.ifmo.ru - Визуализатор 2-3 дерева — 2]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/2-3-дерево Википедия — 2-3 дерево]&lt;br /&gt;
* Д. Кнут «Искусство программирования. Сортировка и поиск», часть 6.2.4&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[АВЛ-дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;/div&gt;</summary>
		<author><name>217.118.78.38</name></author>	</entry>

	</feed>