<?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=80.82.78.13&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=80.82.78.13&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/80.82.78.13"/>
		<updated>2026-05-19T14:02:06Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_1%D0%9A%D0%A2_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2019&amp;diff=83347</id>
		<title>Алгоритмы 1КТ осень 2019</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_1%D0%9A%D0%A2_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2019&amp;diff=83347"/>
				<updated>2022-09-01T04:44:54Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://nerc.itmo.ru/teaching/algo/year2019/ Сайт]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheets/d/1q4hb8ZT2XIaUZCylGfglgBkYA1qb9YsVsVJsm6-e0Yw/ Таблица с баллами]&lt;br /&gt;
&lt;br /&gt;
[https://nerc.itmo.ru/teaching/algo/year2019/tasks_36-37.pdf Домашние задания 35-37]&lt;br /&gt;
&lt;br /&gt;
[https://nerc.itmo.ru/teaching/algo/year2019/hw.pdf Домашние задания 38-39]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&amp;diff=83346</id>
		<title>Список</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&amp;diff=83346"/>
				<updated>2022-09-01T04:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Связный список''' (англ. ''List'') {{---}} структура данных, состоящая из элементов, содержащих помимо собственных данных ссылки на следующий и/или предыдущий элемент списка. С помощью списков можно реализовать такие структуры данных как [[стек]] и [[очередь]]. &lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Односвязный список ==&lt;br /&gt;
Простейшая реализация списка. В узлах хранятся данные и указатель на следующий элемент в списке.&lt;br /&gt;
[[Файл:simpleSpisok.png|center|400px]]&lt;br /&gt;
==Двусвязный список ==&lt;br /&gt;
Также хранится указатель на предыдущий элемент списка, благодаря чему становится проще удалять и переставлять элементы.&lt;br /&gt;
[[Файл:twiceSpisok.png|center|400px]]&lt;br /&gt;
===XOR-связный список ===&lt;br /&gt;
В некоторых случаях использование двусвязного списка в явном виде является нецелесообразным. В целях экономии памяти можно хранить только результат выполнения операции Xor над адресами предыдущего и следующего элементов списка. Таким образом, зная адрес предыдущего элемента, мы можем вычислить адрес следующего элемента.&lt;br /&gt;
==Циклический список==&lt;br /&gt;
Первый элемент является следующим для последнего элемента списка.&lt;br /&gt;
[[Файл:circleSpisok.png|center|450px]]&lt;br /&gt;
==Операции на списке==&lt;br /&gt;
Рассмотрим базовые операции на примере односвязного списка.&lt;br /&gt;
===Вставка===&lt;br /&gt;
Очевиден случай, когда необходимо добавить элемент (&amp;lt;tex&amp;gt;newHead&amp;lt;/tex&amp;gt;) в голову списка. Установим в этом элементе ссылку на старую голову, и обновим указатель на голову.&lt;br /&gt;
&lt;br /&gt;
  '''function''' insert(Node thatElement):&lt;br /&gt;
    thatElement.next = thisElement.next &lt;br /&gt;
    thisElement.next = thatElement&lt;br /&gt;
[[Файл:insertAfter.png|center|490px]]&lt;br /&gt;
&lt;br /&gt;
===Поиск===&lt;br /&gt;
Для того, чтобы найти элемент по значению (&amp;lt;tex&amp;gt;value&amp;lt;/tex&amp;gt;), будем двигаться по списку от головы до конца и сравнивать значение в элементах с искомым. Если элемента в списке нет, то возвращаем &amp;lt;tex&amp;gt;NULL&amp;lt;/tex&amp;gt;. &lt;br /&gt;
  Node search('''int''' value):&lt;br /&gt;
    node = head&lt;br /&gt;
    '''while''' node != ''NULL'' '''and''' value != node.value&lt;br /&gt;
        node = node.next&lt;br /&gt;
    '''return''' node&lt;br /&gt;
&lt;br /&gt;
===Удаление===&lt;br /&gt;
Для того, чтобы удалить голову списка, переназначим указатель на голову на второй элемент списка, а голову удалим.&lt;br /&gt;
  '''function''' removeHead():&lt;br /&gt;
    '''if''' head != ''NULL''&lt;br /&gt;
        tmp = head&lt;br /&gt;
        head = head.next&lt;br /&gt;
        '''delete''' tmp&lt;br /&gt;
[[Файл:removeHead.png|center|430px]]&lt;br /&gt;
Удаление элемента после заданного (&amp;lt;tex&amp;gt;thisElement&amp;lt;/tex&amp;gt;) происходит следующим образом: изменим ссылку на следующий элемент на следующий за удаляемым, затем удалим нужный объект.&lt;br /&gt;
  '''function''' removeAfter(Node thisElement):&lt;br /&gt;
    '''if''' thisElement.next != ''NULL''&lt;br /&gt;
        tmp = thisElement.next&lt;br /&gt;
        thisElement.next = thisElement.next.next&lt;br /&gt;
        '''delete''' tmp&lt;br /&gt;
[[Файл:removeAfter.png|center|550px]]&lt;br /&gt;
&lt;br /&gt;
==Поиск цикла в списке==&lt;br /&gt;
Для начала необходимо уметь определять {{---}} список циклический или нет. Воспользуемся алгоритмом Флойда &amp;quot;Черепаха и заяц&amp;quot;. Пусть за одну итерацию первый указатель (черепаха) переходит к следующему элементу списка, а второй указатель (заяц) на два элемента вперед. Тогда, если эти два указателя встретятся, то цикл найден, если дошли до конца списка, то цикла нет.&lt;br /&gt;
  '''boolean''' hasCycle(Node head):&lt;br /&gt;
    tortoise = head&lt;br /&gt;
    hare = head&lt;br /&gt;
    '''repeat'''&lt;br /&gt;
      '''if''' hare == ''NULL'' '''or''' hare.next == ''NULL'' &lt;br /&gt;
        '''return''' ''false''&lt;br /&gt;
      tortoise = tortoise.next&lt;br /&gt;
      hare = hare.next.next&lt;br /&gt;
    '''until''' tortoise == hare&lt;br /&gt;
    '''return''' ''true''&lt;br /&gt;
Если цикла не существует, то заяц первым дойдет до конца и функция возвратит &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;gt;. В другом случае, в тот момент, когда и черепаха и заяц находятся в цикле, расстояние между ними будет сокращаться на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, что гарантирует их встречу за конечное время.&lt;br /&gt;
&lt;br /&gt;
==Поиск длины хвоста в списке с циклом==&lt;br /&gt;
Так как для поиска хвоста мы должны знать, что цикл существует, воспользуемся предыдущей функцией и при выходе из неё запомним &amp;quot;момент встречи&amp;quot; зайца и черепахи. Назовем её &amp;lt;tex&amp;gt;pointMeeting&amp;lt;/tex&amp;gt;.&lt;br /&gt;
===Наивные реализации===&lt;br /&gt;
====Реализация за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;====&lt;br /&gt;
Будем последовательно идти от начала цикла и проверять, лежит ли этот элемент на цикле. На каждой итерации запустим от &amp;lt;tex&amp;gt;pointMeeting&amp;lt;/tex&amp;gt; вперёд указатель. Если он окажется в текущем элементе, прежде чем посетит &amp;lt;tex&amp;gt;pointMeeting&amp;lt;/tex&amp;gt; снова, то точку окончания (начала) хвоста нашли.&lt;br /&gt;
&lt;br /&gt;
====Реализация за &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;====&lt;br /&gt;
Реализацию, приведенную выше можно улучшить. Для этого воспользуемся [[Целочисленный_двоичный_поиск | бинарным поиском]]. Сначала проверим голову списка, потом сделаем &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; шага вперёд, потом &amp;lt;tex&amp;gt; 4 &amp;lt;/tex&amp;gt;, потом  &amp;lt;tex&amp;gt; 8 &amp;lt;/tex&amp;gt; и так далее, пока не окажемся на цикле. Теперь у нас есть две позиции {{---}} на левой границе, где мы в хвосте, и на правой {{---}} в цикле. Сделаем бинарный поиск уже по этому отрезку и таким образом найдём цикл за &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Эффективная реализация===&lt;br /&gt;
Возможны два варианта цикла в списке. Первый вариант {{---}} сам список циклический (указатель &amp;lt;tex&amp;gt;next&amp;lt;/tex&amp;gt; последнего элемента равен первому), а второй вариант {{---}} цикл внутри списка (указатель &amp;lt;tex&amp;gt;next&amp;lt;/tex&amp;gt; последнего элемента равен любому другому (не первому)). В первом случае найти длину цикла тривиально, во второй случай сводится к первому, если найти указатель на начало цикла. Достаточно запустить один указатель из &amp;lt;tex&amp;gt;pointMeeting&amp;lt;/tex&amp;gt;, а другой из головы с одной скоростью. Элемент, где оба указателя встретятся, будет началом цикла. Сложность алгоритма {{---}} &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Ниже приведена функция, которая находит эту точку, а возвращает длину хвоста списка. &lt;br /&gt;
  '''int''' getTail(Node head, Node pointMeeting):&lt;br /&gt;
    firstElement = head.next&lt;br /&gt;
    secondElement = pointMeeting.next&lt;br /&gt;
    lengthTail = 1&lt;br /&gt;
    '''while''' firstElement != secondElement&lt;br /&gt;
      firstElement = firstElement.next&lt;br /&gt;
      secondElement = secondElement.next&lt;br /&gt;
      lengthTail = lenghtTail + 1&lt;br /&gt;
    '''return''' lengthTail&lt;br /&gt;
====Доказательство корректности алгоритма====&lt;br /&gt;
Рассмотрим цикл длиной &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; с хвостом длины &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Напишем функции для обоих указателей в зависимости от шага &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Очевидно, что встреча не может произойти при &amp;lt;tex&amp;gt;n \leqslant L&amp;lt;/tex&amp;gt;, так как в этом случае &amp;lt;tex&amp;gt;2n&amp;gt;n&amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt;n&amp;gt;0&amp;lt;/tex&amp;gt;. Тогда положения указателей зададутся следующими функциями (при &amp;lt;tex&amp;gt;n&amp;gt;L&amp;lt;/tex&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f_1(n) = L + (n-L) \bmod N&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f_2(n) = L + (2n-L) \bmod N&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Приравнивая, получим &amp;lt;tex&amp;gt;n \bmod N = 0&amp;lt;/tex&amp;gt;, или &amp;lt;tex&amp;gt;n = k N, n &amp;gt; L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; {{---}} голова списка, &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} точка встречи, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} первый элемент цикла, &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} расстояние от &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Тогда в точку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; можно прийти двумя путями: из &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; и из &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;L + N = X + Q&amp;lt;/tex&amp;gt;, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = L + N - X&amp;lt;/tex&amp;gt;, но так как &amp;lt;tex&amp;gt;X = kN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = L + (1-k) N&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L = p N + M, 0 \leqslant M &amp;lt; N&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Известно, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;L &amp;lt; k N \leqslant L + N&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;pN + M &amp;lt; kN \leqslant (p+1)N + M&amp;lt;/tex&amp;gt; откуда &amp;lt;tex&amp;gt;k = p + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставив полученные значения, получим:&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = pN + M + (1 - p - 1)N = M = L \bmod N&amp;lt;/tex&amp;gt;, откуда следует, что если запустить указатели с одной скоростью из &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, то они встретятся через &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; шагов в точке &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. К этому времени вышедший из &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; пройдёт ровно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; шагов и остановится в &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, вышедший из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; накрутит по циклу &amp;lt;tex&amp;gt;[L/N]&amp;lt;/tex&amp;gt; шагов и пройдёт ещё &amp;lt;tex&amp;gt;Q = L \bmod N&amp;lt;/tex&amp;gt; шагов. Поскольку &amp;lt;tex&amp;gt;L = [L/N] + L \bmod N&amp;lt;/tex&amp;gt;, то они встретятся как раз в точке &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Задача про обращение списка==&lt;br /&gt;
Для того, чтобы обратить список, необходимо пройти по всем элементам этого списка, и все указатели на следующий элемент заменить на предыдущий.&lt;br /&gt;
Эта рекурсивная функция принимает указатель на голову списка и предыдущий элемент (при запуске указывать &amp;lt;tex&amp;gt;NULL&amp;lt;/tex&amp;gt;), а возвращает указатель на новую голову списка.&lt;br /&gt;
   &lt;br /&gt;
  Node reverse(Node current, Node prev):&lt;br /&gt;
    '''if''' current == ''NULL''&lt;br /&gt;
      '''return''' prev&lt;br /&gt;
    next = current.next&lt;br /&gt;
    current.next = prev&lt;br /&gt;
    '''return''' reverse(next, current)&lt;br /&gt;
&lt;br /&gt;
Алгоритм корректен, поскольку значения элементов в списке не изменяются, а все указатели &amp;lt;tex&amp;gt;next&amp;lt;/tex&amp;gt; изменят свое направление, не нарушив связности самого списка. &lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Динамический массив]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:Linked_list | Wikipedia {{---}} Linked list]]&lt;br /&gt;
* [[wikipedia:ru:Список_(информатика) | Википедия {{---}} Список]]&lt;br /&gt;
* Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ {{---}} 2-е изд. {{---}} М.: «Вильямс», 2007. {{---}} Глава 11.2. {{---}} ISBN 5-8489-0857-4&lt;br /&gt;
* Дональд Э. Кнут Искусство программирования. Том 1. Основные алгоритмы {{---}} 2-е изд. {{---}} М.: «Вильямс», 2012. {{---}} Глава 2.2. {{---}} ISBN 0-201-89685-0&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=83345</id>
		<title>Обобщенный квадратичный закон взаимности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=83345"/>
				<updated>2022-09-01T04:44:42Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
Квадратичный закон взаимности для символа Лежандра обобщается на символ Якоби следующим уравнением:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th2&lt;br /&gt;
|about=Обобщенный квадратичный закон взаимности&lt;br /&gt;
|statement=для любых нечетных &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;
&amp;lt;tex&amp;gt;\left(\cfrac{m}{n}\right)=(-1)^{\frac{m-1}{2}\frac{n-1}{2}}\left(\cfrac{n}{m}\right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&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;
&amp;lt;tex&amp;gt;n=p_1\times\cdots\times p_s\\m=q_1\times\cdots\times q_r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left(\cfrac{m}{n}\right)=\prod^s_{i=1}\left(\cfrac{m}{p_i}\right)=\prod^s_{i=1}\prod^r_{j=1}\left(\cfrac{q_j}{p_i}\right)=\prod^s_{i=1}\prod^r_{j=1}(-1)^{\frac{p_i-1}{2}\frac{q_j-1}{2}}\left(\cfrac{p_i}{q_j}\right)=(-1)^{\sum^s_{i=1}\sum^r_{j=1}\frac{p_i-1}{2}\frac{q_j-1}{2}}\prod^s_{i=1}\prod^r_{j=1}\left(\cfrac{p_i}{q_j}\right)=(-1)^{\sum^s_{i=1}\left(\frac{p_i-1}{2}\sum^r_{j=1}\frac{q_j-1}{2}\right)}\prod^s_{i=1}\prod^r_{j=1}\left(\cfrac{p_i}{q_j}\right)=(-1)^{\sum^s_{i=1}\left(\frac{p_i-1}{2}\frac{m-1}{2}\right)}\prod^r_{j=1}\left(\cfrac{n}{q_j}\right)=(-1)^{\frac{m-1}{2}\frac{n-1}{2}}\left(\cfrac{n}{m}\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория чисел]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)&amp;diff=83344</id>
		<title>Generative Adversarial Nets (GAN)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)&amp;diff=83344"/>
				<updated>2022-09-01T04:44:36Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Арх_ган.png|450px|thumb|Рисунок 1. Оригинальная архитектура GAN]]&lt;br /&gt;
&lt;br /&gt;
'''Порождающие состязательные сети''' (англ. ''Generative Adversarial Nets, GAN'') {{---}} алгоритм машинного обучения, входящий в семейство [[:Порождающие модели|порождающих моделей]] и построенный на комбинации из двух нейронных сетей: генеративная модель &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, которая строит приближение распределения данных, и дискриминативная модель &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, оценивающая вероятность, что образец пришел из тренировочных данных, а не сгенерированных моделью &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (рис. 1). Обучение для модели &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; заключается в максимизации вероятности ошибки дискрминатора &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Впервые такие сети были представлены Иэном Гудфеллоу в 2014 году. &lt;br /&gt;
&lt;br /&gt;
==Постановка задачи и метод==&lt;br /&gt;
Как было указано ранее в описании метода, мы хотим обучить две модели: генеративную и дискриминативную. Поскольку, удобнее всего использовать многослойные перцептроны для обучения состязательной модели, будем использовать именно их для детального описания работы модели.&lt;br /&gt;
Чтобы вывести вероятностное распределение генератора &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; над набором данных &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, определим априорную вероятность шума &amp;lt;tex&amp;gt;p_{z}(z)&amp;lt;/tex&amp;gt; и представим генератор, как отображение &amp;lt;tex&amp;gt;G(z, \gamma_{g})&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; дифференцируемая функция, представленная многослойным перцептроном с параметром &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt;. Аналогичным образом представим второй многослойный перцептрон &amp;lt;tex&amp;gt;D(z, \gamma_{d})&amp;lt;/tex&amp;gt;, который на выход подает одно скалярное значение - вероятность того, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; пришло из тренировочных данных, а не &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt;. Во время тренировки &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; мы стремимся максимизировать вероятность правильной идентификации объектов из тренировочной и сгенерированной выборок. И в то же время тренируем &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; так, чтобы минимизировать &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt;:&lt;br /&gt;
Другими словами, &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; играют в &amp;quot;минимакс игру&amp;quot;:  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\min\limits_{G}\max\limits_{D} V(D,G) = \mathop{E}\limits_{x \sim p_{data}}[logD(x)] + \mathop{E}\limits_{z \sim p_{z}}[log(1-D(G(z)))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интуитивный процесс тренировки==&lt;br /&gt;
[[File:GANIntuitive.jpg|500px|thumb|right|Рисунок 2. Иллюстрация процесса тренировки порождающих состязательных сетей GAN. Источник: https://arxiv.org/pdf/1701.07875.pdf]]&lt;br /&gt;
Как показано на рисунке 2, генеративные состязательные сети обучаются путем одновременного обновления дискриминирующего распределения (&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; синяя пунктирная линия), так чтобы дискриминатор мог различать объекты из распределения тренировочного сета(черная пунктирная в точку линия) и из распределения генератора (&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; зеленая сплошная линия). Нижняя горизонтальная линия представляет собой область, из которой составлена выборка &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, в нашем случае равномерно. Горизонтальная линия над ней является частью области &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Стрелками на картинке показано, как отображение &amp;lt;tex&amp;gt;x = G(z)&amp;lt;/tex&amp;gt;, накладывает неравномерное распределение &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; на тренировочное. &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; сжимается в областях с высокой плотностью и расширяется в областях с низкой.&lt;br /&gt;
Рассмотрим описанный на картинках процесс. (a) Близкая сходимость состязающейся пары: &amp;lt;tex&amp;gt;p_{g}&amp;lt;/tex&amp;gt; похоже на распределение &amp;lt;tex&amp;gt;p_{data} и D&amp;lt;/tex&amp;gt; частично-точный классификатор. (b) Во внутреннем цикле алгоритма &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; обучается отличать объекты из тренировочных данных, сходясь к &amp;lt;tex&amp;gt;\frac{p_{data}(x)}{p_{data}(x) + p_{g}(x)}&amp;lt;/tex&amp;gt;. (c) После обновления &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; градиент &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; привел &amp;lt;tex&amp;gt;G(z)&amp;lt;/tex&amp;gt; к передвижению в область, с большей вероятностью быть классифицированным как данные. (d) После нескольких шагов обучения &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; придут в состояние, в котором не смогу улучшиться, так как будет выполняться условие &amp;lt;tex&amp;gt;p_{g} = p_{data}&amp;lt;/tex&amp;gt; и дискриминатор не сможет различать два распределения и его выход всегда будет &amp;lt;tex&amp;gt;D(x) = \frac{1}{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Оригинальный алгоритм обучения GAN==&lt;br /&gt;
[[File:Обучение_ган.png|450px|thumb|right|Рисунок 3. Визуализация генерирования фотографии с помощью DCGAN по одному и тому же шуму в зависимости от итерации обучения. Источник: https://arxiv.org/pdf/1701.07875.pdf]]&lt;br /&gt;
&lt;br /&gt;
В процессе обучения требуется делать два шага оптимизации поочередно: сначала обновлять веса генератора &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt; при фиксированном &amp;lt;tex&amp;gt;\gamma_{d}&amp;lt;/tex&amp;gt;, а затем веса дискриминатора &amp;lt;tex&amp;gt;\gamma_{d}&amp;lt;/tex&amp;gt; при фиксированном &amp;lt;tex&amp;gt;\gamma_{g}&amp;lt;/tex&amp;gt;. На практике дискриминатор обновляется &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; раз вместо одного, поскольку, полностью оптимизировать дискриминатор вычислительно не выгодно и на конечных сетах он может переобучиться. Таким образом &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; является гиперпараметром.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// num_iteration {{---}} число итераций обучения &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' GAN:&lt;br /&gt;
   '''for''' i = 1..num_iteration '''do'''&lt;br /&gt;
     '''for''' j = 1..k '''do'''&lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$&amp;lt;/font&amp;gt;&lt;br /&gt;
       $z$ = getBatchFromNoisePrior($p_z$)  &lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{x_1, . . . , x_m\}$ из распределения $p_{data}$ &amp;lt;/font&amp;gt;&lt;br /&gt;
       $x$ = getBatchFromDataGeneratingDistribution($p_{data}$)&lt;br /&gt;
       &amp;lt;font color=green&amp;gt;//Обновляем дискриминатор в сторону возрастания его градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;d_w \leftarrow \mathop{\nabla}_{\gamma_{d}} { \frac{1}{m} \sum_{t = 1}^m \limits} [logD(x_t)]  + [log(1-D(G(z_t))] &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''end''' '''for'''&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$ &amp;lt;/font&amp;gt;&lt;br /&gt;
     $z$ = getBatchFromNoisePrior($p_z$)&lt;br /&gt;
     &amp;lt;font color=green&amp;gt;//Обновляем генератор в сторону убывания его градиента &amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g_w \leftarrow \mathop{\nabla}_{\gamma_{g}}  { \frac{1}{m} \sum_{t = 1}^m \limits} [log(1-D(G(z_t))] &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''end''' '''for'''&lt;br /&gt;
На практике не всегда удобно использовать уравнение описанной выше. В начале обучения, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; плохо настроен дискриминатор &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; может не учитывать объекты, с высокой уверенностью в классификации, так как они сильно отличаются от тренировочного сета, в таком случае &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt; стагнирует. Чтобы избежать этого, можно вместо минимизации &amp;lt;tex&amp;gt;log(1 - D(G(z)))&amp;lt;/tex&amp;gt; максимизировать &amp;lt;tex&amp;gt;log D(G(z))&amp;lt;/tex&amp;gt;. На рисунке 3 представлена зависимость получаемого изображения от итерации обучения.&lt;br /&gt;
&lt;br /&gt;
==Проблемы обучения GAN==&lt;br /&gt;
&lt;br /&gt;
Большинство GAN'ов подвержено следующим проблемам:&lt;br /&gt;
* Схлопывание мод распределения (англ. mode collapse): генератор коллапсирует, то есть выдает ограниченное количество разных образцов.&lt;br /&gt;
* Проблема стабильности обучения (англ. non-convergence): параметры модели дестабилизируются и не сходятся.&lt;br /&gt;
* Исчезающий градиент (англ. diminished gradient): дискриминатор становится слишком &amp;quot;сильным&amp;quot;, а градиент генератора исчезает и обучение не происходит.&lt;br /&gt;
* Проблема запутывания (англ. disentanglement problem): выявление корреляции в признаках, не связанных (слабо связанных) в реальном мире.&lt;br /&gt;
* Высокая чувствительность к гиперпараметрам.&lt;br /&gt;
&lt;br /&gt;
Часть этих проблем будет рассмотрена подробнее ниже, но нужно заметить, что универсального подхода к решению большинства из них нет. Зато существуют практические советы&amp;lt;ref&amp;gt; [https://github.com/soumith/ganhacks  How to Train a GAN? Tips and tricks to make GANs work]&amp;lt;/ref&amp;gt;, которые могут помочь при обучении GAN'ов. Основными из них являются:&lt;br /&gt;
# Нормализация данных. Все признаки в диапазоне $[-1; 1]$;&lt;br /&gt;
# Замена функции ошибки для $G$ с $\min log (1-D)$ на $\max log D$, потому что исходный вариант имеет маленький градиент на раннем этапе обучения и большой градиент при сходимости, а предложенный наоборот;&lt;br /&gt;
# Сэмплирование из многомерного нормального распределения вместо равномерного;  &lt;br /&gt;
# Использовать нормализационные слои (например, batch normalization или layer normalization) в $G$ и $D$;&lt;br /&gt;
# Использовать метки для данных, если они имеются, то есть обучать дискриминатор еще и классифицировать образцы.&lt;br /&gt;
&lt;br /&gt;
===Коллапс мод===&lt;br /&gt;
&lt;br /&gt;
[[File:mode_collapse.png|600px|thumb|right|Рисунок 4. Проблема mode collapse в GAN сетях, на нижнем ряду представлен обычный GAN, на верхнем {{---}} UGAN с 10 обратными шагами (англ. unrolled steps). Источник: https://arxiv.org/pdf/1611.02163.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[File:mode_collapse_UGAN.png|600px|thumb|right|Рисунок 5. Проблема mode collapse в GAN сетях на примере MNIST датасета, на нижнем ряду представлен обычный GAN, на верхнем {{---}} UGAN с 20 обратными шагами (англ. unrolled steps). Источник: https://arxiv.org/pdf/1611.02163.pdf]]&lt;br /&gt;
&lt;br /&gt;
В процессе обучения генератор может прийти к состоянию, при котором он будет всегда выдавать ограниченный набор выходов. При этом пространство, в котором распределены сгенерированные изображения, окажется существенно меньше, чем пространство исходных изображений.&lt;br /&gt;
Главная причина этого в том, что генератор обучается обманывать дискриминатор, а не воспроизводить исходное распределение.&lt;br /&gt;
Если генератор начинает каждый раз выдавать похожий выход, который является максимально правдоподобным для текущего дискриминатора, то зависимость от $z$ падает, а следовательно и градиент $G(z)$ стремиться к 0. Лучшей стратегией для дискриминатора будет улучшение детектирования этого конкретного изображения.&lt;br /&gt;
Так на следующих итерациях наиболее вероятно, что генератор придет к другому изображению, хорошо обманывающему текущий дискриминатор, а дискриминатор будет учиться отличать конкретно это новое изображение. Этот процесс не будет сходиться и количество представленных мод не будет расти, поэтому  приблизиться к исходному распределению не удастся. На рисунке 4 наглядно представлена проблема mode collapse и то как генератор &amp;quot;путешествует&amp;quot; по модам не приближаясь к целевому распределению. &lt;br /&gt;
На рисунке 5 наглядно представлен пример mode collapse в процессе работы обычной GAN, обучаемой на датасете MNIST.&lt;br /&gt;
&lt;br /&gt;
На текущий момент mode collape является одной из главных проблем GAN, эффективное решение которой ещё ищется.&lt;br /&gt;
Возможные решения проблемы mode collapse:&lt;br /&gt;
* WGAN {{---}} использование метрики Вассерштейна (англ. Wasserstein Loss) внутри функции ошибки, позволяет дискриминатору быстрее обучаться выявлять повторяющиеся выходы, на которых стабилизируется генератор&amp;lt;ref&amp;gt;[https://developers.google.com/machine-learning/gan/problems Common Problems]&amp;lt;/ref&amp;gt;.  &lt;br /&gt;
* UGAN (Unrolled GAN) {{---}} для генератора используется функция потерь, которая не только от того, как текущий дискриминатор оценивает выходы генератора, но и от выходов будущих версий дискриминатора.&lt;br /&gt;
&lt;br /&gt;
===Проблема стабильности обучения===&lt;br /&gt;
&lt;br /&gt;
[[File:Unstable_X_Y.png|600px|thumb|right|Рисунок 6. Симуляция изменения $x$ и $y$ с помощью градиентного спуска, где изменяя $x$ мы пытается минимизировать величину $x*y$, а при изменении $y$, наоборот, стараемся ее максимизировать. Шаг градиентного спуска &amp;lt;tex&amp;gt;\alpha = 0.1&amp;lt;/tex&amp;gt;. Источник: https://lilianweng.github.io/lil-log/2017/08/20/from-GAN-to-WGAN.html]] &lt;br /&gt;
&lt;br /&gt;
Задача обучения дискриминатора и генератора в общем смысле не является задачей поиска локального или глобального минимума функции, а является задачей поиска точки равновесия двух игроков. В теории игр эта точка называется точкой равновесия Нэша (англ. Nash equilibrium) в которой оба игрока больше не получают выгоды, хотя следуют оптимальной стратегии. &lt;br /&gt;
Рассмотрим задачу поиска этой точки на игрушечном примере, где $G$ хочет максимизировать произведение $xy$ а $D$ {{---}} минимизировать. Будем обновлять параметры $x$ и $y$  на основе градиентного спуска: &lt;br /&gt;
&amp;lt;tex&amp;gt; \Delta x = \alpha\frac{\delta(x*y)}{ \delta(x)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; \Delta y = - \alpha\frac{\delta(x*y)}{ \delta(y)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
Если изобразить на графике поведение $x$,$y$ и $xy$ (рис. 6) то станет ясно, что они не сойдутся, а амплитуда их движения будет только увеличиваться.   &lt;br /&gt;
&lt;br /&gt;
В оригинальной статье про GAN используется дивергенция Дженсена-Шеннона (англ. Jensen–Shannon divergence), которая в свою очередь использует дивергенцию Кульбака-Лейблера (англ. Kullback-Leibler divergence):&lt;br /&gt;
:&amp;lt;math&amp;gt;D_\text{KL}(P \parallel Q) = \int_{-\infty}^\infty p(x) \log\left(\frac{p(x)}{q(x)}\right)\, dx&amp;lt;/math&amp;gt;, &lt;br /&gt;
где $P$ и $Q$ {{---}} $k$-мерные абсолютно непрерывные распределения, $p(x)$ и $q(x)$ {{---}} функции плотности этих распределений, заданные на &amp;lt;math&amp;gt;X \subseteq R^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
Нетрудно заметить, что при наличии $x$, в которых $q(x)=0$, весь интеграл разойдется, что плохо влияет на сходимость обучения.&lt;br /&gt;
&lt;br /&gt;
Возможные решения проблемы стабильности:&lt;br /&gt;
*Регуляризация {{---}} Добавление шума ко входам дискриминатора и соответствующая настройка гиперпараметров дискриминатора.&lt;br /&gt;
*PGGAN (Progressive Growing of GANs, разработана NVidia&amp;lt;ref&amp;gt;[https://research.nvidia.com/sites/default/files/pubs/2017-10_Progressive-Growing-of/karras2018iclr-paper.pdf PROGRESSIVE GROWING OF GANS FOR IMPROVED&lt;br /&gt;
QUALITY, STABILITY, AND VARIATION]&amp;lt;/ref&amp;gt;) {{---}} в процессе работы разрешение изображений увеличивается от очень малых (4 на 4 пикселя), до конечных (1024 на 1024 пикселя), что позволяет тренировать сначала выявление крупных черт а затем более мелких, что крайне положительно сказывается на стабильности.&lt;br /&gt;
*WGAN {{---}} В качестве функции дивергенции используется метрика Вассерштейна, которая в большинстве случаев решает проблему расходимости интеграла в функции Дженсена-Шеннона.&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;g : Z \rightarrow X&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Z \subseteq \mathbb{R}^{d}&amp;lt;/tex&amp;gt; $-$ скрытое пространство размерности &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, для которого обычно применимо Гауссово распределение в многомерном случае. &lt;br /&gt;
&amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; $-$ пространство изображений, где у каждого изображения существует набор характеристик вроде возраста или пола. Пусть нам дана функция оценки &amp;lt;tex&amp;gt;f_{S} : X \rightarrow S&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S \subseteq \mathbb{R}^{m}&amp;lt;/tex&amp;gt; $-$ пространство изображений размерности &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;s = f_{S}(g(z))&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;z \in Z&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;s \in S&amp;lt;/tex&amp;gt; $-$ связь между точкой в скрытом подпространстве и характеристиками получившегося изображения. Для функции оценок часто используют Inception score&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1801.01973 Shane Barratt, Rishi Sharma {{---}} A Note on the Inception Score]&amp;lt;/ref&amp;gt; и FID (Frechet Inception distance&amp;lt;ref&amp;gt; [https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance#:~:text=The%20Fr%C3%A9chet%20inception%20distance%20(FID,generative%20adversarial%20network%20(GAN). Frechet Inception distance on Wikipedia]&amp;lt;/ref&amp;gt;), где главными критериями хорошо сгенерированных образцов является разнообразие отличительных черт в образцах и их выраженность.   &lt;br /&gt;
&lt;br /&gt;
Установлено, что при движении между двумя точками &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_2&amp;lt;/tex&amp;gt; характеристики меняются постепенно, без скачков. Тогда по этому направлению в $Z$ можно построить гиперплоскость. &lt;br /&gt;
Тогда сделаем предположение, при котором для любого бинарного параметра существует гиперплоскость, что все образцы с одной стороны от нее имеют одинаковое значение этого параметра.&lt;br /&gt;
&lt;br /&gt;
Заведем следующую функцию &amp;quot;расстояния&amp;quot;: &amp;lt;tex&amp;gt;d(n, z) = n^{T}z&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n \in \mathbb{R}^{d}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; $-$ вектор нормали гиперплоскости.&lt;br /&gt;
Данная функция не подходит под определение расстояния из-за наличия отрицательных значений (но знак нам необходим для определения знака параметра характеристики).&lt;br /&gt;
Ожидается, что есть близкая к линеной зависимость оценки $f$ по данному параметру от &amp;quot;расстояния&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(g(z)) = \lambda d(n, z)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:SubspaceManipulation.png|200px|thumb|right|Рисунок 7. Манипулирование подпространством. Источник:&amp;lt;tex&amp;gt;\href{https://arxiv.org/pdf/1907.10786.pdf}{\text{[x]}}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
В таком случае выраженность характеристики зависит от &amp;quot;расстояния&amp;quot; до этой гиперплоскости. &lt;br /&gt;
Аналогично происходит и в случае нескольких характеристик:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f_{S}(g(z)) = \Lambda N^{T}z&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Lambda&amp;lt;/tex&amp;gt; {{---}} диагональная матрица с линейными коэффициентами &amp;lt;tex&amp;gt;\lambda_{i}&amp;lt;/tex&amp;gt; для каждой из характеристик, &amp;lt;tex&amp;gt;N = [n_1, . . . , n_m]&amp;lt;/tex&amp;gt; $-$ вектора нормалей для гиперплоскостей, разделяющих значения признаков &amp;lt;tex&amp;gt;1..m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В случае если &amp;lt;tex&amp;gt;\Lambda&amp;lt;/tex&amp;gt; {{---}} диагональная, то проблемы запутывания нет.&lt;br /&gt;
&lt;br /&gt;
В противном случае проделаем манипуляции в скрытом подпространстве (рис. 7). Проецируя &amp;lt;tex&amp;gt;n_1&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;n_2&amp;lt;/tex&amp;gt; и вычитая полученный вектор из &amp;lt;tex&amp;gt;n_1&amp;lt;/tex&amp;gt;, получаем такое направление &amp;lt;tex&amp;gt;n_1 - (n_1^{T} - n_2)n_2&amp;lt;/tex&amp;gt; в скрытом пространстве, что вдоль этих направлений у сгенерированных изображений будет изменяться характеристика $1$ вне зависимости от характеристики $2$. &lt;br /&gt;
&lt;br /&gt;
При слишком большом &amp;quot;расстоянии&amp;quot; от гиперплоскости соответствующая характеристика слишком сильно делает лицо непохожим на изначальное, но это объяснимо нормальным распределением вектора шума.&lt;br /&gt;
&lt;br /&gt;
Также в скрытом пространстве имеют место арифмитические операции. То есть можно складывать и вычитать вектора из этого пространства, чтобы как получать промежуточные результаты, так и убирать или добавлять какую-либо характеристику.&lt;br /&gt;
&lt;br /&gt;
Для борьбы с проблемой запутывания существуют и другие подходы: один из них представляет из себя разложение изображения на передний и задний слои (с возможными промежуточными слоями)&amp;lt;ref&amp;gt;[https://openaccess.thecvf.com/content_CVPR_2020/papers/Alharbi_Disentangled_Image_Generation_Through_Structured_Noise_Injection_CVPR_2020_paper.pdf Yazeed Alharbi, Peter Wonka {{---}} Disentangled Image Generation Through Structured Noise Injection, 3.3]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следующий метод основан на том факте, что существуют как локальные черты, так и глобальные. К первым можно отнести форму отдельной части лица, а ко вторым  $-$ возраст и пол. Иногда изменение локальной черты может очень сильно влиять на глобальную. Этого хочется избежать, для этого некоторые размерности вектора шума применяются к каждой остальной размерности&amp;lt;ref&amp;gt;[https://openaccess.thecvf.com/content_CVPR_2020/papers/Alharbi_Disentangled_Image_Generation_Through_Structured_Noise_Injection_CVPR_2020_paper.pdf Yazeed Alharbi, Peter Wonka {{---}} Disentangled Image Generation Through Structured Noise Injection, 3.5]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Применение==&lt;br /&gt;
&lt;br /&gt;
[[File:прогресс_ганов.jpg|450px|thumb|right|Рисунок 8. Прогресс в генерации фотографий с помощью GAN. Источник: https://twitter.com/goodfellow_ian]]&lt;br /&gt;
&lt;br /&gt;
Чаще всего GAN'ы используются для генерации реалистичных фотографий (рис. 8). Серьезные улучшения в этом направлении были сделаны следующими работами:&lt;br /&gt;
&lt;br /&gt;
* Auxiliary GAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1610.09585.pdf Augustus Odena {{---}} Conditional Image Synthesis with Auxiliary Classifier GANs]&amp;lt;/ref&amp;gt;: вариант GAN-архитектуры, использующий метки данных;&lt;br /&gt;
* SN-GAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1802.05957.pdf Takeru Miyato {{---}} SPECTRAL NORMALIZATION FOR GENERATIVE ADVERSARIAL NETWORKS]&amp;lt;/ref&amp;gt;: GAN с новым подходом решения проблемы нестабильного обучения через спектральную нормализацию;&lt;br /&gt;
* SAGAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1805.08318.pdf Han Zhang {{---}} Self-Attention Generative Adversarial Networks]&amp;lt;/ref&amp;gt;: GAN, основанный на механизме внимания;&lt;br /&gt;
* BigGAN&amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1809.11096.pdf Andrew Brock {{---}} LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS]&amp;lt;/ref&amp;gt;: GAN с ортогональной регуляризацией, позволившей разрешить проблему коллапсирования при долгом обучении;&lt;br /&gt;
&lt;br /&gt;
Кроме простой генерации изображений, существуют достаточно необычные применения, дающие впечатляющие результаты не только на картинках, но и на звуке:&lt;br /&gt;
&lt;br /&gt;
* CycleGAN&amp;lt;ref&amp;gt; [https://junyanz.github.io/CycleGAN/ Jun-Yan Zhu &amp;amp; Taesung Park {{---}} Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]&amp;lt;/ref&amp;gt;: меняет изображения c одного домена на другой, например, лошадей на зебр;&lt;br /&gt;
* SRGAN&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1609.04802 Christian Ledig {{---}} Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network]&amp;lt;/ref&amp;gt;: создает изображения с высоким разрешением из более низкого разрешения;&lt;br /&gt;
* Pix2Pix&amp;lt;ref&amp;gt; [https://phillipi.github.io/pix2pix/ Phillip Isola {{---}} Image-to-Image Translation with Conditional Adversarial Nets]&amp;lt;/ref&amp;gt;: создает изображения по семантической окраске;&lt;br /&gt;
* StackGAN&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1612.03242 Han Zhang {{---}} StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks]&amp;lt;/ref&amp;gt;: создает изображения по заданному тексту;&lt;br /&gt;
* MidiNet&amp;lt;ref&amp;gt; [https://arxiv.org/abs/1703.10847 Li-Chia Yang {{---}} MIDINET: A CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORK FOR SYMBOLIC-DOMAIN MUSIC GENERATION]&amp;lt;/ref&amp;gt;: генерирует последовательность нот, таким образом, создает мелодию.&lt;br /&gt;
&lt;br /&gt;
==CGAN (Conditional Generative Adversarial Nets)==&lt;br /&gt;
&lt;br /&gt;
[[File:CGAN_architecture.png|450px|thumb|Рисунок 9. Архитектура CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''Условные порождающие состязательные сети''' (англ. ''Conditional Generative Adversarial Nets, CGAN'') $-$ это модифицированная версия алгоритма GAN, которая может быть сконструирована при помощи передачи дополнительных данных '''y''', являющихся условием для генератора и дискриминатора. '''y''' может быть любой дополнительной информацией, например, меткой класса, изображением или данными из других моделей, что может позволить контролировать процесс генерации данных. Например, можно подавать параметр '''y''', как условие на класс для генерации чисел, похожих на MNIST. Создание таких картинок, в случае передачи картинки в качетсве '''y''' является [[:Задача трансляции изображений|задачей трансляции изображений]]. Пример работы ''CGAN'' на датасете ''MNIST'' с метками классов представленных в виде [[:Векторное представление слов|''one-hot'']] векторов &amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1411.1784.pdf CGAN]&amp;lt;/ref&amp;gt; (рис. 9).&lt;br /&gt;
&lt;br /&gt;
[[File:CGAN_generated.png|450px|thumb|center|Рисунок 10. Цифры, сгенерированные с помощью CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[File:CGAN_generated_tags.PNG|450px|thumb|right|Рисунок 11. Описание картинки. Источник: https://arxiv.org/pdf/1411.1784.pdf]]&lt;br /&gt;
&lt;br /&gt;
Как уже было упомянуто на вход генератора и дискримантора из GAN подается дополнительная информация '''y''', например в случае с многослойными перецептронами условие может быть представлено дополнительным входным слоем.  (рис. 9)&lt;br /&gt;
В генераторе априорная вероятность шума &amp;lt;tex&amp;gt;p_{z}(z)&amp;lt;/tex&amp;gt; и условие &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; комбинируются в объединённое скрытое представление, а состязательная тренирующая модель (Обе сети пытаются оптимизировать целевую функцию или функцию потерь. Когда дискриминатор меняет свое поведение, то и генератор меняет, и наоборот) предоставляет достаточно свободы в том как это представление составляется.&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1207.4404.pdf Yoshua Bengio, Gre ́goire Mesnil, Yann Dauphin and Salah Rifai {{---}} Better Mixing via Deep Representations ]&amp;lt;/ref&amp;gt;&lt;br /&gt;
В дискриминаторе '''x''' и '''y''' представлены как входные параметры.&lt;br /&gt;
&lt;br /&gt;
В таком случае задача оптимизации будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;tex&amp;gt; \min\limits_{G}\max\limits_{D} \mathop{E}\limits_{x \sim p_{data}}[logD(x|y)]  + \mathop{E}\limits_{z \sim p_{z}}[log(1-D(G(z|y))].  &amp;lt;/tex&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве примера использования данного алгоритма можно рассмотреть задачу генерации рукописных цифр. &lt;br /&gt;
&lt;br /&gt;
При создании изображения в генератор поступает скомбинированная информация двух параметров: '''y''' и вектора шума. В случае ''MNIST'' это может быть, например, просто метка класса (от 0 до 9). На выходе из генератора поступает изображение, полученное с помощью транспонированной свертки (происходит деконволюция). Затем полученное изображение комбинируется с '''y''' и поступает в дискриминатор, который в свою очередь применяет свертку, чтобы получить полносвязный слой. Наконец, анализируя полученную информацию (полносвязный слой) дискриминатор принимает решение, является ли изображение сгенерированным.  (рис. 12)&lt;br /&gt;
[[File:CGAN_gen_disc_v2.png|450px|thumb|center|Рисунок 12. Генерация при использовании CGAN]]&lt;br /&gt;
&lt;br /&gt;
Также, используя условные порождающие состязательные сети, можно научить такую сеть генерировать текст по картинке и наоборот. В качестве параметра '''y''' в данном случае передается изображение, которое будет описано (рис. 11).&lt;br /&gt;
&lt;br /&gt;
Более того, для такого типа нейронных сетей, принимающих в качестве параметра '''у''' некоротое изображение местности, в результате может быть получено аналогичное изображение этого места зимой или летом, днем или ночью. Такая задача является [[:Задача трансляции изображений|задачей трансляции изображений]].&lt;br /&gt;
&lt;br /&gt;
==DCGAN (Deep Convolutional Generative Adversarial Nets)==&lt;br /&gt;
&lt;br /&gt;
[[File:DCGAN_generator.png|450px|thumb|right|Рисунок 13. Архитектура генератора в DCGAN. Источник: https://arxiv.org/pdf/1511.06434.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''DCGAN''' $-$ модификация алгоритма ''GAN'', в основе которых лежат сверточные нейронные сети (''CNN''). Задача поиска удобного представления признаков на больших объемах не размеченных данных является одной из наибольнее активных сфер исследований, в частности представление изображений и видио. Одним из удобных способов поиска представлений может быть '''DCGAN''' (рис. 13). Использование сверточных нейронных сетей напрямую не давало хороших результатов, поэтому было внесены ограничения на слои сверток. Эти ограничения и лежат в основе '''DCGAN''':&lt;br /&gt;
&lt;br /&gt;
* Замена всех пулинговых слоев на страйдинговые свертки (''strided convolutions'') в дискриминаторе и частично-страйдинговые свертки (''fractional-strided-convolutions'') в генераторе, что позволяет сетям находить подходящие понижения и повышения размерностей;&lt;br /&gt;
* Использование батчинговой нормализации для генератора и дискриминатора, то есть нормализация входа так, чтобы среднее значения было равно нулю и дисперсия была равна единице. Не стоит использовать батч-нормализация для выходного слоя генератора и входного дискриминатор.&lt;br /&gt;
* Удаление всех полносвязных скрытых уровней для более глубоких архитектур;&lt;br /&gt;
* Использование ''ReLU'' в качестве функции активации в генераторе для всех слоев, кроме последнего, где используется ''tanh'';&lt;br /&gt;
* Использование ''LeakyReLU'' в качестве функции активации в дискриминаторе для всех слоев.&lt;br /&gt;
&lt;br /&gt;
Помимо задачи генерации объектов, данный алгоритм хорошо показывает себя в извлечении признаков.&lt;br /&gt;
Данный алгоритм был натренирован на наборе данных ''Imagenet-1k''&amp;lt;ref name = &amp;quot;datasets&amp;quot;&amp;gt;[http://neerc.ifmo.ru/wiki/index.php?title=Известные_наборы_данных Известные наборы данных]&amp;lt;/ref&amp;gt;, после чего были использованы значения со сверточных слоев дискриминатора, подвергнутые ''max-pooling'''у, чтобы образовать матрицы &lt;br /&gt;
&amp;lt;tex&amp;gt; 4 \times 4 &amp;lt;/tex&amp;gt; и получить общий вектор признаков на их основе. ''L2-SVM'', c полученным представлением, на наборе данных ''CIFAR-10''&amp;lt;ref name=&amp;quot;datasets&amp;quot; /&amp;gt; превосходит по точности решения, основанные на алгоритме&lt;br /&gt;
''K-Means''. Подробнее об этом вы можете прочитать в статье. &amp;lt;ref&amp;gt; [https://arxiv.org/pdf/1511.06434.pdf  Alec Radford, Luke Metz, Soumith Chintala {{---}} Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==StackGAN (Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks)==&lt;br /&gt;
&lt;br /&gt;
[[File:StackGANexample.jpg|400px|thumb|right|Рисунок 14. Пример работы порождающей состязателной сети для генерации фото-реалистичных изображений StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]&lt;br /&gt;
&lt;br /&gt;
'''StackGAN''' $-$ порождающая состязательная сеть для генерации фото-реалистичных изображений (256x256) исходя из текстового описания. Генерировать фото-реалистичные изображения на обычных GAN сложно, поэтому была придумана двух-этапная модель генерации. Stage-I GAN рисует скетчи с примитивными формами и цветами, основанные на текстовом описании, в низком разрешении. Stage-II GAN принимает на вход изображения с первого этапа и текстовое описание и генерирует изображение в высоком разрешении с фото-реалистичными деталями. Чтобы улучшить разнообразие синтезированных изображений и стабилизировать обучение, вместо CGAN использовался метод Conditioning Augmentation.&lt;br /&gt;
&lt;br /&gt;
Раннее использовались CGAN, поскольку на вход им можно было подавать условия, но просто добавляя слои, увеличивающие размер изображения, достичь хороших результатов не удалось. Поэтому основной задачей было повысить разрешение изображений. &lt;br /&gt;
&lt;br /&gt;
Одной из ключевых особенностей StackGAN является Conditioning Augmentation, так как оно позволило расширить количество примеров тренировочного сета, путем небольших случайных изменений в исходных изображениях, что увеличивало многообразие данных. Как показано на картинке, текстовое описание &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; кодировщиком переводится в векторное представление &amp;lt;tex&amp;gt;\varphi_{t}&amp;lt;/tex&amp;gt; (рис. 15). Раннее векторное представление нелинейно трансформировалось, чтобы получить скрытые условные переменные, которые подавались на вход генератору, однако простарнство значений скрытых переменных имеет большую размерность, что приводило к разрывам в многообразии данных, что не выгодно для генератора. Чтобы избавиться от этого как раз нужно Conditioning Augmentation, которое в отличии от предоставления фиксированных значений переменных выбирает их из нормального распределения &amp;lt;tex&amp;gt;\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}))&amp;lt;/tex&amp;gt;, где среднее значение &amp;lt;tex&amp;gt;\mu(\varphi_{t})&amp;lt;/tex&amp;gt; и ковариация &amp;lt;tex&amp;gt;\Sigma(\varphi_{t}))&amp;lt;/tex&amp;gt; это функции от входного вектора &amp;lt;tex&amp;gt;\varphi_{t}&amp;lt;/tex&amp;gt;. В добавок к уже упомянотому, чтобы сделать многообразие гладким и не переобучиться, нужно добавить регуляризацию, &amp;lt;tex&amp;gt;D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t})) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt; (KL divergence)&amp;lt;ref&amp;gt; [https://ru.wikipedia.org/wiki/Расстояние_Кульбака_—_Лейблера Kullback-Leibler divergence]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
[[File:StackGANProcess.jpg|1000px|thumb|center|Рисунок 15. Процесс обучения StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]&lt;br /&gt;
Stage-I GAN тренирует дискриминатор &amp;lt;tex&amp;gt;D_{0}&amp;lt;/tex&amp;gt; и генератор &amp;lt;tex&amp;gt;G_{0}&amp;lt;/tex&amp;gt; поочередной максимизицаии &amp;lt;tex&amp;gt;L_{D_{0}}&amp;lt;/tex&amp;gt; и минимизации &amp;lt;tex&amp;gt;L_{G_{0}}&amp;lt;/tex&amp;gt;, как указано в уравенинях:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{D_0} = E_{(I_0, t)\sim p_{data}}[\log D_{0}(I_0, \varphi_t)] + E_{z\sim t, t \sim p_{data}}[\log (1 - D_0(G_{0}(z, \hat{c_0}), \varphi_t))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{G_0} = E_{z\sim t, t \sim p_{data}}[\log (1 - D_0(G_{0}(z, \hat{c_0}), \varphi_t))] + \lambda D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Где реальное изображение &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt; и описание текста &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; берутся из реального распределения данных &amp;lt;tex&amp;gt;p_{data}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; шумовой вектор взятого случайно из нормального распределения, &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; параметр регуляризации.&lt;br /&gt;
&lt;br /&gt;
В изображениях с низким разрешенеим, сгенерированные Stage-I GAN, обычно недостает ярких деталей и могут быть искривления форм, некоторые детали изображения также могут быть опущены на первом этапе. Stage-II GAN построен над Stage-I GAN и принимает на вход его выход, и текстовое описание, чтобы исправить и дополнить изображение. Его дискриминатор и генератор тренируются путем поочередной макисимизации &amp;lt;tex&amp;gt;L_D&amp;lt;/tex&amp;gt; и минимизации &amp;lt;tex&amp;gt;L_G&amp;lt;/tex&amp;gt;, как показано в уравнениях: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{D} = E_{(I, t)\sim p_{data}}[\log D(I, \varphi_t)] + E_{s_0\sim p_{G_0}, t \sim p_{data}}[\log (1 - D(G(s_0, \hat{c}), \varphi_t))]&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;L_{G} = E_{s_0\sim p_{G_0}, t \sim p_{data}}[\log (1 - D(G(s_0, \hat{c}), \varphi_t))] + \lambda D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}) || \mathcal{N}(0, I))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s_0 = G_0(z,\hat{c_0})&amp;lt;/tex&amp;gt; результат работы генератора Stage-I GAN и скрытый параметр &amp;lt;tex&amp;gt;\hat{c}&amp;lt;/tex&amp;gt; подаются на вход дискриминатору и генератору Stage-II GAN, при этом на вход не подается случайное значение, как на первой стадии, поскольку хватает подачи случайного &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; на вход Stage-I GAN. При этом Stage-I GAN и Stage-II GAN имеют разные полно-связные слои, чтобы отличаться по среднему значению и стандартному отклонению, таким образом на разных этапах фокусируюемся на разных деталях исходного текста (рис. 14).&lt;br /&gt;
&lt;br /&gt;
==LAPGAN (Laplacian Pyramid of Adversarial Networks)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''LAPGAN''' $-$ генеративная параметрическая модель, представленная пирамидой лапласианов с каскадом сверточных нейронных сетей внутри, которая генерирует изображения постепенно от исходного изображения с низким разрешением к изображению с высоким. На каждом уровне пирамиды обучается сверточная генеративная модель, используя подход порождающих состязательных сетей. Такая стратегия позволяет декомпозировать задачу генерации изображений на последовательность уровней, что упрощает ее решение.&lt;br /&gt;
&lt;br /&gt;
[[File:LAPGANtest.jpg|500px|thumb|right|Рисунок 16. Процедура семплинга для модели LAPGAN. Источник: https://arxiv.org/pdf/1506.05751.pdf]]&lt;br /&gt;
&lt;br /&gt;
Пирамида лапласианов $-$ это линейное обратимое представление изображений, состоящее из набора частотных полос изображений. Пусть &amp;lt;tex&amp;gt;d(\cdot)&amp;lt;/tex&amp;gt; - это операция сжатия изображения размера &amp;lt;tex&amp;gt;j \times j&amp;lt;/tex&amp;gt; так, что новое изображение &amp;lt;tex&amp;gt;d(I)&amp;lt;/tex&amp;gt; имеет размеры &amp;lt;tex&amp;gt;j/2 \times j/2&amp;lt;/tex&amp;gt;, также &amp;lt;tex&amp;gt;u(\cdot)&amp;lt;/tex&amp;gt; - операция расширения такой, что &amp;lt;tex&amp;gt;u(I)&amp;lt;/tex&amp;gt; имеет размеры &amp;lt;tex&amp;gt;2j \times 2j&amp;lt;/tex&amp;gt;. Тогда пирамида гаусианов имеет вид &amp;lt;tex&amp;gt;\mathcal{G}(I) = [I_0, I_1,..., I_k]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_0 = I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;I_k&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; раз выполненное применение &amp;lt;tex&amp;gt;d(\cdot)&amp;lt;/tex&amp;gt;. Коэффициенты &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; на каждом уровне пирамиды лапласианов считаются так:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;h_k = \mathcal{L_k}(I) = \mathcal{G_k}(I) - u(\mathcal{G_{k + 1}}(I)) = I_k - u(I_{k + 1})&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Интуитивно каждый уровень захватывает структуру изображения. Конечный слой пирамиды лапласианов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; это не разница изображений, а низко-частотное представление равное гаусиану &amp;lt;tex&amp;gt;h_k = I_k&amp;lt;/tex&amp;gt;. Реконструкция по пирамиде лапласианов происходит обратным проходом по ней: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;I_k = u(I_{k + 1}) + h_k&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:LAPGANtrain.jpg|500px|thumb|right|Рисунок 17. Процедура обучения модели LAPGAN. Источник: https://arxiv.org/pdf/1506.05751.pdf]]&lt;br /&gt;
Подход представленный в '''LAPGAN''' работает по такому же принципу, только на каждому шаге вместо коэфициентов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; используются генераторы &amp;lt;tex&amp;gt;\{G_0,G_1,...,G_k\}&amp;lt;/tex&amp;gt;, каждый из которых захватывает распределение коэфициентов &amp;lt;tex&amp;gt;h_k&amp;lt;/tex&amp;gt; для реальных изображений на разных уровнях пирамиды лапласиана:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\tilde{I_k} = u(\tilde{I_{k + 1}}) + \tilde{h_k} = u(\tilde{I_{k + 1}}) + G_k(z_k, u(\tilde{I_{k + 1}}))&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Процедура семплинга для нашей модели '''LAPGAN''' (рис. 16). Начинаем с шума &amp;lt;tex&amp;gt;z_3&amp;lt;/tex&amp;gt; и используем генеративную модель &amp;lt;tex&amp;gt;G_3&amp;lt;/tex&amp;gt; для создания &amp;lt;tex&amp;gt;\tilde{I_3}&amp;lt;/tex&amp;gt;. Потом расширяем изображение до &amp;lt;tex&amp;gt;l_2&amp;lt;/tex&amp;gt; для следующиего уровня генерации &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Вместе с еще одним шумом &amp;lt;tex&amp;gt;z_2&amp;lt;/tex&amp;gt; получаем изображение различия &amp;lt;tex&amp;gt;\tilde{I_2}&amp;lt;/tex&amp;gt;. Продолжаем процесс, пока не получим &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Процедура обучения '''LAPGAN''' (рис. 17). Начинаем с изображения &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;64 \times 64&amp;lt;/tex&amp;gt; из тренировчного набора. Берем &amp;lt;tex&amp;gt;I_0 = I &amp;lt;/tex&amp;gt; и сжимаем его(красная стрелка) чтобы получить &amp;lt;tex&amp;gt;I_1&amp;lt;/tex&amp;gt;; затем расширяем его(зеленая стрелка), чтобы получить &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt; низко-частотное изображение &amp;lt;tex&amp;gt;I_0&amp;lt;/tex&amp;gt;; с равной вероятностью используем его для создния либо реального, либо сгенерированного примера для дискриминатора &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;. В случае реального изображения(синяя стрелка) считаем цветовой контраст &amp;lt;tex&amp;gt;h_0 = I_0 - l_0&amp;lt;/tex&amp;gt;, которая подается на вход дискриминатору &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;, для опредления реальное изображение или нет. В случае сгенерированного(розовая стрелка), генеративная сеть &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; получает на вход шум &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt;. Оно генерирует цветовой контраст &amp;lt;tex&amp;gt;\tilde{h_0} = G_0(z_0,l_0)&amp;lt;/tex&amp;gt;, который подается на вход &amp;lt;tex&amp;gt;D_0&amp;lt;/tex&amp;gt;. В обоих случаях дискриминатор также получает &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt; (оранжевая стрелка). Оптимизируя минмакс игру условной порождающей сети &amp;lt;tex&amp;gt;G_0&amp;lt;/tex&amp;gt; учится генерировать реалистичную высоко-частотную структуру &amp;lt;tex&amp;gt;\tilde{h_0}&amp;lt;/tex&amp;gt; с помощью низко-частотного представления &amp;lt;tex&amp;gt;l_0&amp;lt;/tex&amp;gt;. Такая процедура проходит на всех слоях, кроме последнего, где можно уже использовать обычный GAN.&lt;br /&gt;
&lt;br /&gt;
==ControlGAN (Controllable Generative Adversarial Networks)==&lt;br /&gt;
&lt;br /&gt;
[[File:ControlGANConcept.png|350px|thumb|right|Рисунок 18. Концепт модели ControlGAN. Источник: &amp;lt;tex&amp;gt;\href{https://arxiv.org/pdf/1708.00598.pdf}{\text{[x]}}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Контролируемые порождающие состязательные сети (англ. Controllable Generative Adversarial Nets, '''ControlGAN''') $-$ модифицированная версия алгоритма GAN, состоящая из трех нейронных сетей: генератор, дискриминатор, классификатор. Концепт модели ControlGAN (рис. 18). Как и в обычной версии алгоритма, генератор пытается обмануть дискриминатор, и одновременно с этим пытается быть классифицированным как нужный класс в классификаторе.&lt;br /&gt;
&lt;br /&gt;
Хоть CGAN и являются самыми популярными моделями для генерации образцов, зависимых от внешних данных, но лучше они умеют генерировать образцы с заданными ярко отличительными чертами (цвет волос, веснушки), но менее явные детали (форма бровей, сережки) вызывают затруднения (Но более поздний StyleGAN2 справляется и с этой задачей).  C помощью отделения классификатора от дискриминатора, ControlGAN позволяет контролировать черты образцов. К тому же и само качество сгенерированных изображений может быть улучшено засчет того, что такое разделение на три составляющие дает возможность дискриминатору лучше выполнять свою главную задачу.&lt;br /&gt;
&lt;br /&gt;
Более того, аугментация данных может помешать некоторым сетям, например, Auxiliary Classifier GAN (ACGAN) обучаться, хотя сам способ может улучшить качество классификации. К тому же в случае контролируемой генерации нет необходимости размечать тренировочные данные, выбираются желаемые характеристики объектов для генерации, а не условная информация (например, метка объекта).&lt;br /&gt;
&lt;br /&gt;
[[File:ControlGANPrinciple.png|200px|thumb|right|Рисунок 19.&lt;br /&gt;
Принцип работы. Источник:&amp;lt;tex&amp;gt;\href{https://arxiv.org/pdf/1708.00598.pdf}{\text{[x]}}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Иллюстрация принципа работы сети (рис. 19). Зеленые линии $-$ результат работы классификатора; оранжевые $-$ дискриминатора. Серые фигуры $-$ образцы из разных классов. Результат генератора обозначается голубыми участками, которыми он показывает распределение образцов, как и пытается быть классифицированным верно.&lt;br /&gt;
&lt;br /&gt;
ControlGAN минимизирует следующие уравнения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta_D = arg min\{\alpha L_D(t_D, D(x;\delta_D)) + (1 - \alpha)L_D((1 - t_D), D(G(z, l; \delta_G);\delta_D))\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta_D = arg min\{\gamma_t L_C(l, G(z, l; \delta_G)) + L_D(t_D, D(G(z, l; \delta_G);\delta_D)\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta_C = arg min\{L_C(l, x; \delta_C)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;t_D&amp;lt;/tex&amp;gt; $-$ метка для генератора, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; $-$ параметр для дискриминатора, &amp;lt;tex&amp;gt;\gamma_t&amp;lt;/tex&amp;gt; $-$ параметр для входных меток на генератор, &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; $-$ метки образца &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; $-$ отношение между ошибками классификации сгенерированных образцов и изначальных данных. Для тренировки генератора используем оценочное значение &amp;lt;tex&amp;gt;\hat{E}&amp;lt;/tex&amp;gt;, полученное, использующее классификатор и генератор из сети. При значении &amp;lt;tex&amp;gt;\hat{E}&amp;lt;/tex&amp;gt; меньше $1$, генератор обучается на входных данных, иначе обучается генерировать образцы. С помощью этого параметра ControlGAN управляет, чему из вышеперечисленного обучаться. Сам параметр поддерживает постоянной отношение между ошибками. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E = \dfrac{L_C(l,G(z,l;\delta_G))}{L_C(l, x)}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\gamma_t = \gamma_{t - 1} + r \{L_C(l, G(z,l;\delta_G)) - \hat{E} \cdot L_C(l, x)\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; $-$ коэффициент обучения для &amp;lt;tex&amp;gt;\gamma_t&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Порождающие модели|Порождающие модели]]&lt;br /&gt;
*[[:Вариационный автокодировщик|Variational autoencoder (VAE)]]&lt;br /&gt;
*[[:Автокодировщик|Автокодировщик]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Сергей Николенко, Артур Кадурин, Екатерина Архангельская. Глубокое обучение. Погружение в мир нейронных сетей. — «Питер», 2018. — С. 348-360.&lt;br /&gt;
* [https://medium.com/@jonathan_hui/gan-why-it-is-so-hard-to-train-generative-advisory-networks-819a86b3750b Medium | GAN — Why it is so hard to train Generative Adversarial Networks! ]&lt;br /&gt;
* [https://arxiv.org/pdf/1411.1784.pdf CGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1511.06434.pdf DCGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1612.03242.pdf StackGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1506.05751.pdf LAPGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1708.00598.pdf ControlGAN Paper]&lt;br /&gt;
* [https://arxiv.org/pdf/1907.10786.pdf Interpreting the Latent Space Paper]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Порождающие модели]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D1%8B&amp;diff=83343</id>
		<title>Турниры</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%83%D1%80%D0%BD%D0%B8%D1%80%D1%8B&amp;diff=83343"/>
				<updated>2022-09-01T04:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = '''Турнир''' (англ. ''Tournament'') — [[ориентированный граф]], между любой парой различных вершин которого есть ровно одно ориентированное ребро.&lt;br /&gt;
}} &lt;br /&gt;
Турниром из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершин можно изобразить исход игры между &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; людьми, где каждый играет с каждым. Тогда ребро будет ориентировано от выигравшего человека к проигравшему.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Tournament_1_3.png|415px|thumb|left|Турниры из трех вершин]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
==Свойства турниров==&lt;br /&gt;
===Оценка количества турниров в графе===&lt;br /&gt;
Если в турнире опустить ориентацию ребер, то мы получим полный граф. А так как существует два варианта ориентации каждого ребра, то количество турниров в графе из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершин равно &amp;lt;tex dpi=150&amp;gt;2^{\frac{n\cdot(n-1)}{2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
===Транзитивность===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Tournament_transitive.png|300px|thumb|right|Транзитивный турнир с 8 вершинами]]&lt;br /&gt;
Турнир, в котором &amp;lt;tex&amp;gt;(a, b)\land(b, c) \Rightarrow (a, c)&amp;lt;/tex&amp;gt;, называется транзитивным. В транзитивном турнире вершины могут быть полностью упорядочены в порядке достижимости.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=theorem1&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;T=\langle V, E\rangle&amp;lt;/tex&amp;gt; — турнир, &amp;lt;tex&amp;gt;| V| = n&amp;lt;/tex&amp;gt;. Тогда следующие утверждения эквивалентны:&lt;br /&gt;
#&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; транзитивен;&lt;br /&gt;
#&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; не содержит циклов длины &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;&lt;br /&gt;
#&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; ациклический;&lt;br /&gt;
# множества, составленные из &amp;lt;tex&amp;gt;\deg^{-}&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;\deg^{+}&amp;lt;/tex&amp;gt; для каждой вершины &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, есть &amp;lt;tex&amp;gt;\{ 0, 1, 2,..., n - 1\} &amp;lt;/tex&amp;gt;;&lt;br /&gt;
#&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; содержит ровно один гамильтонов путь.&lt;br /&gt;
|proof= &lt;br /&gt;
&amp;lt;tex&amp;gt;1 \Rightarrow 2:&amp;lt;/tex&amp;gt; Пусть существует цикл длины &amp;lt;tex&amp;gt;3: (u, v), (v, w), (w, u). &amp;lt;/tex&amp;gt; Однако по транзитивности должно существовать ребро &amp;lt;tex&amp;gt;(u, w)&amp;lt;/tex&amp;gt;, т.е. между &amp;lt;tex&amp;gt;u, w&amp;lt;/tex&amp;gt; есть &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; противоположно направленных ребра, что невозможно по определению турнира.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2 \Rightarrow 3:&amp;lt;/tex&amp;gt; Пусть в графе содержится цикл длины &amp;lt;tex&amp;gt;k \neq 3&amp;lt;/tex&amp;gt;. Это не может быть цикл длины &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (противоречит определению турнира). Обозначим его вершины в порядке обхода &amp;lt;tex&amp;gt;v_1, v_2, \ldots, v_k, k \geqslant 4&amp;lt;/tex&amp;gt;. Заметим, что т.к. нет циклов длины &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, выполнена транзитивность (в противном случае существовали бы ребра &amp;lt;tex&amp;gt;(u, v), (v, w), (w, u)&amp;lt;/tex&amp;gt;). Докажем по индукции, что существует ребро &amp;lt;tex&amp;gt;(v_1, v_{k - 1}).&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''База индукции''' &amp;lt;tex&amp;gt;k = 3&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;(v_1, v_2) , (v_2, v_3) \in E \Rightarrow (v_1, v_3) \in E &amp;lt;/tex&amp;gt; (по транзитивности).  &lt;br /&gt;
&lt;br /&gt;
'''Переход индукции''' Пусть доказано для всех &amp;lt;tex&amp;gt;i &amp;lt; k - 1&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;(v_1, v_i) \in E&amp;lt;/tex&amp;gt;, также известно, что &amp;lt;tex&amp;gt;(v_i, v_{i+1}) \in E&amp;lt;/tex&amp;gt;, тогда по транзитивности &amp;lt;tex&amp;gt;(v_1, v_{i+1}) \in E&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в транзитивном турнире содержится цикл длины &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; — противоречие (см. предыдущий пункт).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;3 \Rightarrow 4: &amp;lt;/tex&amp;gt; Обозначим множество значений степеней исхода как &amp;lt;tex&amp;gt;Deg^{+}(T)&amp;lt;/tex&amp;gt;. Докажем индукцией по &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''База индукции''' &amp;lt;tex&amp;gt;n = 1&amp;lt;/tex&amp;gt;: верно, т.к. есть одна вершина степени &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Переход индукции''' Пусть доказано для &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;. В ациклическом графе существует сток &amp;lt;tex&amp;gt;t, deg^{+}t = 0&amp;lt;/tex&amp;gt;. Рассмотрим граф &amp;lt;tex&amp;gt;T-t&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;Deg^{+}(T - t) = \{0, 1, \ldots, n - 2\}&amp;lt;/tex&amp;gt; . Т.к. из каждой &amp;lt;tex&amp;gt;v \in V \setminus \{t\}&amp;lt;/tex&amp;gt; ведет одно ребро в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; Deg^{+}(T)=\{deg^{+}t\} \cup \{x + 1 \mid x \in Deg^{+}(T -t)\} = \{0, 1, \ldots, n - 1\}&amp;lt;/tex&amp;gt;. Для степеней захода можно доказать аналогично, рассмотрев исток вместо стока.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;4 \Rightarrow 5: &amp;lt;/tex&amp;gt; По [[Теорема Редеи-Камиона|теореме Редеи-Камиона]], в любом турнире есть гамильтонов путь, докажем индукцией по &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, что этот путь единственный.&lt;br /&gt;
&lt;br /&gt;
'''База индукции''' &amp;lt;tex&amp;gt;n  = 1&amp;lt;/tex&amp;gt;: верно, путь из одной вершины.&lt;br /&gt;
&lt;br /&gt;
'''Переход индукции''' Рассмотрим вершину &amp;lt;tex&amp;gt;s: deg^{-}(s) = 0&amp;lt;/tex&amp;gt;. Она будет первой в гамильтоновом пути (иначе мы в нее не зайдем). Рассмотрим граф &amp;lt;tex&amp;gt;T - s&amp;lt;/tex&amp;gt;. Т.к. &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; была соединена со всеми его вершинами, их степени меньше на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; соответствующих степеней в исходном турнире, значит &amp;lt;tex&amp;gt;Deg^{-}(T-s)=\{0,1, \ldots, n - 2\}&amp;lt;/tex&amp;gt;, следовательно в &amp;lt;tex&amp;gt;T-s&amp;lt;/tex&amp;gt; существует единственный гамильтонов путь &amp;lt;tex&amp;gt;v_1, v_2, \ldots v_{n -1}&amp;lt;/tex&amp;gt; (по предположению). Пусть существуют &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; гамильтонова пути, начинающиеся на &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, но тогда существуют 2 пути в &amp;lt;tex&amp;gt;T-s&amp;lt;/tex&amp;gt; {{---}} противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;5 \Rightarrow 1: &amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;P=v_1, v_2, \ldots, v_n&amp;lt;/tex&amp;gt; — единственный гамильтонов путь. Пусть найдется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; — наименьший индекс такой, что в вершину &amp;lt;tex&amp;gt;v_m&amp;lt;/tex&amp;gt; идет ребро из вершины с большим индексом, а &amp;lt;tex&amp;gt;v_k&amp;lt;/tex&amp;gt; — вершина с наибольшим индексом, из которой ребро ведет в &amp;lt;tex&amp;gt;v_m&amp;lt;/tex&amp;gt;. Возможно несколько случаев:&lt;br /&gt;
# &amp;lt;tex&amp;gt; m \neq 1, k \neq n: &amp;lt;/tex&amp;gt; Из &amp;lt;tex&amp;gt;v_{m -1}&amp;lt;/tex&amp;gt; ведет ребро в &amp;lt;tex&amp;gt;v_{m+1}&amp;lt;/tex&amp;gt; (по минимальности &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;), а из &amp;lt;tex&amp;gt;v_m&amp;lt;/tex&amp;gt; ведет ребро в &amp;lt;tex&amp;gt;v_{k +1}&amp;lt;/tex&amp;gt; (по максимальности &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;). Тогда будет существовать еще один гамильтонов путь &amp;lt;tex&amp;gt;P_1 = v_1, \ldots, v_{m-1}, v_{m+1}, \ldots, v_{k}, v_m, v_{k+1}, \ldots, v_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; m \neq 1, k = n: &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;P_1 = v_1, \ldots, v_{m-1}, v_{m+1}, \ldots, v_{n}, v_m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; m = 1, k \neq n:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;P_1 = v_2, \ldots, v_{k}, v_1, v_{k+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt; m = 1, k = n:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;P_1 = v_2, \ldots, v_n, v_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
'''Замечание''' Может достигаться равенство &amp;lt;tex&amp;gt;m + 1 = n&amp;lt;/tex&amp;gt;, в этом случае нужно исключить из пути &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; последовательных вхождения &amp;lt;tex&amp;gt;v_n&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Во всех случаях получаем противоречие с единственностью гамильтонова пути, значит не существует такого &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, т.е &amp;lt;tex&amp;gt;(v_i, v_j) \in E \Leftrightarrow i &amp;lt; j&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;\forall i, j, k: 1 \leqslant i, j, k \leqslant n&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (v_i, v_j) \in E \land (v_j, v_k) \in E \Rightarrow i &amp;lt; j \land j &amp;lt; k \Rightarrow (v_i, v_k) \in E &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Теория Рамсея===&lt;br /&gt;
Транзитивные турниры играют существенную роль в [[Теория_Рамсея | теории Рамсея]], изучающей условия, при которых в произвольно формируемых математических объектах обязан появиться некоторый порядок. В частности, любой турнир с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами содержит транзитивный подтурнир с &amp;lt;tex&amp;gt;1+\lfloor\log_2 n\rfloor&amp;lt;/tex&amp;gt; вершинами. Для его построения выберем любую вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; как часть этого подтурнира и построим подтурнир рекурсивно на множестве либо входящих соседей вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, либо на множестве исходящих соседей, в зависимости от того, какое множество больше. &lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конденсация===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement = Конденсация любого турнира является транзитивным турниром. &lt;br /&gt;
|proof = Рассмотрим &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; компоненты сильной связности &amp;lt;tex&amp;gt;U, V&amp;lt;/tex&amp;gt;, найдутся &amp;lt;tex&amp;gt;u \in U, v \in V: (u, v) \in E&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;(v, u) \in E &amp;lt;/tex&amp;gt;, значит в конденсации есть либо ребро &amp;lt;tex&amp;gt;(U,V)&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;(V,U)&amp;lt;/tex&amp;gt;. Т.к. мы рассмотрели произвольную пару вершин конденсации турнира, она является турниром. Конденсация любого орграфа ациклична, а по доказанной [[#theorem1|теореме]], это означает, что она транзитивна. &lt;br /&gt;
}}&lt;br /&gt;
Таким образом, даже если турнир не является транзитивным, сильно связанные компоненты турнира могут быть [[Отношение порядка|вполне упорядочены]]. В самом деле, по [[#theorem1|теореме]], в турнире существует гамильтонов путь, значит вершины могут быть упорядочены по своим позициям в этом пути.&lt;br /&gt;
&lt;br /&gt;
===Сильно связные турниры===&lt;br /&gt;
{{Определение|definition = Турнир называется [[Отношение связности, компоненты связности#sc_def |сильно связным]], если из любой вершины существуют пути до всех других.}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Турнир называется [[Гамильтоновы графы | гамильтоновым]], если он содержит гамильтонов цикл.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Tournament_2.png|380px|thumb|right|Негамильтонов турнир]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Не все турниры гамильтоновы. Определение не исключает существование вершины с &amp;lt;tex&amp;gt;\deg^{-}&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;\deg^{+}&amp;lt;/tex&amp;gt; равной нулю — в первую нельзя войти, а из второй — выйти. Однако отсутствие таких вершин не означает, что турнир гамильтонов (пример — на рисунке справа).&lt;br /&gt;
&lt;br /&gt;
[[Теорема Редеи-Камиона]] устанавливает два следующих факта:&lt;br /&gt;
# Все турниры полугамильтоновы.&lt;br /&gt;
# Турнир гамильтонов тогда и только тогда, когда он сильно связен.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Гамильтоновы графы]]&lt;br /&gt;
* [[Теорема Редеи-Камиона]]&lt;br /&gt;
* [http://epubs.siam.org/doi/abs/10.1137/0403002 Поиск гамильтонова цикла за &amp;lt;tex&amp;gt;O(n\cdot log(n))&amp;lt;/tex&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. '''Дискретная математика: графы, матроиды, алгоритмы''' — НИЦ РХД, 2001. — ISBN 5-93972-076-5&lt;br /&gt;
* [[wikipedia:Tournament_(graph_theory) | Wikipedia {{---}} Турнир]]&lt;br /&gt;
* [http://www-math.ucdenver.edu/~wcherowi/courses/m4408/gtln12.html]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Обходы графов]]&lt;br /&gt;
[[Категория: Гамильтоновы графы]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_LZSS&amp;diff=83342</id>
		<title>Алгоритм LZSS</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_LZSS&amp;diff=83342"/>
				<updated>2022-09-01T04:44:25Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Эта версия [[Алгоритмы LZ77 и LZ78|алгоритма LZ77]] была разработана Сторером (''Storer'') и Сжимански (''Szymanski'') в 1982. Базовый алгоритм был улучшен по трем направлениям:&lt;br /&gt;
*буфер, содержащий еще не закодированные символы, сохраняется в циклической [[Очередь|очереди]]&lt;br /&gt;
*буфер поиска (словарь) хранитсяся в виде [[Дерево поиска, наивная реализация|двоичного дерева поиска]]&lt;br /&gt;
*метки имеют два поля, а не три&lt;br /&gt;
&lt;br /&gt;
== Модель данных == &lt;br /&gt;
&lt;br /&gt;
===Реализация &amp;quot;скольжения&amp;quot;===&lt;br /&gt;
Как и в [[Алгоритмы LZ77 и LZ78|алгоритме LZ77]], в этом алгоритме используется обычный символьный буфер для хранения содержимого окна. В целях повышения эффективности &amp;quot;скольжения&amp;quot; окна по содержимому сообщения используется циклический буфер, размер которого идентичен размеру скользящего окна. Такой буфер организован на физически сплошном участке памяти, а не на реальном сдвиге содержимого окна, как в LZ77.  Скольжение окна в таком буфере сводится к циклическому перемещению границы между его задней и передней частями (текущей обрабатываемой позиции) в пределах буфера. При этом добавление новой порции информации в переднюю часть окна автоматически означает удаление идентичной по длине порции из его задней части.&lt;br /&gt;
&lt;br /&gt;
Размер циклического буфера равен степени двойки, и стандартная для циклического буфера операция &amp;quot;смещение по модулю размер&amp;quot;, может быть заменена побитовой логической операцией, что еще больше повышает эффективность.&lt;br /&gt;
&lt;br /&gt;
===Организация поиска в словаре===&lt;br /&gt;
&lt;br /&gt;
Скорость кодирования [[Алгоритмы LZ77 и LZ78|LZ77]] сильно зависит от того, каким образом  осуществляется поиск совпадающей подстроки в словаре. В LZSS при кодировании поддерживается бинарное лексикографически упорядоченное дерево поиска, в котором каждому узлу соответствует  определенная строка словаря длины &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; (максимальная длина совпадения). В дереве  хранятся все подстроки словарной части размером длины буфера. &lt;br /&gt;
====Порядок изменения дерева поиска====&lt;br /&gt;
Кодер изучает буфер поиска, создавая  &amp;lt;tex&amp;gt;T &amp;lt;/tex&amp;gt; строк с числом символов  &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; , которые помещены в двоичное лексикографически упорядоченное дерево поиска вместе с их смещениями.&lt;br /&gt;
На дереве все время находится одинаковое число &amp;lt;tex&amp;gt;T &amp;lt;/tex&amp;gt; узлов или строк, поскольку при его обновлении удаляется и добавляется одно и то же число строк, &amp;lt;tex&amp;gt;T=S-L+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если во время кодирования  случается совпадение длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то дерево надо перестроить путем удаления &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; строк и добавления &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;  строк.&lt;br /&gt;
&lt;br /&gt;
Удаляться будут первые  &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; строк буфера поиска до его сдвига, а добавляться будут последние  &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; строк этого буфера после сдвига.&lt;br /&gt;
&lt;br /&gt;
Простейшая процедура обновления дерева состоит в приготовлении строк из начала буфера, их поиска и удаления. Потом необходимо сдвинуть буфер на одну позицию вправо (или переместить данные на одну позицию влево), приготовить строку из последних &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;   символов буфера поиска и добавить ее на дерево. Это следует повторить  &amp;lt;tex&amp;gt;k&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;
Покажем на примере, как в алгоритме LZSS происходит трансформация двоичного дерева, в виде которого хранится словарь.&lt;br /&gt;
&lt;br /&gt;
====Пример====&lt;br /&gt;
Пусть входной файл содержит следующую последовательность: &amp;quot;sid_eastman_clumsily_teases_sea_sick_seals&amp;quot;. Для простоты предположим, что окно (желтые ячейки в таблице) состоит из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt;-байтного буфера поиска и &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;-байтного буфера, содержащего еще не закодированные символы. После ввода первых &amp;lt;tex&amp;gt;16+5&amp;lt;/tex&amp;gt;   символов скользящее окно выглядит так:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;                          &lt;br /&gt;
 |style=&amp;quot;background:#FFCC00&amp;quot; |sid_eastman_clum &lt;br /&gt;
 |style=&amp;quot;background:#FFCC00&amp;quot;|sily_&lt;br /&gt;
 |teases_sea_sick_seals&lt;br /&gt;
 |}  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
причем подпоследовательность teases_sea_sick_seals ждет своей очереди на входе.&lt;br /&gt;
&lt;br /&gt;
Кодер изучает буфер поиска, создавая двенадцать строк по пять символов (см. табл.1) (их двенадцать, так как &amp;lt;tex&amp;gt;12=16-5+1&amp;lt;/tex&amp;gt;), которые помещены на двоичное дерево поиска вместе с их смещениями.&lt;br /&gt;
&lt;br /&gt;
'''Таблицы 1 и 2. Строки по пять символов.'''&lt;br /&gt;
{|&lt;br /&gt;
  |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! colspan=&amp;quot;2&amp;quot; |Таблица 1&lt;br /&gt;
 |-&lt;br /&gt;
 | sid_e&lt;br /&gt;
 |16&lt;br /&gt;
 |-&lt;br /&gt;
 |id_ea	&lt;br /&gt;
 |15&lt;br /&gt;
 |-&lt;br /&gt;
 |d_eas&lt;br /&gt;
 |14&lt;br /&gt;
 |-&lt;br /&gt;
 |_east&lt;br /&gt;
 |13&lt;br /&gt;
 |-&lt;br /&gt;
 |eastm&lt;br /&gt;
 |12&lt;br /&gt;
 |-&lt;br /&gt;
 |astma&lt;br /&gt;
 |11&lt;br /&gt;
 |-&lt;br /&gt;
 |stmаn&lt;br /&gt;
 |10&lt;br /&gt;
 |-&lt;br /&gt;
 |tman_&lt;br /&gt;
 |09&lt;br /&gt;
 |-&lt;br /&gt;
 |man_c&lt;br /&gt;
 |08&lt;br /&gt;
 |-&lt;br /&gt;
 |an_cl&lt;br /&gt;
 |07&lt;br /&gt;
 |-&lt;br /&gt;
 |n_clu&lt;br /&gt;
 |06&lt;br /&gt;
 |-&lt;br /&gt;
 |_clum&lt;br /&gt;
 |05&lt;br /&gt;
 |}&lt;br /&gt;
  | || &lt;br /&gt;
  |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! colspan=&amp;quot;2&amp;quot; |Таблица 2&lt;br /&gt;
 |-&lt;br /&gt;
 |d_eas&lt;br /&gt;
 |16&lt;br /&gt;
 |-&lt;br /&gt;
 |_east&lt;br /&gt;
 |15&lt;br /&gt;
 |-&lt;br /&gt;
 |eastm&lt;br /&gt;
 |14&lt;br /&gt;
 |-&lt;br /&gt;
 |astma&lt;br /&gt;
 |13&lt;br /&gt;
 |-&lt;br /&gt;
 |stmаn&lt;br /&gt;
 |12&lt;br /&gt;
 |-&lt;br /&gt;
 |tman_&lt;br /&gt;
 |11&lt;br /&gt;
 |-&lt;br /&gt;
 |man_c&lt;br /&gt;
 |10&lt;br /&gt;
 |-&lt;br /&gt;
 |an_cl&lt;br /&gt;
 |09&lt;br /&gt;
 |-&lt;br /&gt;
 |n_clu&lt;br /&gt;
 |08&lt;br /&gt;
 |-&lt;br /&gt;
 |_clum&lt;br /&gt;
 |07&lt;br /&gt;
 |-&lt;br /&gt;
 | clums&lt;br /&gt;
 |06&lt;br /&gt;
 |-&lt;br /&gt;
 | lumsi&lt;br /&gt;
 |05&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Первым символом в буфере, содержащем еще не закодированные символы, является s, поэтому кодер ищет на дереве строки, начинающиеся на s. Он находит две строки со смещениями &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;, но первая из них, sid_e, имеет более длинное совпадение.&lt;br /&gt;
Бывают случаи, когда строка на дереве полностью совпадает с содержимым буфера, содержащего еще не закодированные символы. Тогда кодер может искать дальнейшие совпадения. В принципе, длина совпадения может быть &amp;lt;tex&amp;gt;L-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В нашем примере длина совпадения равна &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;, поэтому кодер выдает метку &amp;lt;tex&amp;gt;\langle&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;16,2&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\rangle&amp;lt;/tex&amp;gt;. Теперь кодер должен переместить скользящее окно на две позиции вправо и перестроить дерево. Новое окно выглядит следующим образом:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  |si                         &lt;br /&gt;
  |style=&amp;quot;background:#FFCC00&amp;quot;|d_eastman_clumsi&lt;br /&gt;
  |style=&amp;quot;background:#FFCC00&amp;quot;|ly_te&lt;br /&gt;
  |ases_sea_sick_seals&lt;br /&gt;
 |} 		&lt;br /&gt;
С дерева необходимо удалить строки sid_e и id_ea и вставить новые строки clums и lumsi (см. табл.2).&lt;br /&gt;
Для того чтобы найти эти строки, можно просмотреть все вершины дерева и выбрать те пары, где разница между смещением и длиной буфера не превосходит длины части совпадения.&lt;br /&gt;
В данном примере длина буфера {{---}} &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; символов, часть совпадения {{---}} &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; символа, поэтому нужно найти смещения где разница между ним и длиной буфера не превосходит &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;. Это смещения &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;. Теперь для каждой строки в дереве нужно удалить первые два символа и прибавить следующие два символа.&lt;br /&gt;
&lt;br /&gt;
===Оптимизация памяти===&lt;br /&gt;
&lt;br /&gt;
У алгоритма [[Алгоритмы LZ77 и LZ78|LZ77]] возникают проблемы с самим сжатием. Они появляются, когда кодер не может найти совпадающую подстроку в словаре и выдает стандартный 3-компонентный код, пытаясь закодировать один символ.  Такое кодирование существенно понижает производительность алгоритма.&lt;br /&gt;
&lt;br /&gt;
Метка LZSS состоит только из смещения и длины. Проблема отсутствия совпадений в словаре в алгоритме LZSS решается путем введения дополнительного служебного бита (со значением &amp;quot;0&amp;quot; для незакодированных символов и &amp;quot;1&amp;quot; для кодовых комбинаций), значение которого определяет, является ли следующая за ним кодовая комбинация кодовой парой или она представляет собой незакодированный символ в его исходном представлении. Такая техника позволяет записывать символы в явном виде, когда соответствующий им код имеет большую длину, а также позволяет обрабатывать ни разу не встреченные до текущего момента символы.&lt;br /&gt;
&lt;br /&gt;
== Кодер LZSS ==&lt;br /&gt;
===Инициализация===&lt;br /&gt;
Для того чтобы кодер мог начать работать, необходимо загрузить буфер очередными символами сообщения и проинициализировать дерево. Для этого в дерево вставляется содержимое буфера.&lt;br /&gt;
===Основной цикл работы===&lt;br /&gt;
Алгоритм последовательно выполняет следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Кодирует содержимое буфера.&lt;br /&gt;
# Считывает очередные символы в буфер, удаляя при необходимости наиболее &amp;quot;старые&amp;quot; строки из словаря.&lt;br /&gt;
# Вставляет в дерево новые строки, соответствующие считанным символам.&lt;br /&gt;
&lt;br /&gt;
===Завершение работы===&lt;br /&gt;
Для того чтобы декодер смог вовремя остановиться, декодируя сжатое сообщение, кодер помещает в сжатый файл специальный символ &amp;quot;КОНЕЦ ФАЙЛА&amp;quot; после того, как он обработал все символы сообщения.&lt;br /&gt;
&lt;br /&gt;
===Пример кодирования===&lt;br /&gt;
Закодировать по алгоритму LZSS строку &amp;quot;КРАСНАЯ КРАСКА&amp;quot;.&lt;br /&gt;
В данном примере один символ кодируется восемью битами. Поэтому после префикса &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; декодер считывает следующие &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; бит.&lt;br /&gt;
После префикса &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; хранится пара  &amp;lt;tex&amp;gt;\langle&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;offset,length&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\rangle&amp;lt;/tex&amp;gt;. Так как смещение и длина не превосходят длины словаря, то размер пары &amp;lt;tex&amp;gt;\langle&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;offset,length&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\rangle&amp;lt;/tex&amp;gt; равен удвоенному количеству бит, требуемых для хранения длины словаря.&lt;br /&gt;
Длина словаря в данном примере &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;. Поэтому после префикса &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; декодер считывает &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt; бит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:540e164e73fca7dcfc2b6c970b135e24.png‎]]&lt;br /&gt;
&lt;br /&gt;
==Декодер LZSS==&lt;br /&gt;
&lt;br /&gt;
Алгоритм LZSS, вообще говоря, является очень асимметричным. Если процедура сжатия достаточно сложна и совершает большой объем работы при обработке каждого символа сжимаемого сообщения, то декодер LZSS тривиально прост и может работать со скоростью, приближающейся к скорости процедуры обычного копирования информации.&lt;br /&gt;
&lt;br /&gt;
Декодер читает один бит сжатой информации и решает — это символ или пара &amp;lt;tex&amp;gt;\langle&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;offset,length&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\rangle&amp;lt;/tex&amp;gt;. Если это символ, то следующие &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; бит выдаются как раскодированный символ и помещаются в скользящее окно. Иначе, если это не закодированный конец файла, то соответствующее количество символов словаря помещается в окно и выдается в раскодированном виде. Поскольку это все, что делает декодер, понятно, почему процедура декодирования работает так быстро.&lt;br /&gt;
&lt;br /&gt;
===Пример декодирования===&lt;br /&gt;
&lt;br /&gt;
LZSS, длина словаря — &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт (символов). Коды сжатого сообщения —&lt;br /&gt;
[[Файл:Кодисходного_сообщения_png.png‎ ]] &lt;br /&gt;
&lt;br /&gt;
[[Файл:773105d8ce08592398f078963ff920ff.png‎ ]]&lt;br /&gt;
&lt;br /&gt;
==Практическое использование алгоритма LZSS==&lt;br /&gt;
&lt;br /&gt;
Так как алгоритм LZSS не является запатентованным, он широко используется. LZSS можно удачно скомбинировать с методами  сжатия, основанными на переменной длине кода ([[Алгоритм Хаффмана]], алгоритм Шеннона-Фано (''Shannon-Fano'')) &lt;br /&gt;
например в PKZIP V.1.0 использован LZSS в комбинации с алгоритмом Шеннона-Фано, а в &lt;br /&gt;
ARJ —  LZSS с [[Алгоритм Хаффмана|алгоритмом Хаффмана]].&lt;br /&gt;
&lt;br /&gt;
== См.также ==&lt;br /&gt;
* [[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
* [[Алгоритм LZW]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Д.Сэломон. Сжатие данных, изображений и звука - Москва: Техносфера, 2004. - с.368, стр. 88.&lt;br /&gt;
&lt;br /&gt;
* Семенюк В. В. Экономное кодирование дискретной информации. – СПб.: СПбГИТМО (ТУ), 2001. – 115 с., стр.60-62.&lt;br /&gt;
&lt;br /&gt;
* Лидовский В.В. Теория информации: учебное пособие. – Москва: 2003. – 112 с., с. 37-38.&lt;br /&gt;
&lt;br /&gt;
*[http://mf.grsu.by/UchProc/livak/po/comprsite/theory_lzss.html/ Обзор алгоритмов сжатия без потерь. Алгоритм LZSS]&lt;br /&gt;
&lt;br /&gt;
*[http://www.intuit.ru/studies/courses/2256/140/lecture/3914?page=1/ Подстановочные или словарно-ориентированные алгоритмы сжатия информации. Методы Лемпела-Зива]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы сжатия ]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B1%D0%BB%D0%B8%D0%B7%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%B2%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83341</id>
		<title>Приблизительный подсчет числа вхождений</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B1%D0%BB%D0%B8%D0%B7%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%B2%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83341"/>
				<updated>2022-09-01T04:44:19Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Задача о '''приблизительном подсчете числа вхождений''': пусть дан некоторый поток данных &amp;lt;math&amp;gt;S = s_1, s_2, \dots, s_i, \dots, \: s_j \in U&amp;lt;/math&amp;gt;. Необходимо подсчитать, сколько раз элемент &amp;lt;math&amp;gt;x \in U&amp;lt;/math&amp;gt; встретился в потоке &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; на момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;\sum_{j=1}^{t} I_{s_j = x}&amp;lt;/math&amp;gt;. В данной статье рассмотрены две структуры данных, позволяющие решить эту задачу: Count-Min Sketch и Count Sketch. Обе структуры данных были предложены в начале 00-х в ответ на необходимость сбора информации об увеличившемся потоке интернет-трафика.&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим постановку задачи о потоке данных. Пусть дан вектор &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Пусть состояние вектора в момент &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; задано как &amp;lt;math&amp;gt;a(t) = [a_1(t), a_2(t), \dots, a_n(t)]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;a(0) = [0, 0, \dots, 0]&amp;lt;/math&amp;gt;. Зададимся потоком пар &amp;lt;math&amp;gt;(i_1, c_1), (i_2, c_2), \dots, (i_m, c_m), \dots, 1 \leq i_m \leq n&amp;lt;/math&amp;gt; и будем обновлять вектор &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; a_{i_t}(t) \leftarrow a_{i_t}(t-1) + c_t, &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; a_{i’}(t) \leftarrow a_{i’}(t-1)  \:\: \forall i’ \neq i_t. &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
В любой момент времени может поступить запрос о подсчете некоторой функции от &amp;lt;math&amp;gt;a(t)&amp;lt;/math&amp;gt;. Для задачи о приблизительном подсчете числа вхождений нас интересует запрос об оценке значения &amp;lt;math&amp;gt;a_{i}(t)&amp;lt;/math&amp;gt; для заданного &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; в момент времени &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; (англ. point query).&lt;br /&gt;
&lt;br /&gt;
Для удобства &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; будет опущена и мы будем использовать &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt; для обращения к текущему состоянию вектора. &lt;br /&gt;
&lt;br /&gt;
Простым решением задачи может быть хранение вектора &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; в явном виде. Однако при больших &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; этот подход становится невыгодным из-за большего количества памяти, требуемого для хранения вектора &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;. Хорошее решение данной задачи должно обладать следующими свойствами:&lt;br /&gt;
* оно должно требовать &amp;lt;math&amp;gt;O(polylog \: n)&amp;lt;/math&amp;gt; памяти;&lt;br /&gt;
* обновление &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; и обработка запросов должны выполняться быстро и быть достаточно точными&amp;lt;ref name=&amp;quot;smsketch&amp;quot;&amp;gt;Graham Cormode, S. Muthukrishnan, &amp;quot;An Improved Data Stream Summary: The Count-Min Sketch and its Applications&amp;quot;, 2003&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ниже рассмотрены две структуры данных, позволяющие решить задачу о приблизительном подсчете числа вхождений, которые соответствуют этим требованиям.&lt;br /&gt;
&lt;br /&gt;
== Count-Min Sketch ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:cm_sketch.png|thumb|500px| Рисунок 1 — Процедура обновления Count-Min Sketch.]]&lt;br /&gt;
&lt;br /&gt;
'''Count-Min Sketch''' (CM Sketch) {{---}} это вероятностная структура данных, предложенная Г. Кормоудом (англ. G. Cormode) и С. Мутукришнаном (англ. S. Muthukrishnan) в 2003 году. Рассмотренный в этом разделе подход позволяет оценить &amp;lt;math&amp;gt;a_{i}&amp;lt;/math&amp;gt; при &amp;lt;math&amp;gt;c_t \geq 0 \:\: \forall t&amp;lt;/math&amp;gt;. CM Sketch может также быть применен для оценки &amp;lt;math&amp;gt;a_{i}&amp;lt;/math&amp;gt; когда существуют &amp;lt;math&amp;gt;c_t &amp;lt; 0&amp;lt;/math&amp;gt;, а также для алгоритмов оценки скалярного произведения (англ. inner product query) и суммы промежутка величин &amp;lt;math&amp;gt;a_{l}, a_{l+1}, \dots, a_{r}&amp;lt;/math&amp;gt; (англ. range query)&amp;lt;ref name=&amp;quot;smsketch&amp;quot;&amp;gt;Graham Cormode, S. Muthukrishnan, &amp;quot;An Improved Data Stream Summary: The Count-Min Sketch and its Applications&amp;quot;, 2003&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Структура данных.''' CM Sketch с параметрами &amp;lt;math&amp;gt;(\varepsilon, \delta)&amp;lt;/math&amp;gt; — это структура данных, которая включает в себя двумерный массив шириной &amp;lt;math&amp;gt;w = \lceil \frac{e}{\varepsilon} \rceil&amp;lt;/math&amp;gt; и глубиной &amp;lt;math&amp;gt;d = \lceil \ln \frac{1}{\delta} \rceil&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;count[1, 1], count[1, 2], \dots, count [d, w]&amp;lt;/math&amp;gt;, а также &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; попарно независимых [[Хеш-таблица|хэш-функций]] из [[Универсальное семейство хеш-функций|универсального семейства]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; h_1, h_2, \dots, h_d : \{1, \dots, n\} \rightarrow \{1, \dots, w\}. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В начале работы массив инициализируется нулями.&lt;br /&gt;
&lt;br /&gt;
'''Обновление.''' При получении из потока пары &amp;lt;math&amp;gt;(i_t, c_t)&amp;lt;/math&amp;gt;, т.е. при увеличении величины &amp;lt;math&amp;gt;a_{i_t}&amp;lt;/math&amp;gt; на значение &amp;lt;math&amp;gt;c_t&amp;lt;/math&amp;gt;, для каждой строки &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; двумерного массива &amp;lt;math&amp;gt;count&amp;lt;/math&amp;gt; мы увеличиваем значение соответствующего счетчика, заданного хэш-функцией &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; count[j, h_j(i_t)] \leftarrow count[j, h_j(i_t)] + c_t \:\: \forall j. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная процедура описывается на рис. 1.&lt;br /&gt;
&lt;br /&gt;
'''Ответ на запрос.''' Оценка значения &amp;lt;math&amp;gt;a_{i}&amp;lt;/math&amp;gt; подсчитывается как &amp;lt;math&amp;gt;\hat{a}_i = \min_j count[j, h_j(i)]&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;smsketch&amp;quot;&amp;gt;Graham Cormode, S. Muthukrishnan, &amp;quot;An Improved Data Stream Summary: The Count-Min Sketch and its Applications&amp;quot;, 2003&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=1&lt;br /&gt;
|statement=&lt;br /&gt;
Оценка &amp;lt;tex&amp;gt;\hat{a}_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;a_i \leq \hat{a}_i&amp;lt;/tex&amp;gt;, и с вероятностью как минимум &amp;lt;tex&amp;gt;1 - \delta&amp;lt;/tex&amp;gt; удовлетворяет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \hat{a}_i \leq a_i + \varepsilon ||\mathbf{a}||_1. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|proof=Рассмотрим хэш-функцию &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt; и счетчик &amp;lt;math&amp;gt;count[j, h_j(i)]&amp;lt;/math&amp;gt;, в который записываются обновления для элемента &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt;. Так как мы рассматриваем случай для &amp;lt;math&amp;gt;c_t \geq 0 \:\:\forall t&amp;lt;/math&amp;gt; и так как может существовать &amp;lt;math&amp;gt;k: h_j(i) = h_j(k), k \neq i&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;a_i \leq \hat{a}_i&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Оценим размер ошибки, накапливающийся в &amp;lt;math&amp;gt;count[j, h_j(i)]&amp;lt;/math&amp;gt;. Зададимся индикаторной величиной &amp;lt;math&amp;gt;I_{i,j,k}&amp;lt;/math&amp;gt;, равной единице если &amp;lt;math&amp;gt;(i \neq k) \land (h_j(i) = h_j(k))&amp;lt;/math&amp;gt; и нулю в противном случае. Так как хэш-функции попарно независимы, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; E(I_{i,j,k}) = Pr[h_j(i) = h_j(k)] \leq \frac{1}{range(h_j)} \leq \frac{\varepsilon}{e}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;range(h_j)&amp;lt;/math&amp;gt; — размер интервала значений, которые может принимать хэш-функция &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt;. Обозначим размер ошибки, накапливающийся в &amp;lt;math&amp;gt;count[j, h_j(i)]&amp;lt;/math&amp;gt; как случайную величину &amp;lt;math&amp;gt;X_{i,j} = \sum_{k=1}^{n} I_{i,j,k}a_k&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;count[j, h_j(i)] = a_i + X_{i,j}&amp;lt;/math&amp;gt;. В таком случае &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; E(X_{i,j}) = E(\sum_{k=1}^{n} I_{i,j,k}a_k) = \sum_{k=1}^{n} E(I_{i,j,k}a_k) = \sum_{k=1}^{n} a_k E(I_{i,j,k}) \leq \frac{\varepsilon}{e} \sum_{k=1}^{n} a_k = \frac{\varepsilon}{e} || \mathbf{a} ||_1. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Наконец, докажем что &amp;lt;math&amp;gt;Pr[\hat{a}_i &amp;gt; a_i + \varepsilon ||\mathbf{a}||_1]&amp;lt;/math&amp;gt; не превышает &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;, из чего следует, что &amp;lt;math&amp;gt;Pr[\hat{a}_i \leq a_i + \varepsilon ||\mathbf{a}||_1] &amp;gt; 1 - \delta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Pr[\hat{a}_i &amp;gt; a_i + \varepsilon ||\mathbf{a}||_1] = Pr[\forall j \: count[j, h_j(i)] &amp;gt; a_i + \varepsilon ||\mathbf{a}||_1]  =  Pr[\forall j \: a_i + X_{i,j} &amp;gt; a_i + \varepsilon ||\mathbf{a}||_1]  = Pr[\forall j \: X_{i,j} &amp;gt; e E(X_{i,j})] &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=^{(1)} Pr[X_{i,1} &amp;gt; e E(X_{i,1}) \times \dots \times X_{i,d} &amp;gt; e E(X_{i,d})] \leq^{(2)}  e^{-d} \leq \delta,&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;(1)&amp;lt;/math&amp;gt; вытекает из попарной независимости хэш-функций, а &amp;lt;math&amp;gt;(2)&amp;lt;/math&amp;gt; {{---}} из [[Неравенство Маркова|неравенства Маркова]]&amp;lt;ref name=&amp;quot;smsketch_lecture&amp;quot;&amp;gt;Barna Saha, &amp;quot;Algorithmic Techniques for Big Data. Lecture 2&amp;quot;&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Count Sketch ==&lt;br /&gt;
&lt;br /&gt;
'''Count Sketch''' — вероятностная структура данных, предложенная М. Чарикаром (англ. M. Charikar), К. Ченом (англ. K. Chen) и М. Фара-Колтоном (англ. M. Farach-Colton) в 2002 году. В отличие от Count-Min Sketch, эта структура данных позволяет оценивать &amp;lt;math&amp;gt;a_{i}&amp;lt;/math&amp;gt; даже для отрицательных &amp;lt;math&amp;gt;c_t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Структура данных.''' Пусть &amp;lt;math&amp;gt;h_1, h_2, \dots, h_d&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;s_1, s_2, \dots, s_d&amp;lt;/math&amp;gt; — это наборы хэш-функций, принадлежащие универсальному семейству и удовлетворяющие &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; h_1, h_2, \dots, h_d : \{1, \dots, n\} \rightarrow \{1, \dots, w\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; s_1, s_2, \dots, s_d : \{1, \dots, n\} \rightarrow \{-1, 1\}. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Count Sketch включает в себя двумерный массив шириной &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; и глубиной &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;count[1, 1], count[1, 2], \dots, count [d, w]&amp;lt;/math&amp;gt;, а также хэш-функции &amp;lt;math&amp;gt;h_1, h_2, \dots, h_d&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;s_1, s_2, \dots, s_d&amp;lt;/math&amp;gt;. В начале работы массив инициализируется нулями. &lt;br /&gt;
&lt;br /&gt;
'''Обновление.''' При получении из потока пары &amp;lt;math&amp;gt;(i_t, c_t)&amp;lt;/math&amp;gt;, для каждой строки &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; двумерного массива &amp;lt;math&amp;gt;count&amp;lt;/math&amp;gt; мы обновляем значение соответствующего счетчика, заданного хэш-функцией &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt;, следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; count[j, h_j(i_t)] \leftarrow count[j, h_j(i_t)] + c_t \cdot{} s_j(i_t) \: \forall j. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ответ на запрос.''' Оценка значения &amp;lt;math&amp;gt;a_{i}&amp;lt;/math&amp;gt; подсчитывается как &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\hat{a}_i = median_j \{count[j, h_j(i)] \cdot{} s_j(i) \}&amp;lt;/math&amp;gt;&amp;lt;ref name=&amp;quot;ssketch&amp;quot;&amp;gt;Moses Charikar, Kevin Chen, Martin Farach-Colton, &amp;quot;Finding Frequent Items in Data Streams&amp;quot;, 2002&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=2&lt;br /&gt;
|statement=Оценка значения &amp;lt;tex&amp;gt;a_{i}&amp;lt;/tex&amp;gt; полученная с помощью Count Sketch удовлетворяет &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; a_{i} - \sqrt{\frac{3}{w}} ||\mathbf{a}||_2 \leq \hat{a}_i \leq a_{i} + \sqrt{\frac{3}{w}} ||\mathbf{a}||_2. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|proof=Воспользуемся схемой доказательства, сходной с той, что была использована для Count-Min Sketch. С учетом коллизий хэш-функций получаем значение, хранимое в счетчике &amp;lt;math&amp;gt;count[j, h_j(i)]&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; count[j, h_j(i)]  = \sum_{k=1}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k \cdot{} s_j(k)\big) = a_i \cdot{} s_j(i) + \sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k \cdot{} s_j(k)\big), &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
из чего следует, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; s_j(i) \cdot{} count[j, h_j(i)] = a_i \cdot{} s_j(i)^2 + \sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k \cdot{} s_j(k) \cdot{} s_j(i) \big). &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того, очевидно, что &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; E(s_j(i)) = 0, \:\:\:\:\: E(s_j(i))^2 = 1. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найдем матожидание &amp;lt;math&amp;gt;E(s_j(i) \cdot{} count[j, h_j(i)])&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; E(s_j(i) \cdot{} count[j, h_j(i)]) = a_i \cdot{} E(s_j(i)^2) + \sum_{k=1, k \neq i}^{n} \big(E(I_{h(i)=h(k)}) \cdot{} a_k \cdot{} E(s_j(k)) \cdot{} E(s_j(i)) \big) = a_i \cdot{} E(s_j(i)^2) = a_i. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как в отличие от Count-Min Sketch, Count Sketch может работать при &amp;lt;math&amp;gt;c_t &amp;lt; 0&amp;lt;/math&amp;gt;, мы не можем использовать неравенство Маркова. Вместо этого воспользуемся неравенством Чебышёва, для чего подсчитаем дисперсию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; Var(s_j(i) \cdot{} count[j, h_j(i)]) = E\Big[(s_j(i) \cdot{} count[j, h_j(i)] - a_i)^ 2\Big] &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; = E\Big[(a_i \cdot{} s_j(i)^2 + \sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k \cdot{} s_j(k) \cdot{} s_j(i) \big) - a_i) ^ 2\Big] &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; = E\Big[\Big(\sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k \cdot{} s_j(k) \cdot{} s_j(i) \big)\Big) ^ 2\Big] &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; = E\Big[\sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)}^2 \cdot{} a_k^2 \cdot{} s_j(k)^2 \cdot{} s_j(i) ^2\big) + \sum_{k \neq i, l \neq i} \big(I_{h(i)=h(k)} \cdot{} I_{h(i)=h(l)} \cdot{} a_k \cdot{} a_l \cdot{} s_j(k) \cdot{} s_j(l) \cdot{} s_j(i) ^2\big)\Big] &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; = E\Big[\sum_{k=1, k \neq i}^{n} \big(I_{h(i)=h(k)} \cdot{} a_k^2 \big)\Big] = E\Big[\sum_{k=1}^{n} \big(I_{i,j,k} \cdot{} a_k^2 \big)\Big] \leq \frac{1}{w} \sum_{k=1}^{n} a_k^2 = \frac{||\mathbf{a}||_2^2}{w}. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим полученную дисперсию в неравенство Чебышёва для &amp;lt;math&amp;gt;k = \sqrt{3}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; Pr\Big[(s_j(i) \cdot{} count[j, h_j(i)] - a_i) &amp;gt; \sqrt{\frac{3}{w}}||\mathbf{a}||_2\Big] &amp;lt; \frac{1}{3}. &amp;lt;/tex&amp;gt;&amp;lt;ref name=&amp;quot;ssketch_lecture&amp;quot;&amp;gt;Anshumali Shrivastava, &amp;quot;Probabilistic Algorithms and Data Structure. Lecture 10&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
&lt;br /&gt;
С момента появления Count-Min Sketch и Count Sketch эти структуры данных стали широко использоваться для подсчета статистики, например,  для отслеживания популярности контента среди разных групп пользователей. Рассмотрим пример с подсчетом числа просмотров для твита. Попытка отследить число просмотров на разных веб-сайтах приводит к работе с большим потоком данных, которым сложно управлять. Кроме того, ситуация, когда твит наберет большое число просмотров на одной платформе и окажется незамеченным на других, маловероятна, поэтому разработчики могут не волноваться о больших погрешностях. Использование скетча для каждого отдельного твита занимает ненамного больше места чем само сообщение и метаданные о нем, но при этом позволяет отслеживать, какие платформы привлекают больше всего читателей с хорошей точностью.&lt;br /&gt;
&lt;br /&gt;
Скетчи также популярны в телекоммуникационных сетях, через узлы которых проходит большое количество трафика, которое не может быть сохранено в явном виде. Сбор статистики о распределении трафика в сети позволяет эффективно управлять ею, снижая загруженность критических узлов.&amp;lt;ref name=&amp;quot;use&amp;quot;&amp;gt;Graham Cormode, &amp;quot;What is Data Sketching, and Why Should I Care?&amp;quot;, 2017&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описанные выше скетчи также могут быть использованы для решения задачи выявления наиболее часто встречающихся элементов (англ. heavy hitters). Это может быть актуально, например, для поисковых систем, таких как Google. Подробное описание решения этой задачи с помощью Count-Min Sketch и Count Sketch описано в оригинальных статьях&amp;lt;ref name=&amp;quot;smsketch&amp;quot;&amp;gt;Graham Cormode, S. Muthukrishnan, &amp;quot;An Improved Data Stream Summary: The Count-Min Sketch and its Applications&amp;quot;, 2003&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;ssketch&amp;quot;&amp;gt;Moses Charikar, Kevin Chen, Martin Farach-Colton, &amp;quot;Finding Frequent Items in Data Streams&amp;quot;, 2002&amp;lt;/ref&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;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Graham Cormode, S. Muthukrishnan, &amp;quot;An Improved Data Stream Summary: The Count-Min Sketch and its Applications&amp;quot;, 2003 [http://dimacs.rutgers.edu/~graham/pubs/papers/cm-full.pdf]&lt;br /&gt;
* Barna Saha, &amp;quot;Algorithmic Techniques for Big Data. Lecture 2&amp;quot;, 2013 [https://barnasahadotcom.files.wordpress.com/2016/01/lec3-haritha-1.pdf]&lt;br /&gt;
* Moses Charikar, Kevin Chen, Martin Farach-Colton, &amp;quot;Finding Frequent Items in Data Streams&amp;quot;, 2002 [https://people.cs.rutgers.edu/~farach/pubs/FrequentStream.pdf]&lt;br /&gt;
* Anshumali Shrivastava, &amp;quot;Probabilistic Algorithms and Data Structure. Lecture 10&amp;quot;, 2018 [https://www.cs.rice.edu/~as143/COMP480_580_Spring19/scribe/S10.pdf]&lt;br /&gt;
* Graham Cormode, &amp;quot;What is Data Sketching, and Why Should I Care?&amp;quot;, 2017 [http://dimacs.rutgers.edu/~graham/pubs/papers/cacm-sketch.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных‏‎]][[Категория:Потоковые алгоритмы‏‎]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=83340</id>
		<title>Замкнутость КС-языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=83340"/>
				<updated>2022-09-01T04:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В отличие от [[Замкнутость регулярных языков относительно различных операций|регулярных языков]], [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-языки]] не замкнуты относительно всех теоретико-множественных операций. К примеру, дополнение и пересечение КС-языков не обязательно являются КС-языками.&lt;br /&gt;
&lt;br /&gt;
Здесь и далее считаем, что &amp;lt;tex&amp;gt; L_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; L_2 &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;
|statement= &amp;lt;tex&amp;gt; L_1 \cup L_2 &amp;lt;/tex&amp;gt; является КС-языком.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Построим [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-грамматику]] для языка &amp;lt;tex&amp;gt; L_1 \cup L_2 &amp;lt;/tex&amp;gt;. Для этого рассмотрим соответствующие КС-грамматики для языков &amp;lt;tex&amp;gt; L_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; L_2 &amp;lt;/tex&amp;gt;. Пусть стартовые символы в них имеют имена &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; T &amp;lt;/tex&amp;gt; соответственно. Тогда стартовый символ для &amp;lt;tex&amp;gt; L_1 \cup L_2 &amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; и добавим правило &amp;lt;tex&amp;gt; S' \to S \mid T &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt; S' \Rightarrow^{*} w \iff S \Rightarrow^{*} w \lor T \Rightarrow^{*} w &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
: Поскольку &amp;lt;tex&amp;gt; S \Rightarrow^{*} w &amp;lt;/tex&amp;gt; и есть правило &amp;lt;tex&amp;gt; S' \to S &amp;lt;/tex&amp;gt;, то, по определению &amp;lt;tex&amp;gt; \Rightarrow^{*} &amp;lt;/tex&amp;gt; получаем, что &amp;lt;tex&amp;gt; S' \Rightarrow^{*} w &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;\Leftarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Пусть &amp;lt;tex&amp;gt; S' \Rightarrow^{*} w &amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt; S' \to S \mid T &amp;lt;/tex&amp;gt; — единственные правила, в которых нетерминал &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; присутствует в правой части, то это означает, что либо &amp;lt;tex&amp;gt; S' \Rightarrow S \Rightarrow^{*} w &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt; S' \Rightarrow T \Rightarrow^{*} w &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;
|statement=  &amp;lt;tex&amp;gt; L_1 L_2 &amp;lt;/tex&amp;gt; — КС-язык.&lt;br /&gt;
|proof=Аналогично предыдущему случаю построим КС-грамматику для языка &amp;lt;tex&amp;gt; L_1 L_2 &amp;lt;/tex&amp;gt;. Для этого добавим правило &amp;lt;tex&amp;gt; S' \to S T &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; T &amp;lt;/tex&amp;gt; — стартовые символы языков &amp;lt;tex&amp;gt; L_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; L_2 &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== [[Основные определения, связанные со строками#Формальные языки | Замыкание Клини]] ===&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement=  &amp;lt;tex&amp;gt; L^{*} = \bigcup\limits_{i = 0}^{\infty} L^i &amp;lt;/tex&amp;gt; — КС-язык.&lt;br /&gt;
|proof=Если &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; — стартовый символ КС-грамматики для языка &amp;lt;tex&amp;gt; L &amp;lt;/tex&amp;gt;, то добавим в КС-грамматику для языка &amp;lt;tex&amp;gt; L^{*} &amp;lt;/tex&amp;gt; новый стартовый символ &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt; S' \to S S' \mid \varepsilon &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;
|statement= КС-языки замкнуты относительно прямого гомоморфизма.&lt;br /&gt;
|proof=&lt;br /&gt;
Построим КС-грамматику, в которой каждый символ &amp;lt;tex&amp;gt; x \in \Sigma &amp;lt;/tex&amp;gt; заменим на &amp;lt;tex&amp;gt; \mathrm{h}(x) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== [[Основные определения, связанные со строками#Гомоморфизм языков | Обратный гомоморфизм]] ====&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= КС-языки замкнуты относительно обратного гомоморфизма.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Homo.png|300px|right|frameless]]&lt;br /&gt;
Докажем аналогично соответствующему утверждению для регулярных языков. Построим [[Автоматы с магазинной памятью|МП-автомат]] для &amp;lt;tex&amp;gt; \mathrm{h^{-1}}(L) = \{ w \mid \mathrm{h}(w) \in L \} &amp;lt;/tex&amp;gt; на основе МП-автомата для языка &amp;lt;tex&amp;gt; L &amp;lt;/tex&amp;gt; (назовем его &amp;lt;tex&amp;gt; M &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; c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Сохраняем &amp;lt;tex&amp;gt; \mathrm{h}(c) &amp;lt;/tex&amp;gt; в буфере (входная лента для автомата &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt;).&lt;br /&gt;
# Запускаем &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; на слове, находящемся в буфере. &lt;br /&gt;
# После того, как &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; обработал весь буфер, переходим к пункту 1.&lt;br /&gt;
&lt;br /&gt;
Если рассмотреть более формально, пусть &amp;lt;tex&amp;gt; M =\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}, T\rangle &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; M' =\langle Q', \Sigma, \Gamma, \delta', (s, \varepsilon), Z_{0}, T \times {\varepsilon}\rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* &amp;lt;tex&amp;gt; Q' = \{ (q, x) \mid q \in Q \} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; — суффикс (не обязательно собственный) некоторой цепочки &amp;lt;tex&amp;gt; h(c) &amp;lt;/tex&amp;gt; для символа &amp;lt;tex&amp;gt; c \in \Sigma &amp;lt;/tex&amp;gt;. Таким образом, первый компонент состояния &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; является состоянием &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt;, а второй — компонентом буфера.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \delta' &amp;lt;/tex&amp;gt; определяется следующими правилами:&lt;br /&gt;
** &amp;lt;tex&amp;gt; \delta'((q, \varepsilon), c, X) = \{((q, \mathrm{h}(c)), X) \mid c \in \Sigma, q \in Q, X \in \Gamma \}&amp;lt;/tex&amp;gt;. Когда буфер пуст, &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; может прочитать свой следующий входной символ &amp;lt;tex&amp;gt; c &amp;lt;/tex&amp;gt; и поместить &amp;lt;tex&amp;gt; \mathrm{h}(c) &amp;lt;/tex&amp;gt; в буфер.&lt;br /&gt;
** Если &amp;lt;tex&amp;gt; (p, \gamma) \in \delta(q, b, X), b \in T \cup \varepsilon &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; ((p, x), \gamma) \in \delta'((q, bx), \varepsilon, X) &amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; всегда имеет возможность имитации перехода &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt;, используя голову буфера. Если &amp;lt;tex&amp;gt; b \in T &amp;lt;/tex&amp;gt;, то буфер должен быть непустым, но если &amp;lt;tex&amp;gt; b = \varepsilon &amp;lt;/tex&amp;gt;, то буфер может быть пустым.&lt;br /&gt;
* Начальным состоянием &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt; (s, \varepsilon) &amp;lt;/tex&amp;gt;, т.е. &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; стартует в начальном состоянии &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; с пустым буфером.&lt;br /&gt;
* Допускающими состояниями &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; являются состояния &amp;lt;tex&amp;gt; (q, \varepsilon)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; q \in T &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом получаем, что &amp;lt;tex&amp;gt;(s, \mathrm{h}(w), Z_0) \vdash_M^{*} (p, \varepsilon, \gamma) \Leftrightarrow ((s, \varepsilon), w, Z_0) \vdash_{M'}^{*} ((p, \varepsilon), \varepsilon, \gamma)&amp;lt;/tex&amp;gt;, то есть автомат &amp;lt;tex&amp;gt; M' &amp;lt;/tex&amp;gt; допускает те и только те слова, которые принадлежат языку &amp;lt;tex&amp;gt; \mathrm{h^{-1}}(L) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Разворот ===&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt; L^{R} = \{ w^{R} \mid w \in L \}&amp;lt;/tex&amp;gt; контекстно-свободен.&lt;br /&gt;
|proof= &lt;br /&gt;
Для того, чтобы построить  &amp;lt;tex&amp;gt; L^{R} &amp;lt;/tex&amp;gt;, необходимо развернуть все правые части правил грамматики для &amp;lt;tex&amp;gt; L &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;w \in L \iff w^{R} \in L^{R}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Докажем с помощью метода математической индукции по длине порождения в грамматике &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:'''База'''. &amp;lt;tex&amp;gt;A \underset{L}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:: В грамматике &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; существует правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; и, так как мы развернули все правые части правил, то &amp;lt;tex&amp;gt;A \underset{L^{R}}{\Rightarrow} w^{R}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:'''Предположение индукции'''. Пусть &amp;lt;tex&amp;gt;A \underset{L}{\Rightarrow}^* w&amp;lt;/tex&amp;gt; менее чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, тогда &amp;lt;tex&amp;gt;A \underset{L^{R}}{\Rightarrow}^* w^{R}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:'''Переход'''. &lt;br /&gt;
:: Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A \underset{L}{\Rightarrow}Y_1 Y_2 \ldots Y_m \underset{L}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt; w &amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; Y_i \underset{L}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Так как каждое из порождений &amp;lt;tex&amp;gt; Y_i \underset{L}{\Rightarrow}^*w_i &amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что &amp;lt;tex&amp;gt; Y_i \underset{L^{R}}{\Rightarrow}^*w_i^{R} &amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;A \underset{L}{\Rightarrow}Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \underset{L^{R}}{\Rightarrow}Y_m Y_{m - 1} \ldots Y_1&amp;lt;/tex&amp;gt;, откуда следует, что &amp;lt;tex&amp;gt; A \underset{L^{R}}{\Rightarrow}^* w^{R} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Доказательство аналогично.&lt;br /&gt;
}}&lt;br /&gt;
'''Пример разворота''':&lt;br /&gt;
&lt;br /&gt;
Пусть задана КС-грамматика &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L = a^i b^j c^i&amp;lt;/tex&amp;gt; со следующими правилами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; A \to bA \mid \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; B \to aBc \mid A &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В таком случае КС-грамматика &amp;lt;tex&amp;gt;G^R&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^R = c^i b^j a^i &amp;lt;/tex&amp;gt; выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; A \to Ab \mid \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; B \to cBa \mid A &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дополнение к языку тандемных повторов ===&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= Язык тандемных повторов &amp;lt;tex&amp;gt; L = \{ww \mid w \in \Sigma^{*} \} &amp;lt;/tex&amp;gt; не является КС-языком.&lt;br /&gt;
|proof=&lt;br /&gt;
Это доказывается с помощью [[Лемма о разрастании для КС-грамматик|леммы о разрастании]]. &lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= Дополнение к языку тандемных повторов &amp;lt;tex&amp;gt;\overline{L}&amp;lt;/tex&amp;gt; является КС-языком.&lt;br /&gt;
|proof=&lt;br /&gt;
Для упрощения рассмотрим этот язык на бинарном алфавите &amp;lt;tex&amp;gt;\Sigma = \{a,b\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для &amp;lt;tex&amp;gt; \overline{L} &amp;lt;/tex&amp;gt; можно составить следующую [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-грамматику]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \to AB \mid BA&amp;lt;/tex&amp;gt;  &lt;br /&gt;
* &amp;lt;tex&amp;gt;S \to A \mid B&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \to \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \to aAa \mid aAb \mid bAa \mid bAb \mid a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B \to aBa \mid aBb \mid bBa \mid bBb \mid b &amp;lt;/tex&amp;gt;&lt;br /&gt;
&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;a&amp;lt;/tex&amp;gt;. В свою очередь нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; порождает слова нечётной длины с центральным символом &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Таким образом, правило &amp;lt;tex&amp;gt;S \to A \mid B&amp;lt;/tex&amp;gt; порождает все возможные слова нечётной длины.&lt;br /&gt;
&lt;br /&gt;
'''Докажем, что все слова, порождённые &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, есть в &amp;lt;tex&amp;gt;\overline{L}&amp;lt;/tex&amp;gt;.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, а также все слова нечётной длины не являются тандемными повторами.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим произвольное слово чётной длины, сгенерированное при помощи правила &amp;lt;tex&amp;gt;S \to AB &amp;lt;/tex&amp;gt;. Пусть его часть, соответствующая &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, имеет длину &amp;lt;tex&amp;gt;2N+1&amp;lt;/tex&amp;gt;, а часть, соответствующая &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, {{---}} длину &amp;lt;tex&amp;gt;2M+1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:TandemRepeatAB.png]]&lt;br /&gt;
&lt;br /&gt;
Таким образом, мы получили слово длины &amp;lt;tex&amp;gt;2N+2M+2&amp;lt;/tex&amp;gt;. Если оно является тандемным повтором, то символ, стоящий на позиции &amp;lt;tex&amp;gt;N+1&amp;lt;/tex&amp;gt;, должен быть равен символу на позиции &amp;lt;tex&amp;gt;2N+M+2&amp;lt;/tex&amp;gt;. Но по построению это не так. &lt;br /&gt;
&lt;br /&gt;
Для правила &amp;lt;tex&amp;gt;S \to BA &amp;lt;/tex&amp;gt; доказательство аналогично.&lt;br /&gt;
&lt;br /&gt;
'''Докажем, что все слова из &amp;lt;tex&amp;gt;\overline{L}&amp;lt;/tex&amp;gt; порождаются &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.'''  &lt;br /&gt;
&lt;br /&gt;
С помощью &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt; \varepsilon&amp;lt;/tex&amp;gt;, а также любое слово нечётной длины.&lt;br /&gt;
&lt;br /&gt;
Далее рассмотрим произвольное слово чётной длины из &amp;lt;tex&amp;gt;\overline{L}&amp;lt;/tex&amp;gt;. Докажем, что его можно разбить на два слова нечётной длины, имеющие различные центральные символы. Предположим, что это не так, то есть такого разбиения нет.&lt;br /&gt;
&lt;br /&gt;
Пусть это слово имеет длину &amp;lt;tex&amp;gt;2N&amp;lt;/tex&amp;gt;. Тогда рассмотрим все его префиксы нечётной длины. Их центры находятся на позициях &amp;lt;tex&amp;gt;1, 2, \ldots ,N&amp;lt;/tex&amp;gt;, а центры соответствующих им суффиксов {{---}} на позициях &amp;lt;tex&amp;gt;N+1, N+2, \ldots ,2N&amp;lt;/tex&amp;gt;. Поскольку искомого разбиения не существует, то получается, что символ на позиции &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; равен символу на позиции &amp;lt;tex&amp;gt;N+1&amp;lt;/tex&amp;gt;,  символ на позиции &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; равен символу на позиции &amp;lt;tex&amp;gt;N+2&amp;lt;/tex&amp;gt;, и так далее. Следовательно, первая половина слова равна его второй половине, т.е. оно является тандемных повтором. &lt;br /&gt;
&lt;br /&gt;
Получили противоречие, следовательно любое слово чётной длины из &amp;lt;tex&amp;gt;\overline{L}&amp;lt;/tex&amp;gt; можно разделить на два слова нечётной длины с различными центральными символами. В свою очередь, такие слова могут быть сгенерированы при помощи грамматики &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и соединены при помощи правила  &amp;lt;tex&amp;gt;S \to AB \mid BA&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;
|statement= Если &amp;lt;tex&amp;gt; L_1 = a^i b^i c^j , L_2 = a^i b^j c^j &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; L_1 \cap L_2 &amp;lt;/tex&amp;gt; не является КС-языком.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt; L_1 = \{ a^i b^i \}  \{ c^j \}, L_2 = \{ a^i \} \{ b^j c^j \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По замкнутости КС-языков относительно конкатенации получаем, что &amp;lt;tex&amp;gt; L_1 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; L_2 &amp;lt;/tex&amp;gt; являются КС-языками.&lt;br /&gt;
&lt;br /&gt;
Но &amp;lt;tex&amp;gt; L_1 \cap L_2 = \{ a^i b^i c^i \mid i \in \mathbb{N} \} &amp;lt;/tex&amp;gt;, который по [[Лемма о разрастании для КС-грамматик|лемме о разрастании]] для КС-языков не является КС-языком.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Разность ===&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= КС-языки не замкнуты относительно разности.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt; L_1 \setminus L_2 = L_1 \cap \overline{L_2} &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;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{half}(L) = \{ w \mid ww \in L \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= Операция &amp;lt;tex&amp;gt; \mathrm{half} &amp;lt;/tex&amp;gt; не сохраняет КС-язык таковым.&lt;br /&gt;
|proof= &lt;br /&gt;
Покажем это на примере. Рассмотрим язык &amp;lt;tex&amp;gt; L = \{ a^n b a^n b a^m b a^l b a^k b a^k b \} &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Заметим, что он может быть сгенерирован при помощи следующей КС-грамматики:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; S \to AbBbBbAb &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; B \to a \mid aB&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; A \to b \mid aAa&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Докажем, что &amp;lt;tex&amp;gt; \mathrm{half}(L) &amp;lt;/tex&amp;gt; не является КС-языком.''' &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; \alpha = a^n b a^n b a^m b a^l b a^k b a^k b = ww &amp;lt;/tex&amp;gt;. Отсюда следует, что:&lt;br /&gt;
* &amp;lt;tex&amp;gt; n = l &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; n = k &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; m = k &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А значит, &amp;lt;tex&amp;gt; n = l = k = m &amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt; \mathrm{half}(L) = \{ a^n b a^n b a^n b \} &amp;lt;/tex&amp;gt;, и по [[Лемма о разрастании для КС-грамматик|лемме о разрастании]] КС-языком не является.&lt;br /&gt;
}}&lt;br /&gt;
== Операции над КС-языком и регулярным языком ==&lt;br /&gt;
&lt;br /&gt;
=== Пересечение ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement = Пересечение КС-языка и [[Регулярные языки: два определения и их эквивалентность|регулярного языка]] — КС-язык. &lt;br /&gt;
|proof = &lt;br /&gt;
Построим МП-автомат для пересечения регулярного языка и КС-языка.&lt;br /&gt;
&lt;br /&gt;
Пусть регулярный язык задан своим [[Детерминированные конечные автоматы|ДКА]], а КС-язык — своим [[Автоматы с магазинной памятью|МП-автоматом]] c допуском по допускающему состоянию. Построим прямое произведение этих автоматов так же, как строилось прямое произведение для двух ДКА.&lt;br /&gt;
&lt;br /&gt;
Более формально, пусть &amp;lt;tex&amp;gt; R &amp;lt;/tex&amp;gt; — регулярный язык, заданный своим ДКА &amp;lt;tex&amp;gt; \langle \Sigma, Q_1, s_1, T_1, \delta_1 \rangle &amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt; L &amp;lt;/tex&amp;gt; — КС-язык, заданный своим МП-автоматом: &amp;lt;tex&amp;gt; \langle \Sigma, \Gamma, Q_2, s_2, T_2, z_0, \delta_2 \rangle &amp;lt;/tex&amp;gt;. Тогда прямым произведением назовем следующий автомат:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; Q = \{ \langle q_1, q_2 \rangle \mid q_1 \in Q_1, q_2 \in Q_2 \} &amp;lt;/tex&amp;gt;. Иначе говоря, состояние в новом автомате — пара из состояния первого автомата и состояния второго автомата.&lt;br /&gt;
* &amp;lt;tex&amp;gt; s = \langle s_1, s_2 \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
* Стековый алфавит &amp;lt;tex&amp;gt; \Gamma &amp;lt;/tex&amp;gt; остается неизменным.&lt;br /&gt;
* &amp;lt;tex&amp;gt; T = \{ \langle t_1, t_2 \rangle \mid t_1 \in T_1, t_2 \in T_2 \} &amp;lt;/tex&amp;gt;. Допускающие состояния нового автомата — пары состояний, где оба состояния были допускающими в своем автомате.&lt;br /&gt;
* &amp;lt;tex&amp;gt; \delta ( \langle q_1, q_2 \rangle, c, d) = \langle \delta_1 (q_1, c), \delta_2 (q_2, c, d) \rangle &amp;lt;/tex&amp;gt;. При этом на стек кладется то, что положил бы изначальный МП-автомат при совершении перехода из состояния &amp;lt;tex&amp;gt; q_2 &amp;lt;/tex&amp;gt;, &lt;br /&gt;
видя на ленте символ &amp;lt;tex&amp;gt; c &amp;lt;/tex&amp;gt; и символ &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; на вершине стека.&lt;br /&gt;
&lt;br /&gt;
Этот автомат использует в качестве состояний пары из двух состояний каждого автомата, а за операции со стеком отвечает только МП-автомат. Слово допускается этим автоматом &amp;lt;tex&amp;gt; \iff &amp;lt;/tex&amp;gt; слово допускается и ДКА и МП-автоматом, то есть язык данного автомата совпадает с &amp;lt;tex&amp;gt; R \cap L &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
=== Разность ===&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|statement= Разность КС-языка и регулярного языка — КС-язык.&lt;br /&gt;
|proof= &lt;br /&gt;
&amp;lt;tex&amp;gt; L \setminus R = L \cap \overline{R} &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;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — C. 302-304 : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D0%BB%D0%B0%D1%85&amp;diff=83339</id>
		<title>О многократных интегралах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D0%BB%D0%B0%D1%85&amp;diff=83339"/>
				<updated>2022-09-01T04:44:08Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Идеология построения многократных интегралов полностью копирует двойные.&lt;br /&gt;
&lt;br /&gt;
== Пункт 1. Основные определения ==&lt;br /&gt;
&amp;lt;tex&amp;gt;\Pi = [a_1; b_1] \times [a_2; b_2] \times \ldots \times [a_n; b_n] \subset \mathbb{R}^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y = f(\bar x) = f(x_1; x_2; \ldots; x_n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\tau_j : a_j = a_{j0} &amp;lt; a_{j1} &amp;lt; \ldots &amp;lt; a_{jp_j} = b_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Pi_{i_1i_2\ldots i_n} = [a_{1i_1}; a_{1i_1 + 1}] \times [a_{2i_2}; a_{2i_2 + 1}] \times \ldots \times [a_{ni_n}; a_{ni_n + 1}]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum f(x_{i_1}, x_{i_2}, \ldots, x_{in}) \Delta a_{1i_1} \Delta a_{2i_2} \ldots \Delta a_{ni_n}&amp;lt;/tex&amp;gt; {{---}} интегральная сумма. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
После этого одновременно все ранги разбиения устремляются к нулю. Если предел не зависит от выбора точек внутри клеток, то эта сумма&lt;br /&gt;
называется &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-кратным интегралом Римана по прямоугольнику.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\int\limits_\Pi f = \int\limits_{a_1}^{b_1} \ldots \int\limits_{a_n}^{b_n} f(x_1; x_2; \ldots x_n) dx_1 dx_2 \ldots dx_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, по аналогии, выводим линейность и аддитивность, устанавливаем тот факт, что &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} непрерывная &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\exists \int f&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Финально, формула повторного интеграла по &amp;lt;tex&amp;gt;\Pi&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\int\limits_\Pi f = \int\limits_{a_1}^{b_1} dx_1 \ldots \int\limits_{a_n}^{b^n} f(x_1, \ldots, x_n) dx_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пункт 2. Интеграл по произвольному множеству ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E \subset \mathbb{R}^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E \subset \Pi&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f : E \to \mathbb{R}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
&amp;lt;tex&amp;gt;f_E(\bar x) = \begin{cases}0 &amp;amp; , \bar x \not\subset E\\f(\bar x) &amp;amp; , \bar x \subset E\end{cases}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем существование &amp;lt;tex&amp;gt;\int\limits_\Pi f_E&amp;lt;/tex&amp;gt;. Если этот интеграл существует, то по аддитивности проверяем, что &lt;br /&gt;
он не зависит от &amp;lt;tex&amp;gt;\Pi \supset E&amp;lt;/tex&amp;gt;, что позволяет по определению считать, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\int\limits_E f = \int\limits_{\Pi \supset E} f_E&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это определение уже диктует все свойства &amp;lt;tex&amp;gt;\int\limits_E&amp;lt;/tex&amp;gt;. Как и в двойном интеграле выясняется, что всё имеет смысл только &lt;br /&gt;
для тех &amp;lt;tex&amp;gt;E \subset \mathbb{R}^n&amp;lt;/tex&amp;gt;, для которых &amp;lt;tex&amp;gt;\exists\int\limits_E 1 = |E|&amp;lt;/tex&amp;gt; {{---}} 'объём' &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-мерной фигуры, а саму &lt;br /&gt;
фигуру продолжают называть 'квадрируемой'.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} квадрируема &amp;lt;tex&amp;gt;\iff&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;|\partial E| &amp;gt; 0&amp;lt;/tex&amp;gt; (объём границы равен 0).&lt;br /&gt;
&lt;br /&gt;
Выводятся свойства линейности и аддитивности.&lt;br /&gt;
&lt;br /&gt;
Добавление очередной размерности позволяет писать в разных формах формулу повторного интегрирования, оперируя сечениями фигур, которые получаются &lt;br /&gt;
за счёт введения &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;-мерных гиперплоскостей.&lt;br /&gt;
&lt;br /&gt;
Например, в &amp;lt;tex&amp;gt;\mathbb{R}^3&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;E = \{(x, y) \in G \subset \mathbb{R}^2, z \in (g_1(x, y), g_2(x, y))) \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\iiint\limits_E f(x, y, z) dx dy dz = \iint\limits_G dx dy \int\limits_{g_1(x, y)}^{g_2(x, y)} f(x, y, z) dz&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все формулы получаются элементарно: &amp;lt;tex&amp;gt;E \subset \Pi&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\int\limits_E f = \int\limits_\Pi f_E&amp;lt;/tex&amp;gt;. Тут уже есть повторный интеграл.&lt;br /&gt;
Далее, для точек сечения вне &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;f(\bar x) = 0&amp;lt;/tex&amp;gt;. Получается переменный предел интегрирования.&lt;br /&gt;
&lt;br /&gt;
== Пункт 3. Замена переменных интегрирования ==&lt;br /&gt;
&lt;br /&gt;
Если исходные переменные выражаются через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; других,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{J}(u_1, \ldots, u_n) = \left|\begin{array}{ccc}\frac{\partial x_1}{\partial u_1} &amp;amp; \cdots &amp;amp; \frac{\partial x_1}{\partial u_n} \\\vdots &amp;amp; \ddots &amp;amp; \vdots \\\frac{\partial x_n}{\partial u_1} &amp;amp; \cdots &amp;amp; \frac{\partial x_n}{\partial u_n} \\\end{array}\right| \ne 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\int\limits_E f(\bar x) d \bar x = \int\limits_{E'} f(\bar x(\bar u)) |\mathcal{J}(\bar u)| d \bar u&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так же, как и с двойным интегралом, важнейшим этапом доказательства является то, что &amp;lt;tex&amp;gt;E = \int\limits_E |\mathcal{J}(\bar u)|d \bar u&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Однако, это скорее геометрический факт, нежели факт анализа.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математический анализ 1 курс]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%8F&amp;diff=83338</id>
		<title>Сети глубокого доверия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B4%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%8F&amp;diff=83338"/>
				<updated>2022-09-01T04:44:03Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&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;
# После обучения скрытых переменных в каждом слое могут быть выведены значения за один проход снизу вверх, который начинается с наблюдаемого вектора данных в нижнем слое и использует веса в обратном направлении.&lt;br /&gt;
Сети глубокого доверия обучаются по одному слою за раз, обрабатывая значения скрытых переменных в одном слое в тот момент, когда они выводятся из данных для обучения следующего слоя. Это эффективное, жадное обучение может сопровождаться или сочетаться с другими процедурами обучения, которые точно настраивают все веса для улучшения генеративных или дискриминационных характеристик всей сети.&lt;br /&gt;
&lt;br /&gt;
Дискриминирующая тонкая настройка может быть выполнена путем добавления последнего слоя переменных, которые представляют желаемые выходные данные и производные [[Обратное распространение ошибки|ошибок обратного распространения]]. Когда сети со многими скрытыми слоями применяются к высокоструктурированным входным данным, таким как изображения, обратное распространение работает намного лучше, если детекторы признаков в скрытых слоях инициализируются путем обучения глубокой сети доверия, которая моделирует структуру во входных данных.&lt;br /&gt;
&lt;br /&gt;
== Как развивались сети глубокого доверия ==&lt;br /&gt;
&lt;br /&gt;
В нейронных сетях первого поколения использовались [[Нейронные сети, перцептрон|перцептроны]], которые идентифицировали конкретный объект или что-либо еще, принимая во внимание «вес» или предварительные свойства. Однако перцептроны могут быть эффективны только на базовом уровне и бесполезны для передовых технологий. Для решения этих проблем во втором поколении нейронных сетей была введена концепция обратного распространения, при которой полученный вывод сравнивается с желаемым выводом, а значение ошибки было снижено до нуля. [[Метод опорных векторов (SVM)|Метод опорных векторов]] позволил создать больше контрольных примеров, ссылаясь на ранее введенные контрольные примеры. Затем последовали циклические графы, называемые сетями доверия, которые помогли в решении проблем, связанных с выводом и проблемами обучения. За этим последовали  сети глубокого доверия, которые помогли создать непредвзятые значения для хранения в конечных узлах.&lt;br /&gt;
&lt;br /&gt;
== Композиция простых обучающих модулей ==&lt;br /&gt;
[[Файл:Rbmimage4.png |400px|thumb| right| Рис. 1 Распределение restricted Boltzmann machine]]&lt;br /&gt;
Глубокая сеть доверия может рассматриваться как набор простых обучающих модулей, каждый из которых представляет собой ограниченную машину Больцмана&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%91%D0%BE%D0%BB%D1%8C%D1%86%D0%BC%D0%B0%D0%BD%D0%B0 restricted Boltzmann machine, RBM]&amp;lt;/ref&amp;gt;, которая содержит слой видимых узлов, представляющий данные, и слой скрытых узлов, которые обучаются представлению особенностей, которые захватывают более высокие порядки корреляции в данных. Ограниченные машины Больцмана могут быть сложены и обучены [[Теорема Радо-Эдмондса (жадный алгоритм)|жадным алгоритмом]], чтобы сформировать так называемые глубокие сети доверия, которые моделируют совместное распределение между наблюдаемым вектором &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; и скрытыми слоями &amp;lt;math&amp;gt;h^{k}&amp;lt;/math&amp;gt; следующим образом:&lt;br /&gt;
 &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;P(x, h^1, \ldots, h^l)=\left( \prod\limits_{k = 0}^{l - 2}P(h^k|h^{k + 1}) \right) P(h^{l - 1}|h^l)&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt; &lt;br /&gt;
где $x=h^0$, $P(h^{k-1}|h^{k})$ {{---}} условное распределение для видимых узлов, обусловленных скрытыми узлами RBM на уровне &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и $P(h^{l - 1}|h^l)$ {{---}} это видимое-скрытое совместное распределение в RBM верхнего уровня. Это показано на рисунке 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ограниченная машина Больцмана (RBM) ==&lt;br /&gt;
[[Файл:Bolcman.jpg |400px| thumb | right |Рис 2. Визуализация RBM]]&lt;br /&gt;
Если вы знаете, что такое факторный анализ, то RBM можно рассматривать как двоичную версию факторного анализа. Таким образом, вместо множества факторов, определяющих вывод, мы можем иметь двоичную переменную в форме 0 или 1.&lt;br /&gt;
&lt;br /&gt;
Например: если вы читаете книгу, а затем судите эту книгу по двухзначной шкале: это либо вам нравится книга, либо вам не нравится книга. В таких сценариях мы можем использовать RBM, которые помогут нам определить причину, по которой мы делаем такой выбор.&lt;br /&gt;
&lt;br /&gt;
RBM используют вероятностный подход для нейронных сетей, и поэтому их также называют стохастическими нейронными сетями.&lt;br /&gt;
Если мы разложим RBM, то становится ясно, что они состоят из трех частей:&lt;br /&gt;
# Один входной слой, так называемые &amp;quot;Видимые узлы&amp;quot;.&lt;br /&gt;
# Один скрытый слой. &lt;br /&gt;
# Узлы смещения.&lt;br /&gt;
В приведенном выше примере видимые узлы {{---}} это не что иное, как то, нравится ли вам книга или нет. Скрытые узлы помогают найти то, что заставило вас одобрить эту книгу. Узлы смещения добавлены, чтобы включить различные виды свойств, разных книг.&lt;br /&gt;
Простая визуализация Ограниченной машины Больцмана показана на рисунке 2. &lt;br /&gt;
&lt;br /&gt;
Зеленым отмечены видимые узлы, красным скрытые, а белые узлы с меткой &amp;quot;bias&amp;quot; соответствуют узлам смещения.&lt;br /&gt;
&lt;br /&gt;
Сети глубокого доверия имеют две фазы:&lt;br /&gt;
# Фаза предварительного обучения.&lt;br /&gt;
# Фаза тонкой настройки.&lt;br /&gt;
Фаза предварительного обучения {{---}} это не что иное, как несколько уровней RBN, в то время как фаза тонкой настройки {{---}} это нейронная сеть с прямой связью. Визуализация обеих фаз показана на рисунке 3 ниже&lt;br /&gt;
[[Файл:Vis2f.png |600px|thumb| center| Рис. 3 Визуализация фаз RBM]]&lt;br /&gt;
&lt;br /&gt;
Алгоритм обучения глубокой сети доверия, состоит из нескольких этапов:&lt;br /&gt;
#  Нахождение признаков видимых узлов, используя алгоритм контрастной дивергенции.&lt;br /&gt;
#  Нахождение скрытых признаков объектов, найденных в предыдущем шаге.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Мы начнем с определения класса для глубокой сети доверия, который назовем DBN (Deep belief network), который будет хранить уровни многослойного перцептрона MLP (Multilayer perceptron) вместе со связанными с ними RBM. Поскольку мы используем  RBM для инициализации MLP, код будет отражать эту идею, насколько это возможно. Далее будут приведены RBM, используемые для инициализации сети, и MLP, используемый для классификации.&lt;br /&gt;
 from __future__ import print_function, division&lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 import timeit&lt;br /&gt;
 import numpy&lt;br /&gt;
 import theano&lt;br /&gt;
 import theano.tensor as T&lt;br /&gt;
&lt;br /&gt;
 from theano.sandbox.rng_mrg import MRG_RandomStreams&lt;br /&gt;
 from logistic_sgd import LogisticRegression, load_data&lt;br /&gt;
 from mlp import HiddenLayer&lt;br /&gt;
 from rbm import RBM&lt;br /&gt;
&lt;br /&gt;
 class DBN(object):&lt;br /&gt;
     def __init__(self, numpy_rng, theano_rng=None, n_ins=784, hidden_layers_sizes=[500, 500], n_outs=10):&lt;br /&gt;
        self.sigmoid_layers = []&lt;br /&gt;
        self.rbm_layers = []&lt;br /&gt;
        self.params = []&lt;br /&gt;
        self.n_layers = len(hidden_layers_sizes)&lt;br /&gt;
        assert self.n_layers &amp;gt; 0&lt;br /&gt;
        if not theano_rng:&lt;br /&gt;
            theano_rng = MRG_RandomStreams(numpy_rng.randint(2 ** 30))&lt;br /&gt;
        # allocate symbolic variables for the data&lt;br /&gt;
        # the data is presented as rasterized images&lt;br /&gt;
        self.x = T.matrix('x')&lt;br /&gt;
        # the labels are presented as 1D vector of [int] labels&lt;br /&gt;
        self.y = T.ivector('y')&lt;br /&gt;
&amp;lt;code&amp;gt;self.sigmoid_layers&amp;lt;/code&amp;gt; будет хранить графики прямой связи, которые вместе образуют MLP, в то время как &amp;lt;code&amp;gt;self.rbm_layers&amp;lt;/code&amp;gt; будет хранить RBM, используемые для предварительной подготовки каждого уровня MLP.&lt;br /&gt;
Следующим шагом мы строим сигмоидные слои &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; (мы используем класс &amp;lt;code&amp;gt;HiddenLayer&amp;lt;/code&amp;gt;, введенный в Multilayer Perceptron, с единственной модификацией, в которой мы заменили нелинейность от &amp;lt;tex&amp;gt;tanh&amp;lt;/tex&amp;gt; на логистическую функцию $s(x) = \frac{1}{1 + e^{-x}}$ и &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; RBM, где &amp;lt;code&amp;gt;n_layers&amp;lt;/code&amp;gt; {{---}} это глубина нашей модели. Мы связываем сигмоидные слои так, что они образуют MLP, и строим каждый RBM таким образом, чтобы они разделяли весовую матрицу и скрытое смещение с соответствующим сигмоидным слоем.&lt;br /&gt;
 for i in range(self.n_layers):&lt;br /&gt;
     if i == 0:&lt;br /&gt;
         input_size = n_ins&lt;br /&gt;
     else:&lt;br /&gt;
         input_size = hidden_layers_sizes[i - 1]&lt;br /&gt;
     if i == 0:&lt;br /&gt;
         layer_input = self.x&lt;br /&gt;
     else:&lt;br /&gt;
         layer_input = self.sigmoid_layers[-1].output&lt;br /&gt;
     sigmoid_layer = HiddenLayer(rng=numpy_rng,&lt;br /&gt;
                                 input=layer_input,&lt;br /&gt;
                                 n_in=input_size,&lt;br /&gt;
                                 n_out=hidden_layers_sizes[i],&lt;br /&gt;
                                 activation=T.nnet.sigmoid)&lt;br /&gt;
     # add the layer to our list of layers&lt;br /&gt;
     self.sigmoid_layers.append(sigmoid_layer)&lt;br /&gt;
     self.params.extend(sigmoid_layer.params)&lt;br /&gt;
     # Construct an RBM that shared weights with this layer&lt;br /&gt;
     rbm_layer = RBM(numpy_rng=numpy_rng,&lt;br /&gt;
                     theano_rng=theano_rng,&lt;br /&gt;
                     input=layer_input,&lt;br /&gt;
                     n_visible=input_size,&lt;br /&gt;
                     n_hidden=hidden_layers_sizes[i],&lt;br /&gt;
                     W=sigmoid_layer.W,&lt;br /&gt;
                     hbias=sigmoid_layer.b)&lt;br /&gt;
     self.rbm_layers.append(rbm_layer)&lt;br /&gt;
&lt;br /&gt;
Осталось только сложить один последний уровень логистической регрессии, чтобы сформировать MLP. Мы будем использовать класс &amp;lt;code&amp;gt;LogisticRegression&amp;lt;/code&amp;gt;:&lt;br /&gt;
 self.logLayer = LogisticRegression(input=self.sigmoid_layers[-1].output,&lt;br /&gt;
                                    n_in=hidden_layers_sizes[-1],&lt;br /&gt;
                                    n_out=n_outs)&lt;br /&gt;
 self.params.extend(self.logLayer.params)&lt;br /&gt;
 self.finetune_cost = self.logLayer.negative_log_likelihood(self.y)&lt;br /&gt;
 self.errors = self.logLayer.errors(self.y)&lt;br /&gt;
Класс также предоставляет метод, который генерирует обучающие функции для каждой из RBM. Они возвращаются в виде списка, где элемент &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; является функцией, которая реализует один этап обучения для RBM на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 def pretraining_functions(self, train_set_x, batch_size, k):&lt;br /&gt;
      index = T.lscalar('index') # index to a minibatch&lt;br /&gt;
Чтобы иметь возможность изменять скорость обучения во время обучения, мы связываем с ней переменную &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;, которая имеет значение по умолчанию.&lt;br /&gt;
 learning_rate = T.scalar('lr')  # learning rate to use&lt;br /&gt;
 # begining of a batch, given `index`&lt;br /&gt;
 batch_begin = index * batch_size&lt;br /&gt;
 # ending of a batch given `index`&lt;br /&gt;
 batch_end = batch_begin + batch_size&lt;br /&gt;
 pretrain_fns = []&lt;br /&gt;
 for rbm in self.rbm_layers:&lt;br /&gt;
     # get the cost and the updates list&lt;br /&gt;
     # using CD-k here (persisent=None) for training each RBM.&lt;br /&gt;
     # TODO: change cost function to reconstruction error&lt;br /&gt;
     cost, updates = rbm.get_cost_updates(learning_rate, persistent=None, k=k)&lt;br /&gt;
     # compile the theano function&lt;br /&gt;
     fn = theano.function(&lt;br /&gt;
         inputs=[index, theano.In(learning_rate, value=0.1)],&lt;br /&gt;
         outputs=cost,&lt;br /&gt;
         updates=updates,&lt;br /&gt;
         givens={&lt;br /&gt;
             self.x: train_set_x[batch_begin:batch_end]&lt;br /&gt;
         }&lt;br /&gt;
     )&lt;br /&gt;
     # append `fn` to the list of functions&lt;br /&gt;
     pretrain_fns.append(fn)&lt;br /&gt;
 return pretrain_fns&lt;br /&gt;
&lt;br /&gt;
Теперь любая функция &amp;lt;code&amp;gt;pretrain_fns[i]&amp;lt;/code&amp;gt; принимает в качестве аргумента индекс и, опционально, &amp;lt;code&amp;gt;lr&amp;lt;/code&amp;gt; {{---}} скорость обучения. Обратите внимание, что имена параметров {{---}} это имена, данные переменным &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt; (например, &amp;lt;code&amp;gt;lr&amp;lt;/code&amp;gt;) при их создании, а не имена переменных python (например, &amp;lt;code&amp;gt;learning_rate&amp;lt;/code&amp;gt;). Имейте это в виду при работе с &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;. При желании, если вы укажете &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; (количество шагов Гиббса, которые нужно выполнить на CD или PCD), это также станет аргументом функции.&lt;br /&gt;
&lt;br /&gt;
Точно так же класс &amp;lt;code&amp;gt;DBN&amp;lt;/code&amp;gt; включает метод для построения функций, необходимых для тонкой настройки (&amp;lt;code&amp;gt;train_model&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;validate_model&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;test_model&amp;lt;/code&amp;gt;).&lt;br /&gt;
 def build_finetune_functions(self, datasets, batch_size, learning_rate):&lt;br /&gt;
         (train_set_x, train_set_y) = datasets[0]&lt;br /&gt;
         (valid_set_x, valid_set_y) = datasets[1]&lt;br /&gt;
         (test_set_x, test_set_y) = datasets[2]&lt;br /&gt;
         # compute number of minibatches for training, validation and testing&lt;br /&gt;
         n_valid_batches = valid_set_x.get_value(borrow=True).shape[0]&lt;br /&gt;
         n_valid_batches //= batch_size&lt;br /&gt;
         n_test_batches = test_set_x.get_value(borrow=True).shape[0]&lt;br /&gt;
         n_test_batches //= batch_size&lt;br /&gt;
         index = T.lscalar('index')  # index to a [mini]batch&lt;br /&gt;
         # compute the gradients with respect to the model parameters&lt;br /&gt;
         gparams = T.grad(self.finetune_cost, self.params)&lt;br /&gt;
         # compute list of fine-tuning updates&lt;br /&gt;
         updates = []&lt;br /&gt;
         for param, gparam in zip(self.params, gparams):&lt;br /&gt;
             updates.append((param, param - gparam * learning_rate))&lt;br /&gt;
         train_fn = theano.function(&lt;br /&gt;
             inputs=[index],&lt;br /&gt;
             outputs=self.finetune_cost,&lt;br /&gt;
             updates=updates,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: train_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: train_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         test_score_i = theano.function(&lt;br /&gt;
             [index],&lt;br /&gt;
             self.errors,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: test_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: test_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         valid_score_i = theano.function(&lt;br /&gt;
             [index],&lt;br /&gt;
             self.errors,&lt;br /&gt;
             givens={&lt;br /&gt;
                 self.x: valid_set_x[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ],&lt;br /&gt;
                 self.y: valid_set_y[&lt;br /&gt;
                     index * batch_size: (index + 1) * batch_size&lt;br /&gt;
                 ]&lt;br /&gt;
             }&lt;br /&gt;
         )&lt;br /&gt;
         # Create a function that scans the entire validation set&lt;br /&gt;
         def valid_score():&lt;br /&gt;
             return [valid_score_i(i) for i in range(n_valid_batches)]&lt;br /&gt;
         # Create a function that scans the entire test set&lt;br /&gt;
         def test_score():&lt;br /&gt;
             return [test_score_i(i) for i in range(n_test_batches)]&lt;br /&gt;
         return train_fn, valid_score, test_score&lt;br /&gt;
Обратите внимание, что возвращенные &amp;lt;code&amp;gt;valid_score&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;test_score&amp;lt;/code&amp;gt; являются не функциями &amp;lt;code&amp;gt;Theano&amp;lt;/code&amp;gt;, а скорее функциями Python. Они зацикливаются на всем наборе проверки и на всем наборе тестов, чтобы создать список потерь, полученных на этих наборах&lt;br /&gt;
&lt;br /&gt;
В конце концов&lt;br /&gt;
несколько строк кода ниже создают глубокую сеть доверия:&lt;br /&gt;
 numpy_rng = numpy.random.RandomState(123)&lt;br /&gt;
 print('... building the model')&lt;br /&gt;
 # construct the Deep Belief Network&lt;br /&gt;
 dbn = DBN(numpy_rng=numpy_rng, n_ins=28 * 28,&lt;br /&gt;
           hidden_layers_sizes=[1000, 1000, 1000],&lt;br /&gt;
           n_outs=10)&lt;br /&gt;
Эта сеть состоит из двух этапов: (1) этап предварительного обучения и (2) этап точной настройки.&lt;br /&gt;
&lt;br /&gt;
На этапе предварительного обучения мы перебираем все слои сети. Для каждого уровня мы используем скомпилированную функцию &amp;lt;code&amp;gt;anano&amp;lt;/code&amp;gt;, которая определяет вход в RBM &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-го уровня и выполняет один шаг CD-k в этом RBM. Эта функция применяется к обучающему набору для фиксированного числа эпох, заданных &amp;lt;code&amp;gt;pretraining_epochs&amp;lt;/code&amp;gt;.&lt;br /&gt;
 print('... getting the pretraining functions')&lt;br /&gt;
 pretraining_fns = dbn.pretraining_functions(train_set_x=train_set_x,&lt;br /&gt;
                                             batch_size=batch_size,&lt;br /&gt;
                                             k=k)&lt;br /&gt;
 print('... pre-training the model')&lt;br /&gt;
 start_time = timeit.default_timer()&lt;br /&gt;
 # Pre-train layer-wise&lt;br /&gt;
 for i in range(dbn.n_layers):&lt;br /&gt;
     # go through pretraining epochs&lt;br /&gt;
     for epoch in range(pretraining_epochs):&lt;br /&gt;
         # go through the training set&lt;br /&gt;
         c = []&lt;br /&gt;
         for batch_index in range(n_train_batches):&lt;br /&gt;
             c.append(pretraining_fns[i](index=batch_index,&lt;br /&gt;
                                         lr=pretrain_lr))&lt;br /&gt;
         print('Pre-training layer %i, epoch %d, cost ' % (i, epoch), end=' ')&lt;br /&gt;
         print(numpy.mean(c, dtype='float64'))&lt;br /&gt;
 &lt;br /&gt;
 end_time = timeit.default_timer()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
#[http://deeplearning.net/tutorial/DBN.html Статья Deeplearning о применении DBN] &lt;br /&gt;
#[https://en.wikipedia.org/wiki/Deep_belief_network wikipedia dbn] {{---}} Статья про DBN в Wikipedia&lt;br /&gt;
#[https://www.cs.toronto.edu/~hinton/nipstutorial/nipstut3.pdf 2007 NIPS Tutorial on: Deep Belief Nets]&lt;br /&gt;
#[https://pathmind.com/wiki/restricted-boltzmann-machine A Beginner's Guide to Restricted Boltzmann Machines]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Сети глубокого доверия]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D1%83%D0%BB%D1%8F,_%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8_%D1%86%D0%B5%D0%BB%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=83337</id>
		<title>Делители нуля, области целостности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D1%83%D0%BB%D1%8F,_%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8_%D1%86%D0%B5%D0%BB%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=83337"/>
				<updated>2022-09-01T04:43:57Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Делители нуля==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;a \in R&amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;левым делителем нуля [[Определение кольца, подкольца, изоморфизмы колец|кольца]] &amp;lt;/b&amp;gt;&amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\exists b \in R:b\neq 0 ; a\cdot b=0&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;b \in R&amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;правым делителем нуля [[Определение кольца, подкольца, изоморфизмы колец|кольца]] &amp;lt;/b&amp;gt;&amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\exists a \in R:a\neq 0 ; a\cdot b=0&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Элемент, который является и правым, и левым делителем нуля одновременно, называется &amp;lt;b&amp;gt;делителем нуля&amp;lt;/b&amp;gt;.&lt;br /&gt;
==Область целостности==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
[[Определение кольца, подкольца, изоморфизмы колец|Кольцо]], в котором &amp;lt;tex&amp;gt;0\neq 1&amp;lt;/tex&amp;gt; и произведение двух ненулевых элементов не равно нулю называется &amp;lt;b&amp;gt;областью целостности&amp;lt;/b&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B0%D0%BF%D1%81%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8&amp;diff=83336</id>
		<title>Теоремы о коллапсе полиномиальной иерархии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B0%D0%BF%D1%81%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8&amp;diff=83336"/>
				<updated>2022-09-01T04:43:52Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Если &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Pi_i = \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &amp;lt;tex&amp;gt;L \in \Pi_{i+1} \Leftrightarrow \overline{L} \in \Sigma_{i+1} \Leftrightarrow \overline{L} \in \Sigma_i \Leftrightarrow L \in \Pi_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема о коллапсе полиномиальной иерархии при совпадении &amp;lt;tex&amp;gt;\Sigma_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\Sigma_{i+1}&amp;lt;/tex&amp;gt; ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если существует &amp;lt;tex&amp;gt;i \colon \Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_i = \mathrm{PH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Для доказательства теоремы достаточно показать, что если такое &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; существует, то &amp;lt;tex&amp;gt;\forall j &amp;gt; i&amp;lt;/tex&amp;gt; верно, что &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем по индукции.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt; из условия.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Индукционный переход'''. Докажем, что если &amp;lt;tex&amp;gt;\Sigma_n = \Sigma_{n+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_{n+1} = \Sigma_{n+2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \Sigma_{n+2}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L = \{x \bigm| \exists y_1 \forall y_2 \ldots Q y_{n+2} R_L^{n+2}(x, y_1 \ldots y_{n+2})\}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;\forall y_2 \ldots Q y_{n+2} R_L^{n+2}(x, y_1 \ldots y_{n+2}) = f(x, y_1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда получим язык &amp;lt;tex&amp;gt;L_f = \{\langle x, y_1\rangle \bigm| f(x, y_1) = 1\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;L_f \in \Pi_{n+1}&amp;lt;/tex&amp;gt; и из вышедоказанной леммы следует, что &amp;lt;tex&amp;gt;L_f \in \Pi_n&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Из определения сложностного класса &amp;lt;tex&amp;gt;\Pi_n&amp;lt;/tex&amp;gt; получаем, что &amp;lt;tex&amp;gt;\exists R_{L_f}^{n} \colon \langle x, y_1 \rangle \in L_f \Leftrightarrow \forall y_2 \exists y_3 \ldots Q y_{n+1} R_{L_f}^{n}(\langle x, y_1\rangle, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x \in L \Leftrightarrow \exists y_1 \forall y_2 \ldots Q y_{n+1} R_L^{n+1}(x, y_1, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;R_L^{n+1}(x, y_1, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;R_{L_f}^n(\langle x, y_1\rangle, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
То есть язык &amp;lt;tex&amp;gt;L \in \Sigma_{n+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема о коллапсе полиномиальной иерархии при совпадении &amp;lt;tex&amp;gt;\Sigma_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\Pi_i&amp;lt;/tex&amp;gt; ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если существует &amp;lt;tex&amp;gt;i &amp;gt; 0\colon \Sigma_i = \Pi_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_i = \mathrm{PH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &lt;br /&gt;
Для доказательства покажем, что &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, и воспользуемся предыдущей теоремой.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \Sigma_{i+1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L =\{x \bigm| \exists y_1 \forall y_2 \ldots Q y_{i+1} R_L^{i+1}(x, y_1 \ldots y_{i+1})\}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;\forall y_2 \exists y_3 \ldots Q y_{i+1} R_L^{i+1}(x, y_1 \ldots y_{i+1}) = f(x, y_1)&amp;lt;/tex&amp;gt;. Получим язык &amp;lt;tex&amp;gt;L_f = \{ \langle x, y_1 \rangle \bigm| f(x, y_1) = 1\}&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;L_f \in \Pi_i&amp;lt;/tex&amp;gt;, и из условия теоремы &amp;lt;tex&amp;gt;L_f \in \Sigma_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По определению сложностного класса &amp;lt;tex&amp;gt;\Sigma_i \; \exists R_{L_f}^i \colon \langle x, y_1 \rangle \in L_f \Leftrightarrow \exists y_2 \forall y_3 \ldots Q y_{i+1} R_{L_f}^i(\langle x, y_1 \rangle, y_2 \ldots y_{i+1})&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;x \in L \Leftrightarrow \exists \langle y_1, y_2 \rangle \forall y_3 \ldots Q y_{i+1} R_L^i(x, \langle y_1, y_2\rangle \ldots y_{i+1})&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;R_L^i(x, \langle y_1, y_2\rangle, y_3 \ldots, y_{i+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;R_{L_f}^i(\langle x, y_1\rangle, y_2, y_3 \ldots y_{i+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;L \in \Sigma_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\Sigma_0 = \Pi_0 = \mathrm{P}&amp;lt;/tex&amp;gt;, а потому формулировка теоремы не имеет смысла при &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* S.Arora, B.Barak. The polynomial hierarchy and alternations. Cambridge University, January 2007. [http://www.cs.princeton.edu/theory/complexity/phchap.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D1%83%D0%BC%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2._%D0%9E%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D1%80._%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BF%D0%B5%D1%80%D0%BF%D0%B5%D0%BD%D0%B4%D0%B8%D0%BA%D1%83%D0%BB%D1%8F%D1%80%D0%B5&amp;diff=83335</id>
		<title>Ортогональная сумма подпространств. Ортогональный проектор. Задача о перпендикуляре</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D1%83%D0%BC%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B4%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2._%D0%9E%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D1%80._%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BF%D0%B5%D1%80%D0%BF%D0%B5%D0%BD%D0%B4%D0%B8%D0%BA%D1%83%D0%BB%D1%8F%D1%80%D0%B5&amp;diff=83335"/>
				<updated>2022-09-01T04:43:46Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__TOC__ &lt;br /&gt;
==Ортогональная сумма подпространств==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L - &amp;lt;/tex&amp;gt; подпространство унитарного линейного пространства &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, тогда говорят, что &amp;lt;tex&amp;gt;x \bot L &amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;x \bot \forall y \in L &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;M=\{&amp;lt;/tex&amp;gt; все &amp;lt;tex&amp;gt;x \in E: \ x \bot L \}&amp;lt;/tex&amp;gt; называется ортогональным дополнением к &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, обозначается &amp;lt;tex&amp;gt;M=L^ \bot &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;E=L \dotplus M&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
'''Шаг 1.''' Рассмотрим &amp;lt;tex&amp;gt;\{e_1, e_2...e_k\}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;L \ (k=dimL)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 2.''' Дополним &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^{k}&amp;lt;/tex&amp;gt; до базиса &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, получим &amp;lt;tex&amp;gt;\{e_1, e_2...e_k, x_{k+1}...x_n\} \ (n=dimE)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 3.''' Приведем этот набор к ОРТН базису (процесс Грама-Шмидта), в итоге получим &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^{n}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис, при этом &amp;lt;tex&amp;gt;\{e_i\}_{i=k+1}^{n} \in M&amp;lt;/tex&amp;gt; (по определению и построению)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;M=&amp;lt;/tex&amp;gt; ло &amp;lt;tex&amp;gt;\{e_{k+1}...e_n\}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;E=L+M&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Шаг 4.''' Докажем, что сумма должна быть прямой.&lt;br /&gt;
&amp;lt;tex&amp;gt;\forall x=\sum\limits_{i=1}^{n}\xi^ie_i=\sum\limits_{i=1}^{k}\xi^ie_i+\sum\limits_{i=k+1}^{n}\xi^ie_i=f+g&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;f \in L, g \in M&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f,g&amp;lt;/tex&amp;gt; {{---}} единственные. Докажем этот факт от противного.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x=f+g=f_1+g_1 \Rightarrow f-f_1=g_1-g (*)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left\langle (*),f-f_1 \right\rangle: \Vert f-f_1 \Vert^2=\left\langle g_1-g,f-f_1\right\rangle=0&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;(g_1-g) \in L, (f-f_1) \in M, L \bot M&amp;lt;/tex&amp;gt;) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow f-f_1=0 \Rightarrow f=f_1 \Rightarrow g=g_1&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;\oplus&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
NB: &amp;lt;tex&amp;gt;E=L \oplus M&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Прямая сумма попарно перпендикулярных пп называется их '''ортогональной суммой'''.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;tex&amp;gt; \dotplus \sum\limits_{i=1}^{k} L_i= \oplus \sum\limits_{i=1}^{k}L_i (L_i \bot L_j, i \ne j)&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;E=L \dotplus M&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{P}_{L}^{\Vert M}&amp;lt;/tex&amp;gt; называется ортогональным проектором на пп &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; и обозначается &amp;lt;tex&amp;gt;\mathcal{P}_{L}^{\bot}x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{P}_{M}^{\Vert L}&amp;lt;/tex&amp;gt; называется ортогональным проектором на пп &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и обозначается &amp;lt;tex&amp;gt;\mathcal{P}_{M}^{\bot}x&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;x= \mathcal{P}_{L}^{\bot}x+ \mathcal{P}_{M}^{\bot}x&amp;lt;/tex&amp;gt; называется разложением вектора &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в сумму ортогональной проекции на пп &amp;lt;tex&amp;gt;L&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;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^{k}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;L \ (dimL=k)&amp;lt;/tex&amp;gt; тогда &amp;lt;tex&amp;gt;\mathcal{P}_{L}^{\bot}x= \sum\limits_{i=1}^{k}\left\langle x,e_i\right\rangle e_i. &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Без ограничения общности рассмотрим &amp;lt;tex&amp;gt;\{e_1..e_k, e_{k+1}..e_n\}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^{k}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, a &amp;lt;tex&amp;gt;\{e_i\}_{i=k+1}^{n}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; (на остальные вектора распространим по линейности)&lt;br /&gt;
&lt;br /&gt;
'''Шаг 1.''' Рассмотрим &amp;lt;tex&amp;gt;e_j \ (j=1..k): \mathcal{P}_{L}^{\bot}e_j= \sum\limits_{i=1}^{k}\left\langle e_j,e_i\right\rangle e_i=\left\langle e_j,e_j\right\rangle e_j=e_j \Rightarrow \forall x \in L: \mathcal{P}_{L}^{\bot}x=x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Шаг 2.''' Рассмотрим &amp;lt;tex&amp;gt;e_s \ (s=k+1..n): \mathcal{P}_{L}^{\bot}e_s= \sum\limits_{i=1}^{k}\left\langle e_s,e_i\right\rangle e_i=0 \Rightarrow \forall y \in M: \mathcal{P}_{L}^{\bot}y=0 &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; \Vert \mathcal{P}_{L}^{\bot} x \Vert \leqslant \Vert x \Vert, \ \Vert \mathcal{P}_{M}^{\bot} x \Vert \leqslant \Vert x \Vert. &amp;lt;/tex&amp;gt; &lt;br /&gt;
|proof=&lt;br /&gt;
по теореме Пифагора &amp;lt;tex&amp;gt; \Vert x \Vert^2 = \Vert \mathcal{P}_{L}^{\bot} x\Vert^2 + \Vert \mathcal{P}_{M}^{\bot} x \Vert^2. &amp;lt;/tex&amp;gt; &lt;br /&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;x&amp;lt;/tex&amp;gt;, то есть его разложения по формуле: &amp;lt;tex&amp;gt;x= \mathcal{P}_{L}^{\bot}x+ \mathcal{P}_{M}^{\bot}x&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
(где &amp;lt;tex&amp;gt;\mathcal{P}_{L}^{\bot}x&amp;lt;/tex&amp;gt; {{---}} ортогональный проектор на пп &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} пп унитарного пространства &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, a &amp;lt;tex&amp;gt;\mathcal{P}_{M}^{\bot}x&amp;lt;/tex&amp;gt; {{---}} ортогональный проектор на пп &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} ортогональное дополнение &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Способ 1(через ОРТН базис)===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
1) Найти &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^{k}&amp;lt;/tex&amp;gt; {{---}} ОРТН базис &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
2) &amp;lt;tex&amp;gt; \mathcal{P}_{L}^{\bot}x = \sum\limits_{i=1}^{k} \left\langle x,e_i \right\rangle e_i; \ \mathcal{P}_{M}^{\bot} x = x - \mathcal{P}_{L}^{\bot}x. &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Способ 2 (через систему уравнений)===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;\{a_1, a_2...a_k\}&amp;lt;/tex&amp;gt; {{---}} базис &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; (не ОРТН)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;x= \mathcal{P}_{L}^{\bot}x+ \mathcal{P}_{M}^{\bot}x=\gamma^1a_1 + \gamma^2a_2+...+\gamma^ka_k+\mathcal{P}_{M}^{\bot}x \ (*)&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\left\langle a_1,(*) \right\rangle: \left\langle a_1,x \right\rangle = \overline{\gamma_1}\left\langle a_1,a_1 \right\rangle+...+\overline{\gamma_k}\left\langle a_1,a_k \right\rangle \\&lt;br /&gt;
\left\langle a_2,(*) \right\rangle: \left\langle a_2,x \right\rangle = \overline{\gamma_1}\left\langle a_2,a_1 \right\rangle+...+\overline{\gamma_k}\left\langle a_2,a_k \right\rangle \\&lt;br /&gt;
\cdot \\&lt;br /&gt;
\cdot \\&lt;br /&gt;
\left\langle a_k,(*) \right\rangle: \left\langle a_k,x \right\rangle = \overline{\gamma_1}\left\langle a_k,a_1 \right\rangle+...+\overline{\gamma_k}\left\langle a_k,a_k \right\rangle&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Решая эту систему уравнений для неизвестных &amp;lt;tex&amp;gt;\overline{\gamma_i}&amp;lt;/tex&amp;gt;, находим коэффициенты разложения &amp;lt;tex&amp;gt;\mathcal{P}_{L}^{\bot}x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{P}_{M}^{\bot} x = x - \mathcal{P}_{L}^{\bot}x. &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;\{e_1..e_k\}&amp;lt;/tex&amp;gt; {{---}} результат ортогонализации по Граму-Шмидту набора &amp;lt;tex&amp;gt;\{a_1..a_k\}&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;G(a_1..a_k)=\Vert e_1 \Vert^2 \cdot \Vert e_2 \Vert^2 \cdot...\cdot \Vert e_k \Vert^2&amp;lt;/tex&amp;gt; называется '''определителем Грама''' соответствующего набора векторов &amp;lt;tex&amp;gt;\{a_i\}_{i=1}^{k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math dpi = &amp;quot;145&amp;quot;&amp;gt;G(a_1..a_k)= det\begin{pmatrix} &lt;br /&gt;
{\left\langle a_1,a_1 \right\rangle} &amp;amp; {\left\langle a_1,a_2 \right\rangle} &amp;amp; \cdots &amp;amp; {\left\langle a_1,a_k \right\rangle} \\&lt;br /&gt;
{\left\langle a_2,a_1 \right\rangle} &amp;amp; {\left\langle a_2,a_2 \right\rangle} &amp;amp; \cdots &amp;amp; {\left\langle a_2,a_k \right\rangle} \\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
{\left\langle a_k,a_1 \right\rangle} &amp;amp; {\left\langle a_k,a_2 \right\rangle} &amp;amp; \cdots &amp;amp; {\left\langle a_k,a_k \right\rangle} \\&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;0 \leqslant G(a_1..a_k) \leqslant \Vert a_1 \Vert^2 \cdot \Vert a_2 \Vert^2 \cdot...\cdot \Vert a_k \Vert^2&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;G(a_1..a_k)=0 \Leftrightarrow \{a_1,a_2...a_k\}&amp;lt;/tex&amp;gt; {{---}} ЛЗ.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_-_WAN&amp;diff=83334</id>
		<title>Беспроводные сети - WAN</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8_-_WAN&amp;diff=83334"/>
				<updated>2022-09-01T04:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D0%B5&amp;diff=83333</id>
		<title>Машинное обучение в медицине</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D0%B5&amp;diff=83333"/>
				<updated>2022-09-01T04:43:35Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Машинное обучение в медицине используют очень активно, находя все больше областей для его применения. Сейчас в медицине используют почти [[Общие понятия#Классификация задач машинного обучения|все виды машинного обучения]]: обучение с учителем, без учителя, с частичным привлечением учителя, с подкреплением. Наиболее активно машинное обучение в медицине используют для решения проблем по диагностике заболеваний и дизайну лекарств. Эти задачи относят к обучению с учителем или с частичным привлечением учителя. Кроме того, машинное обучение стали применять в персонализированной медицине и генерации данных различных исследований для анонимизации данных пациентов. В этих задачах сейчас все больше применяют обучение с подкреплением и обучение без учителя, в частности, [[Generative Adversarial Nets (GAN)|генеративные состязательные сети]]. Машинное обучение в медицине начали изучать еще в 2000-ых и оно продолжает активно развиваться и в наши дни.&lt;br /&gt;
&lt;br /&gt;
==Диагностика заболеваний по результатам рентгенологических и УЗИ исследований==&lt;br /&gt;
&lt;br /&gt;
===Диагностика по изображению===&lt;br /&gt;
[[Файл:Brain tumor mri cnn.jpg|thumb|left|200px|Рисунок 1. Классификация результатов МРТ по наличию опухоли&amp;lt;ref&amp;gt;[https://biomedpharmajournal.org/vol11no3/brain-tumor-classification-using-convolutional-neural-networks/ Seetha J, Raja S. S. Brain Tumor Classification Using Convolutional Neural Networks. Biomed Pharmacol J 2018;11(3).]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
[[Файл:Covid cnn recognition.png|thumb|400px|Рисунок 2. Пример вероятностной классификации КТ грудной клетки&amp;lt;ref&amp;gt;[https://arxiv.org/ftp/arxiv/papers/2004/2004.04931.pdf CoroNet: A deep neural network for detection and diagnosis of COVID-19 from chest x-ray images, 2020]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
В диагностике заболеваний есть большое количество задач, которые можно решить при помощи машинного обучения, а в частности, при помощи анализа результатов различных исследований, таких как рентген, УЗИ или МРТ. В основном задача любой модели сводится к предсказанию, болен ли человек сейчас. В зависимости от целей исследования используют разные типы [[Общие понятия#Типы задач|классификации]]: обычную (рис. 1), мультиклассовую или вероятностную (рис. 2).&lt;br /&gt;
&lt;br /&gt;
Для решения таких задач чаще всего используют [[глубокое обучение]]. Модели на вход подается картинка с рентгенологическим или ультразвуковым исследованием пациента, и по ним предсказывают наличие болезни. Обычно внутри таких моделей-классификаторов лежат [[сверточные нейронные сети]], а иногда к ним добавляется [[механизм внимания]]. За основу берутся state-of-the-art модели в области сверточных нейронных сетей, такие как GoogLeNet&amp;lt;ref&amp;gt;[https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/43022.pdf Szegedy et al., Going Deeper with Convolutions, 2015]&amp;lt;/ref&amp;gt;, при этом точность предсказаний превышает 90%. Такие модели учатся на размеченных тренировочных наборах данных, поэтому их можно отнести к обучению с учителем. Большое распространение такие классификаторы получили в предсказании злокачественности новообразований, классификации заболеваний легких, подборе дозы контраста при проведении МРТ.&lt;br /&gt;
&lt;br /&gt;
===Применения===&lt;br /&gt;
[[Файл:Spine x ray cnn.png|thumb|Рисунок 3. Пример локализации шейного отдела позвоночника на рентгене&amp;lt;ref&amp;gt;[https://lhncbc.nlm.nih.gov/system/files/pub9781.pdf Zhiyun Xue et al., Gender Detection from Spine X-ray Images Using Deep Learning, 2018]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Многие модели учатся не только определять, есть ли опухоль на данном образце, но и локализировать ее (рис. 3). Таким образом, необходимо решить задачу сегментации изображения, то есть выделения каких-то ее наиболее важных частей. Технически задача не сильно отличается от предыдущей и решается все теми же сверточными нейронными сетями.&lt;br /&gt;
&lt;br /&gt;
Поскольку точность предсказаний у описанных выше моделей достаточно высока, их стали применять на практике. Сейчас ведутся исследования по внедрению таких моделей в УЗИ-аппараты для того, чтобы быстрее и точнее определять местоположение и злокачественность опухоли. Кроме того, такие модели стали применять в направленной лучевой терапии, когда злокачественная опухоль облучается различными видами частиц. Известно, что эти частицы уничтожают не только раковые, но и здоровые клетки. Именно поэтому активно внедряются модели, которые могут подсказать аппарату точное направление облучения. Также сверточные сети стали использовать для определения дозы контрастного вещества при МРТ&amp;lt;ref&amp;gt;[https://www.sciencedirect.com/science/article/pii/S0939388918301181 Lundervold et al., An overview of deep learning in medical imaging focusing on MRI, 2019]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Генерация результатов исследований===&lt;br /&gt;
[[Файл:3d mri models comparison.png|450px|thumb|Рисунок 4. Сравнение различных моделей для генерации 3D изображений МРТ исследований&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1908.02498.pdf Generation of 3D Brain MRI Using Auto-Encoding Generative Adversarial Networks]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Для обучения сверточных нейронных сетей необходимо большое количество данных, которые очень часто достаточно тяжело или даже невозможно получить из-за запрета на использование данных исследований без согласия пациента. Поэтому сейчас для получения достаточно больших датасетов стали применять [[Generative Adversarial Nets (GAN)|генеративные состязательные сети (GAN)]]. &lt;br /&gt;
&lt;br /&gt;
Задачу таких GAN можно разделить на две: генерация результатов исследований здоровых пациентов и пациентов с патологиями. В случае второй задачи важно, чтобы сгенерированные изображения правильно определялись именно по типу патологии.&lt;br /&gt;
&lt;br /&gt;
Основная проблема, с которой сталкиваются такие модели {{---}} необходимость очень точно определять границы объекта на сгенерированном изображении, а также не допускать размытости. Эти две проблемы долгое время не получалось решить без большого количества реальных данных, вследствие чего не было возможным применение сгенерированных изображений на практике. &lt;br /&gt;
&lt;br /&gt;
Сильно улучшить поведение моделей удалось путем использования [[Generative Adversarial Nets (GAN)#Ошибка Вассерштейна|метрики Вассерштейна]]&amp;lt;sup&amp;gt;[на 09.01.21 не создан]&amp;lt;/sup&amp;gt;. Интуитивно, если каждая мера измеряет распределение «грунта» по метрическому пространству, то расстояние Вассерштейна измеряет минимальную стоимость преобразования одного распределения грунта в другое, при этом предполагается, что стоимость прямо пропорциональна количеству грунта и расстоянию, на которое его надо перетащить. Использование такой метрики в GAN помогло сильно улучшить поведение моделей при генерации данных МРТ исследований. Одной из моделей, в которых стали применять метрику Вассерштейна для генерации изображений исследований, стала 3D-alpha-WGAN (рис. 4).&lt;br /&gt;
&lt;br /&gt;
==Персонализированная медицина==&lt;br /&gt;
Персонализированная медицина (англ. personalized medicine) {{---}} новая организационная модель построения медицинской помощи пациентам, которая основывается на подборе индивидуальных лечебных, диагностических и превентивных средств, оптимально подходящих по биохимическим, физиологическим и генетическим особенностям организма.&lt;br /&gt;
&lt;br /&gt;
Основная цель нового направления в медицине заключается в персонализации и оптимизации профилактических мероприятий и лечения пациентов для исключения негативных последствий и осложнений, проявляющихся из-за индивидуальных особенностей.&lt;br /&gt;
Основные отрасли медицины, где применяются новые принципы — онкология, фармация и фармакогеномика. Последняя занимается изучением реакций организма на медицинские препараты в зависимости от индивидуальных наследственных факторов.&lt;br /&gt;
&lt;br /&gt;
===Экспрессия генов и анализ транскриптомных данных===&lt;br /&gt;
[[Файл:Gene expression based cnn.jpg|400px|thumb|Рисунок 5. Примеры архитектур сверточных сетей, предсказывающих вероятность рака по экспрессии генов&amp;lt;ref&amp;gt;[https://bmcmedgenomics.biomedcentral.com/articles/10.1186/s12920-020-0677-2 Convolutional neural network models for cancer type prediction based on gene expression]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Многие модели ориентируются на данные экспрессии генов&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%D0%B3%D0%B5%D0%BD%D0%BE%D0%B2 Википедия: Экспрессия генов]&amp;lt;/ref&amp;gt; (в широком смысле {{---}} процесс получения белка из последовательности ДНК). Известно, что от количества некоторых белков напрямую зависит возможность клеток становиться раковыми, а также порождать другие заболевания. Совокупность изменений в большом количестве различных белков может приводить к заболеванию. Именно поэтому модели персонализированной медицины основываются на данных экспрессии. Часто в качестве основы используют сверточные нейронные сети (рис. 5), располагая гены, отвечающие за похожие по своей функции белки, рядом друг с другом.&lt;br /&gt;
&lt;br /&gt;
Прямой анализ экспрессии генов {{---}} трудная и дорогостоящая задача, поэтому часто обращаются к транскриптомным данным. Транскриптом {{---}} совокупность всех молекул РНК&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A0%D0%B8%D0%B1%D0%BE%D0%BD%D1%83%D0%BA%D0%BB%D0%B5%D0%B8%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BA%D0%B8%D1%81%D0%BB%D0%BE%D1%82%D0%B0 Википедия: РНК]&amp;lt;/ref&amp;gt;, которые присутствовали в клетке после завершения процесса трансрипции (получение РНК с матрицы ДНК). Транскриптом включает в себя матричную РНК (мРНК) {{---}} РНК, с которой впоследствии транслируются белки, и некодирующую РНК, которая, в свою очередь, не используется для получения белков. Транскриптомные данные чаще всего получают с помощью РНК-секвенирования (англ. RNA-seq) или ДНК-микрочипов (англ. DNA-microarray). С помощью специальных процедур из взятой у пациента пробы выделяют мРНК, которая затем наносится на ДНК-микрочип, где цепочки мРНК зацепляются, образуя двухцепочечные молекулы. Число цепочек, зацепившихся за определенный участок ДНК-микрочипа, определяет интенсивность свечения этого участка при сканировании. Так косвенно определяют экспрессию каждого из генов. Следующая проблема, с которой сталкиваются исследователи {{---}} слишком большое количество генов (например, у человека их около 28000). Вследствие этого очень тяжело обучать модели, поэтому приходится прибегать к [[Уменьшение размерности|уменьшению размерности]].&lt;br /&gt;
&lt;br /&gt;
===Уменьшение размерности при работе с данными экспрессии генов===&lt;br /&gt;
[[Файл:Melif scheme.png|400px|thumb|Рисунок 6. Описание алгоритма MeLiF&amp;lt;ref&amp;gt;[http://fppo.ifmo.ru/?page1=16&amp;amp;page2=86&amp;amp;number_file=E63E46A38DD44C84B7B9446996EB225F Сметанников Иван Борисович, Метод и алгоритмы выбора признаков в предсказательном моделировании фенотипических характеристик на основе транскриптомных данных]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Для уменьшения размерности в случае биологических данных применяются методы, основным критерием которых становится их скорость. Поскольку количество генов очень велико, чаще всего нет возможности опробовать [[Уменьшение размерности#Встроенные методы | встроенные]] и [[Уменьшение размерности#Оберточные методы | оберточные]] методы, поэтому используют [[Уменьшение размерности#Фильтры | фильтры]]. &lt;br /&gt;
&lt;br /&gt;
Одним из примеров моделей, основанных на фильтрах является модель MeLiF&amp;lt;ref&amp;gt;[https://www.researchgate.net/publication/317201206_MeLiF_Filter_Ensemble_Learning_Algorithm_for_Gene_Selection| Smetannikov et al., MeLiF: Filter Ensemble Learning Algorithm for Gene Selection]&amp;lt;/ref&amp;gt; (рис. 6), которая берет несколько фильтров &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; с соответствующими функциями измерения релевантности признака &amp;lt;tex&amp;gt;\mu_i&amp;lt;/tex&amp;gt;, после чего строит новую меру значимости как &amp;lt;tex&amp;gt;\mu=\sum_{i=1}^{|M|} \alpha_{i} \mu_{i}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\left\{\alpha_{i}\right\}_{i=1}^{|M|}&amp;lt;/tex&amp;gt; {{---}} набор вещественных коэффициентов. После получения новой меры значимости происходит оценка модели на &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; лучших выбранных признаках, которая состоит в полном цикле тренировки и тестирования. В случае удовлетворительного результата алгоритм завершается, возвращая текущий набор признаков, иначе {{---}} возвращается снова к получению новой меры на &amp;lt;tex&amp;gt;t+1&amp;lt;/tex&amp;gt; признаках.&lt;br /&gt;
&lt;br /&gt;
===Медицинская карта===&lt;br /&gt;
Другая задача {{---}} предсказать, заболеет ли человек в будущем. Для этого часто используется электронная медицинская карта пациента, и на вход сети подаются данные о пациенте, результаты исследований, его генеалогическое древо и другая медицинская информация. Основываясь на полученных данных, модель должна предсказать вероятность того, что человек может заболеть каждой болезнью из приведенного набора. Если вероятность хотя бы по одному из маркеров превышает некоторое значение {{---}} такая модель рекомендует пациенту обратиться к специалисту и относит его в группу высокого риска по этому параметру. В свою очередь специалист может подтвердить или же опровергнуть опасения модели, отдавая ей результат {{---}} права модель или нет. Таким образом, эта проблема относится к классу задач [[Обучение с подкреплением|обучения с подкреплением]]. С точки зрения архитектуры моделей {{---}} в таких задачах часто используют [[метод опорных векторов (SVM)]] или [[глубокое обучение]].&lt;br /&gt;
&lt;br /&gt;
==Поиск лекарств==&lt;br /&gt;
Поиск лекарств (англ. drug discovery, drug design) {{---}} процесс поиска новых лекарственных средств, часто основанный на знаниях о биологической мишени (целевом белке, с которым должно взаимодействовать лекарственное вещество).&lt;br /&gt;
При поиске новых лекарственных средств часто прибегают к помощи машинного обучения в таких задачах, как предсказание молекулярных свойств потенциальной молекулы лекарства, формы какого-либо белка, активности взаимодействия между веществами.&lt;br /&gt;
===Предсказание молекулярных свойств===&lt;br /&gt;
[[Файл:MoleculeGNN.PNG|400px|thumb|Рисунок 7. Пример молекулярного графа]]&lt;br /&gt;
[[Файл:Morgan fingerprint.jpg|400px|thumb|Рисунок 8. Пример Morgan Fingerprint для молекулы&amp;lt;ref&amp;gt;[https://www.sciencedirect.com/science/article/abs/pii/S1046202314002631  Adrià Cereto-Massagué et al., Molecular fingerprint similarity search in virtual screening, 2015]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Одна из главных задач машинного обучения при поиске новых лекарств {{---}} сужение круга их поиска. Чаще всего фармацевтические компании имеют на руках библиотеки с огромным количеством веществ, которые они потенциально могут синтезировать и опробовать в качестве лекарства. Но обычно размеры этих библиотек составляют тысячи молекул, поэтому синтезировать и проверить каждую из них не представляется возможным. В этом случае прибегают к предсказанию некоторых свойств этих молекул, которые точно определяют, может ли молекула быть использована как лекарство. Для предсказания свойств молекул обычно используют молекулярный граф (рис. 7) {{---}} графическое представление молекулы (ее атомов и связей).&lt;br /&gt;
&lt;br /&gt;
Первые нейронные сети для предсказания молекулярных свойств использовали Моргановские фингерпринты (англ. Morgan fingerpints), которые для каждого атома в молекуле выделяли всех его соседей на каком-то определенном расстоянии (которое является [[Настройка гиперпараметров#Гиперпараметры|гиперпараметром]]) и смотрели на наличие такой подструктуры в молекуле (рис. 8). Получался аналог [[Векторное представление слов#One-hot encoding|оne-hot кодирования]]. Впоследствии этот метод был несколько усовершенствован, и стали смотреть не на наличие подструктуры, а на то, сколько раз она встречается в молекуле. Прорыв в этой области случился с появлением сети NeuralFingerprints &amp;lt;ref&amp;gt;[https://arxiv.org/abs/1509.09292 Duvenaud et al., Convolutional Networks on Graphs for Learning Molecular Fingerprints, 2015]&amp;lt;/ref&amp;gt;, которая является примером одной из первых попыток применения [[графовые нейронные сети|графовых нейронных сетей]] в предсказании свойств молекул. &lt;br /&gt;
&lt;br /&gt;
NeuralFingerprints принимает один гиперпараметр {{---}} максимальное расстояние, которое нужно учитывать при просмотре соседей каждого атома. После этого для каждого расстояния для каждого атома суммируются атомные представления его соседей на текущем расстоянии. Таким образом, получается векторное представление текущего атома фиксированной длины, которая равна количеству свойств у одного атома. Каждый элемент такого представления  умножается на обучаемый параметр, уникальный для номера свойства и текущего рассматриваемого расстояния. После этого применяется функция активации к полученному ранее вектору, умноженному на вес, отвечающий за текущее расстояние. Полученные результаты для каждого из атомов на каждом из расстояний суммируются и получается результирующий вектор свойств для молекулы. Таким образом, в этой сети обучаемые параметры {{---}} веса для каждого из свойств атомов на каждом расстоянии (&amp;lt;tex&amp;gt;H^i_j&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} индекс номера свойства (в модели их всего 5), &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; {{---}} индекс для текущего расстояния) и веса для каждого из расстояний (&amp;lt;tex&amp;gt;W_j&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; {{---}} индекс для текущего расстояния). Псевдокод представлен ниже.&lt;br /&gt;
 '''function''' neuralFingerptint(molecule, R, H, W): &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# R - максимальное расстояние, H - матрица весов размера len(molecule)&amp;lt;tex&amp;gt;\cdot&amp;lt;/tex&amp;gt;R, W - вектор весов размера R&amp;lt;/span&amp;gt;&lt;br /&gt;
    f = array[len(molecule), 0]&lt;br /&gt;
    '''for''' a in molecule: &lt;br /&gt;
        r[a] = g(a) &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# записываем свойства для каждого атома&amp;lt;/span&amp;gt;&lt;br /&gt;
    '''for''' L = 1 to R:&lt;br /&gt;
        '''for''' a in molecule: &lt;br /&gt;
            neighbors = '''neighbors'''(a) &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# смотрим соседей на расстоянии L от текущего атома a&amp;lt;/span&amp;gt;&lt;br /&gt;
        v = r[a] + '''sum'''(r[i] for i in neighbors) &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# суммируем вектора соседей и вектор текущего атома&amp;lt;/span&amp;gt;&lt;br /&gt;
        r[a] = '''σ'''(v &amp;lt;tex&amp;gt;\cdot&amp;lt;/tex&amp;gt; H[a][L]) &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# изменяем представление текущего атома&amp;lt;/span&amp;gt;&lt;br /&gt;
        i = '''softmax'''(r[a] &amp;lt;tex&amp;gt;\cdot&amp;lt;/tex&amp;gt; W[L]) &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# получаем вектор для текущего атома и расстояния&amp;lt;/span&amp;gt;&lt;br /&gt;
        f = f + i  &amp;lt;span style=&amp;quot;color:Green&amp;quot;&amp;gt;# добавляем его к ответу&amp;lt;/span&amp;gt;&lt;br /&gt;
    '''return''' f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эта сеть была одной из первых в этой области, и сейчас используется как базовый метод в множестве статей. В основу новых методов и сейчас чаще всего ложатся [[графовые нейронные сети]]. Подходы графовых нейронных сетей адаптируют под молекулярный граф путем поиска элементов на расстоянии не более, чем N (где N является гиперпараметром), или последовательным рассмотрением каждой вершины и усреднением полученных значений.&lt;br /&gt;
&lt;br /&gt;
===Предсказание формы белка===&lt;br /&gt;
[[Файл:AlphaFold 2 block design.png|400px|thumb|Рисунок 9. Архитектура AlphaFold2, модели для предсказания пространственной структуры белка&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/AlphaFold Wikipedia: AlphaFold]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Секвенирование&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Sequencing Википедия: Секвенирование]&amp;lt;/ref&amp;gt; {{---}} процесс получения нуклеотидной последовательности из молекулы ДНК.&lt;br /&gt;
Из нуклеотидной последовательности можно получить аминокислотную последовательность, которая, в свою очередь, кодирует любой белок в организме.&lt;br /&gt;
&lt;br /&gt;
Предсказание формы белка {{---}} другая очень важная задача машинного обучения в фармацевтике. С возникновением технологий секвенирования ДНК у сообщества появилась возможность быстро и достаточно качественно прочитывать белковые последовательности, но получать пространственную структуру полученных белков экспериментально все еще очень трудоемко и дорого. Тем не менее, знать пространственную структура белка очень важно, поскольку от нее сильно зависят типы соединений, которые могут связаться (прореагировать) с этим белком. Например, при подборе потенциальной вакцины, необходимо точно знать форму антитела, чтобы понимать, сможет ли это соединение захватить мишень (вирус, бактерию, белок).&lt;br /&gt;
&lt;br /&gt;
Предсказание формы белков основано на нейронных сетях, которые как вход используют очень длинную аминокислотную последовательность (размер алфавита ограничен {{---}} всего различных аминокислот 20), а на выходе должны предсказать значения торсионных углов&amp;lt;ref&amp;gt;[https://kodomo.fbb.msu.ru/~youthofchemist/projects/Term_1/Protein/phipsi.html Торсионные углы]&amp;lt;/ref&amp;gt; между аминокислотами. В декабре 2020 года DeepMind (исследовательское подразделение Google) заявили, что решили проблему пространственной структуры белка&amp;lt;ref&amp;gt;[https://meduza.io/feature/2020/12/13/fundamentalnaya-problema-belka-reshena-uchenye-bilis-nad-ney-polveka-no-vse-sdelali-programmisty-google-i-eto-mozhet-byt-ochen-vazhno-dlya-meditsiny Фундаментальная «проблема белка» решена]&amp;lt;/ref&amp;gt;. Авторы модели утверждают, что значение метрики глобального расстояния (англ. global distance test) в их сети AlphaFold2 (рис. 9) превысило 90%. Метрика глобального расстояния {{---}} это метрика, которая вычисляется для каждой аминокислоты как процент атомов углерода из главной цепи белка, которые в сгенерированном белке расположены не более чем на расстоянии какого-то определенного количества ангстрем от соответствующего атома углерода в исходном белке. Обычно это значение берется равным 1, 2, 4 или 8 ангстрем (10&amp;lt;sup&amp;gt;-10&amp;lt;/sup&amp;gt;м).&lt;br /&gt;
&lt;br /&gt;
===Генерация молекулярных структур===&lt;br /&gt;
[[Файл:SMILES.png|thumb|Рисунок 10. Пример строки SMILES для молекулы&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/SMILES Википедия: SMILES]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
[[Файл:Ranc scheme.png|thumb|Рисунок 11. Пример генеративной состязательной сети для лекарственных молекул. Сеть RANC (Reinforced Adversarial Neural Computer) &amp;lt;ref&amp;gt;[https://pubs.acs.org/doi/10.1021/acs.jcim.7b00690 Evgeny Putin et al., Reinforced Adversarial Neural Computer for de Novo Molecular Design, 2018]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Еще одна задача, которая есть сейчас в мире машинного обучения {{---}} генерировать новые молекулы, которые могут потенциально быть лекарствами. В отличие от подхода с анализом уже существующих библиотек лекарств, такай метод исключает возможность &amp;quot;пропустить&amp;quot; хорошо походящее вещество из-за того, что оно не было включено в библиотеку для анализа.&lt;br /&gt;
&lt;br /&gt;
Для кодирования молекулярной структуры существует специальная нотация SMILES (Simplified Molecular Input Line Entry System, с англ. — «система упрощённого представления молекул в строке ввода») {{---}} система правил для однозначного описания состава и структуры молекулы химического вещества с использованием строки символов (рис. 10). Таким образом, задача моделей состоит в генерации строки, правильной с точки зрения SMILES. Стоит отметить, что есть возможность сгенерировать правильные SMILES-строки с точки зрения синтаксиса, но не правильные по валентности&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%92%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C Википедия: Валентность]&amp;lt;/ref&amp;gt; (например, атом углерода не может иметь валентность больше, чем 4, но можно сгенерировать SMILES, где валентность углерода {{---}} 5.) &lt;br /&gt;
&lt;br /&gt;
Для генерации молекулярных структур используют [[Generative Adversarial Nets (GAN)|генеративные состязательные сети]] (рис. 11). Общую идею подхода можно описать так {{---}} предлагается генерировать различные молекулярные структуры в формате SMILES-строки (это делает генератор), а уже потом проверять, действительно ли их можно использовать как лекарство и насколько сложно их синтезировать (это делает дискриминатор {{---}} пытается отличить сгенерированный SMILES от настоящего). &lt;br /&gt;
&lt;br /&gt;
Дискриминатор обычно проверяет схожесть с лекарственными средствами (по набору физических свойств, таких как растворимость&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%82%D0%B2%D0%BE%D1%80%D0%B8%D0%BC%D0%BE%D1%81%D1%82 Википедия: Растворимость]&amp;lt;/ref&amp;gt;, гидрофильность&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%B4%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C Википедия: Гидрофильность]&amp;lt;/ref&amp;gt;, липофильность&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BF%D0%BE%D1%84%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C Википедия: Липофильность]&amp;lt;/ref&amp;gt;) и синтезируемость молекулы с  данной SMILES-строкой (по валентностям атомов, кратности связей, заряду молекулы). Таким образом, задача генератора {{---}} сгенерировать такую строку SMILES для молекулы, чтобы дискриминатор не отличил ее от настоящей. Архитектура дискриминатора чаще всего остается очень похожей на архитектуру обычной сети, предсказывающей молекулярные свойства. В качестве дискриминатора часто используются графовые или сверточные нейронные сети. Для генератора же обычно используют [[Долгая краткосрочная память|механизм долгой краткосрочной памяти]].&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;
==Примечания==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Protein_structure_prediction#:~:text=Protein%20structure%20prediction%20is%20the,inverse%20problem%20of%20protein%20design. Protein structure prediction]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D0%B0 Википедия: Персонализированная медицина]&lt;br /&gt;
* [https://emerj.com/ai-sector-overviews/machine-learning-in-pharma-medicine/ 7 Applications of Machine Learning in Pharma and Medicine]&lt;br /&gt;
* [https://www.nature.com/articles/s41563-019-0360-1 Ascent of machine learning in medicine]&lt;br /&gt;
* [http://jtelemed.ru/article/glubokoe-mashinnoe-obuchenie-iskusstvennyj-intellekt-v-ultrazvukovoj-diagnostike Глубокое машинное обучение (искусственный интеллект) в ультразвуковой диагностике]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B0_%D0%92%D0%B0%D1%81%D0%B5%D1%80%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0 Википедия: Метрика Васерштейна]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Практическое применение машинного обучения]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%BA%D0%BE%D0%B4%D0%B0_%D0%BD%D0%B0_Kotlin&amp;diff=83332</id>
		<title>Примеры кода на Kotlin</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%BA%D0%BE%D0%B4%D0%B0_%D0%BD%D0%B0_Kotlin&amp;diff=83332"/>
				<updated>2022-09-01T04:43:28Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:kotlin-logo.png|150px|thumb|Kotlin: https://kotlinlang.org/]]&lt;br /&gt;
&lt;br /&gt;
==Популярные библиотеки==&lt;br /&gt;
* Kotlin-statistics&amp;lt;ref&amp;gt;[https://github.com/thomasnield/kotlin-statistics Kotlin-statistics]&amp;lt;/ref&amp;gt; {{---}} библиотека с набором функций-расширений для работы с коллекциями, необходимыми в задачах статистики, такими как mode, median, range, variance, standardDeviation, geometricMean и др. Также, библиотека предоставляет расширения для трансформации коллекций, агрегации, сэмплинга данных. Есть реализации алгоритмов классификации, регрессии. Библиотека поддается расшерению API, за счет объявления своих расшерений, реализация которых может использовать Apache Math. Библиотека не содержит собственной реализации структур данных - все опреации производятся над стандартными интерфейсами (Sequence, Iterable и т.п.), функционал которых расширен благодаря механизму фнкций-расширения в Kotlin&amp;lt;ref&amp;gt;[https://kotlinlang.org/docs/reference/extensions.html Kotlin extension functions]&amp;lt;/ref&amp;gt;. Нет встроенной поддержки визуализации данных, но можно использовать TornadoFX, работающий со стандартными коллекциями. &lt;br /&gt;
&lt;br /&gt;
* KMath&amp;lt;ref&amp;gt;[https://github.com/mipt-npm/kmath KMath]&amp;lt;/ref&amp;gt; {{---}} аналог numpy: поддержка алгебраических структур, массиво-подобных коллекций, гистограмм и т.д. На текущий момент &amp;lt;sup&amp;gt;19.04.20&amp;lt;/sup&amp;gt; находится в разработке.&lt;br /&gt;
&lt;br /&gt;
* SMILE&amp;lt;ref&amp;gt;[https://github.com/haifengl/smile SMILE]&amp;lt;/ref&amp;gt; {{---}} JVM фреймворк, для которого помимо официального API&amp;lt;ref&amp;gt;[https://github.com/haifengl/smile/blob/master/kotlin/packages.md SMILE-kotlin]&amp;lt;/ref&amp;gt; на Kotlin существуют расширения SMILE-NLP-KT&amp;lt;ref&amp;gt;[https://github.com/londogard/smile-nlp-kt SMILE-NLP-KT]&amp;lt;/ref&amp;gt;. Фреймворк используется для решения различных задач машинного обучения, таких как: классификация, регрессия, кластеризация, использование генетических алгоритмов, KNN, вывод отсутствующих значений набора данных, обработку естественных языков. Есть встроенная поддержка визуализации данных, средств для чтения и нормализации данных различных форматов (csv, apache arrow, json, jdbc).&lt;br /&gt;
&lt;br /&gt;
Так как Kotlin интеропабилен с Java, то помимо поддерживающих для Kotlin библиотек можно использовать библиотеки для Java, например:&lt;br /&gt;
* Deeplearning4j&amp;lt;ref&amp;gt;[https://deeplearning4j.konduit.ai/ Deeplearning4j]&amp;lt;/ref&amp;gt; {{---}} DSL на Java для конфигурации глубоких нейронных сетей. Библиотека поддерживает распределенные вычисления, используя Apache Spark. Помимо реализаций алгоритмов машинного обучения, библиотека содержит классы для загрузки и нормализации данных.&lt;br /&gt;
&lt;br /&gt;
Также есть возможность&amp;lt;ref&amp;gt;[https://kotlinlang.org/docs/reference/data-science-overview.html Kotlin for Data Science]&amp;lt;/ref&amp;gt; работы с NumPy.&lt;br /&gt;
&lt;br /&gt;
==Примеры кода==&lt;br /&gt;
Примеры кода написаны на kotlin 1.3.71 для JVM, с использованием kotlin-statistics&lt;br /&gt;
&lt;br /&gt;
Gradle зависимость:&lt;br /&gt;
  repositories {&lt;br /&gt;
    maven { url 'https://jitpack.io' }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  dependencies {&lt;br /&gt;
    implementation 'com.github.thomasnield:kotlin-statistics:-SNAPSHOT'&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Линейная регрессия===&lt;br /&gt;
{{main|Линейная регрессия|l1=Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
Пример линейной регрессии c применением Kotlin-statistics:&lt;br /&gt;
  fun main() {&lt;br /&gt;
    val r = sequenceOf(&lt;br /&gt;
        1.0 to 3.0,&lt;br /&gt;
        2.0 to 6.0,&lt;br /&gt;
        3.0 to 9.0,&lt;br /&gt;
        4.0 to 11.8&lt;br /&gt;
    ).simpleRegression()&lt;br /&gt;
  &lt;br /&gt;
    println(r.slope)           // 2.9400000000000004&lt;br /&gt;
    println(r.meanSquareError) // 0.006000000000000227&lt;br /&gt;
    println(r.predict(5.0)).   // 14.8&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Байесовская классификация===&lt;br /&gt;
Основная статья: [[Байесовская классификация]].&lt;br /&gt;
&lt;br /&gt;
Пример классификации при помощи Наивного Байесовского Классификатора:&lt;br /&gt;
&lt;br /&gt;
  import org.nield.kotlinstatistics.toNaiveBayesClassifier&lt;br /&gt;
  &lt;br /&gt;
  class Email(val message: String, val isSpam: Boolean)&lt;br /&gt;
  &lt;br /&gt;
  fun main() {&lt;br /&gt;
      val emails = listOf(&lt;br /&gt;
          Email(&amp;quot;Hey! If you really want to enlarge your ML scores click here&amp;quot;, isSpam = true),&lt;br /&gt;
          Email(&amp;quot;Earn 50 more points for ML just by visiting this site!&amp;quot;, isSpam = true),&lt;br /&gt;
          Email(&amp;quot;Still have F grade? Professional help with ML right here&amp;quot;, isSpam = true),&lt;br /&gt;
  &lt;br /&gt;
          Email(&amp;quot;Hey, I left my phone at home. Email me if you need anything.&amp;quot;, isSpam = false),&lt;br /&gt;
          Email(&amp;quot;Stay At Home: COVID-19 news&amp;quot;, isSpam = false),&lt;br /&gt;
          Email(&amp;quot;Please see attachment for notes on today's meeting.&amp;quot;, isSpam = false),&lt;br /&gt;
          Email(&amp;quot;JetBrains license certificate&amp;quot;, isSpam = false),&lt;br /&gt;
          Email(&amp;quot;Your Education Pack expires soon &amp;quot;, isSpam = false)&lt;br /&gt;
      )&lt;br /&gt;
      val nbc = emails.toNaiveBayesClassifier(&lt;br /&gt;
          featuresSelector = { it.message.splitWords().toSet() },&lt;br /&gt;
          categorySelector = { it.isSpam }&lt;br /&gt;
      )&lt;br /&gt;
  &lt;br /&gt;
      val spamInput = &amp;quot;your grade is still so bad, but I can help you to get more scores&amp;quot;.splitWords().toSet()&lt;br /&gt;
      require(nbc.predict(spamInput) == true) { spamInput }&lt;br /&gt;
  &lt;br /&gt;
      val legitInput = &amp;quot;Thank you for placing the order &amp;quot;.splitWords().toSet()&lt;br /&gt;
      require(nbc.predict(legitInput) == false) { legitInput }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  fun String.splitWords(): Sequence&amp;lt;String&amp;gt; = this.split(Regex(&amp;quot;\\s&amp;quot;))&lt;br /&gt;
      .asSequence()&lt;br /&gt;
      .map { it.replace(Regex(&amp;quot;[^A-Za-z]&amp;quot;), &amp;quot;&amp;quot;) }&lt;br /&gt;
      .map { it.toLowerCase() }&lt;br /&gt;
      .filter { it.isNotEmpty() }&lt;br /&gt;
&lt;br /&gt;
===Кластеризация===&lt;br /&gt;
Основная статья: [[Кластеризация]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:dbscan_points_sample.png|thumb|800px|center|&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;Набор точек для кластеризации&amp;lt;/div&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Пример кластеризации с DBSCAN:&lt;br /&gt;
&lt;br /&gt;
  import org.nield.kotlinstatistics.dbScanCluster&lt;br /&gt;
  import kotlin.math.pow&lt;br /&gt;
  import kotlin.math.sin&lt;br /&gt;
  &lt;br /&gt;
  inline fun &amp;lt;V&amp;gt; IntProgression.mapDouble(mapper: (Double) -&amp;gt; V) = this.map { mapper(it.toDouble()) }&lt;br /&gt;
  &lt;br /&gt;
  data class Point(val coordinates: Pair&amp;lt;Double, Double&amp;gt;, val cluster: Int)&lt;br /&gt;
  &lt;br /&gt;
  fun main() {&lt;br /&gt;
  &lt;br /&gt;
      val firstCluster = (1..100 step 1)&lt;br /&gt;
          .mapDouble { x -&amp;gt; Point(x to x / 2, cluster = 1) }&lt;br /&gt;
    &lt;br /&gt;
      val secondCluster = (1..80 step 3)&lt;br /&gt;
          .mapDouble { x -&amp;gt; Point(x to (x / 12).pow(2) + 20, cluster = 2) }&lt;br /&gt;
  &lt;br /&gt;
      val thirdCluster = (60..150 step 1)&lt;br /&gt;
          .mapDouble { x -&amp;gt; Point(x to 10 * sin(x / 5) + 15, cluster = 3) }&lt;br /&gt;
  &lt;br /&gt;
      val points = firstCluster + secondCluster + thirdCluster&lt;br /&gt;
    &lt;br /&gt;
      val clusters = points.dbScanCluster(&lt;br /&gt;
          xSelector = { (coords) -&amp;gt; coords.first },&lt;br /&gt;
          ySelector = { (coords) -&amp;gt; coords.second },&lt;br /&gt;
          maximumRadius = 5.0,&lt;br /&gt;
          minPoints = 1&lt;br /&gt;
      )&lt;br /&gt;
    &lt;br /&gt;
      val pointsWithMatchedClusters = clusters.withIndex()&lt;br /&gt;
          .flatMap { (clusterIdx, matched) -&amp;gt; matched.points.map { p -&amp;gt; p to clusterIdx + 1 } }&lt;br /&gt;
  &lt;br /&gt;
      require(clusters.size == 3) { clusters.size }&lt;br /&gt;
    &lt;br /&gt;
      val pointsWithMismatchedCluster = pointsWithMatchedClusters.filterNot { (p, cluster) -&amp;gt; cluster == p.cluster }&lt;br /&gt;
      require(pointsWithMismatchedCluster.isEmpty()) { pointsWithMatchedClusters }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Пример работы с матрицами===&lt;br /&gt;
Пример использования средств языка и методов стандартной библиотеки для работы с матрицами&lt;br /&gt;
&lt;br /&gt;
  typealias Vector = List&amp;lt;Double&amp;gt;&lt;br /&gt;
  typealias Matrix = List&amp;lt;Vector&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  class MatrixBuilder {&lt;br /&gt;
      private var matrixWidth: Int? = null&lt;br /&gt;
      private val _result: MutableList&amp;lt;Vector&amp;gt; = mutableListOf()&lt;br /&gt;
      val result: Matrix = _result&lt;br /&gt;
  &lt;br /&gt;
      operator fun invoke(vararg vector: Double) = addVector(vector.toList())&lt;br /&gt;
  &lt;br /&gt;
      operator fun invoke(vararg vector: Number) = addVector(vector.map { it.toDouble() })&lt;br /&gt;
  &lt;br /&gt;
      private fun addVector(vectorList: List&amp;lt;Double&amp;gt;) {&lt;br /&gt;
          _result.add(vectorList)&lt;br /&gt;
          if (matrixWidth != null) {&lt;br /&gt;
              require(vectorList.size == matrixWidth) {&lt;br /&gt;
                  &amp;quot;Vector size must be the same among all builder invocations: $vectorList, $_result&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
          } else {&lt;br /&gt;
              matrixWidth = vectorList.size&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  fun matrix(builder: MatrixBuilder.() -&amp;gt; Unit): Matrix = MatrixBuilder().apply(builder).result&lt;br /&gt;
  &lt;br /&gt;
  fun main() {&lt;br /&gt;
  &lt;br /&gt;
      val multiplied = matrix {&lt;br /&gt;
          this(1, 2, 3, 4)&lt;br /&gt;
          this(1, 2, 3, 4)&lt;br /&gt;
          this(1, 2, 3, 4)&lt;br /&gt;
      } * matrix {&lt;br /&gt;
          this(5, 6)&lt;br /&gt;
          this(7, 8)&lt;br /&gt;
          this(9, 10)&lt;br /&gt;
          this(11, 12)&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      multiplied&lt;br /&gt;
          .transpose()&lt;br /&gt;
          .print()&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  fun Matrix.transpose(): Matrix = this.asSequence()&lt;br /&gt;
      .map { it.withIndex() }&lt;br /&gt;
      .flatten()&lt;br /&gt;
      .groupBy({ it.index }, { it.value })&lt;br /&gt;
      .values&lt;br /&gt;
      .toList()&lt;br /&gt;
  &lt;br /&gt;
  operator fun Matrix.times(other: Matrix): Matrix {&lt;br /&gt;
      val (rows1, cols1) = this.size()&lt;br /&gt;
      val (_, cols2) = other.size()&lt;br /&gt;
      return (0 until rows1).map { i -&amp;gt;&lt;br /&gt;
          (0 until cols2).map { j -&amp;gt;&lt;br /&gt;
              (0 until cols1).fold(0.0) { s, k -&amp;gt;&lt;br /&gt;
                  s + this[i][k] * other[k][j]&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  fun Matrix.size(): Pair&amp;lt;Int, Int&amp;gt; = this.size to this.first().size&lt;br /&gt;
  &lt;br /&gt;
  fun Pair&amp;lt;Int, Int&amp;gt;.zeroMatrix(): Matrix = List(this.first) { List(this.second) { 0.0 } }&lt;br /&gt;
  &lt;br /&gt;
  fun Matrix.print() = println(this.joinToString(separator = &amp;quot;\n&amp;quot;) { it.joinToString(separator = &amp;quot; &amp;quot;) })&lt;br /&gt;
  &lt;br /&gt;
  fun List&amp;lt;Matrix&amp;gt;.sum(): Matrix {&lt;br /&gt;
      val n = this.size&lt;br /&gt;
      val (rowsCount, colCount) = this[0].size()&lt;br /&gt;
      return (0 until rowsCount).map { i -&amp;gt;&lt;br /&gt;
          (0 until colCount).map { j -&amp;gt;&lt;br /&gt;
              (0 until n).fold(0.0) { s, k -&amp;gt;&lt;br /&gt;
                  s + this[k][i][j]&lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B0%D0%BC%D0%BC%D0%B0-,_%D0%B4%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-_%D0%B8_%D0%BE%D0%BC%D0%B5%D0%B3%D0%B0-%D0%BA%D0%BE%D0%B4_%D0%AD%D0%BB%D0%B8%D0%B0%D1%81%D0%B0&amp;diff=83331</id>
		<title>Гамма-, дельта- и омега-код Элиаса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B0%D0%BC%D0%BC%D0%B0-,_%D0%B4%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-_%D0%B8_%D0%BE%D0%BC%D0%B5%D0%B3%D0%B0-%D0%BA%D0%BE%D0%B4_%D0%AD%D0%BB%D0%B8%D0%B0%D1%81%D0%B0&amp;diff=83331"/>
				<updated>2022-09-01T04:43:23Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Коды без памяти ==&lt;br /&gt;
Простейшими кодами, на основе которых может выполняться сжатие данных, являются '''коды без памяти''' (англ. ''code without memory''). В коде без памяти каждый символ в кодируемом векторе данных заменяется кодовым словом из префиксного множества двоичных последовательностей или слов.&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;
Коды Хаффмана и Шеннона-Фано являются оптимальными, но все же имеют ряд недостатков. &lt;br /&gt;
*При кодировании методами Хаффмана или Шеннона используются вероятности появления символов алфавита в тексте. То есть для построения кода нам нужно обладать этой информацией. Поэтому необходимо знать всю кодируемую последовательность заранее.&lt;br /&gt;
*Для того, чтобы декодер мог расшифровать файл, таблицу частот, которой пользовался кодер, следует записать в сжатый файл. Следовательно, длина сжатого сообщения увеличивается на длину таблицы частот, которая должна посылаться впереди данных, что может не оправдать сжатия. Хотя для кодов Хаффмана можно таблицу передавать [[Оптимальное хранение словаря в алгоритме Хаффмана| оптимально]]&lt;br /&gt;
*Необходимость наличия полной частотной статистики перед началом собственно кодирования требует двух проходов по сообщению: одного для построения модели сообщения (таблицы частот и дерево кодирования Хаффмана), другого {{---}} для собственно кодирования.&lt;br /&gt;
&lt;br /&gt;
=== Универсальное кодирование ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition ='''Универсальный код ''' (англ. ''universal code'') {{---}}  префиксный код, который преобразует положительные целые числа в двоичные слова, с дополнительным свойством: при любом истинном распределение вероятностей на целых числах, пока распределение — монотонно (то есть &amp;lt;tex&amp;gt;p(i) \geqslant p(i+1)&amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt;i&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;
Данные коды применяются и имеют неплохие результаты сжатия. Например, если мы строку преобразуем при помощи алгоритма [[Преобразование MTF|move-to-front]], то получим на выходе последовательность довольно небольших чисел. На небольшие числа коды Элиаса тратят мало бит, поэтому данный алгоритм будет довольно эффективен. Если мы получим значительное количество нулей, а что-то большое будет встречаться иногда, то мы неплохо закодируем и сожмём последовательность. Например, хороший результат даст такая связка: Барроуз-Уиллер + MTF + Коды Элиаса.&lt;br /&gt;
&lt;br /&gt;
== Разделение мантисс и экспонент ==&lt;br /&gt;
Английское название метода {{---}} Separate Exponents and Mantissas (SEM). &lt;br /&gt;
&lt;br /&gt;
'''Цель''' {{---}} сжатие потока &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;-битовых элементов.&lt;br /&gt;
&lt;br /&gt;
Основная идея состоит в том, чтобы отдельно описывать порядок значения элемента (&amp;quot;экспоненту&amp;quot; &amp;lt;tex&amp;gt;E_i&amp;lt;/tex&amp;gt;) и отдельно {{---}} значащие цифры значения (&amp;quot;мантиссу&amp;quot; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Значащие цифры начинаются со старшей ненулевой цифры: например, в числе &amp;lt;tex&amp;gt;000001101_2&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1\times2^0+0\times2^1+1\times2^2+1\times2^3+0\times2^4+0\times \dots = 13&amp;lt;/tex&amp;gt; это последние &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; цифры. Порядок числа определяется позицией старшей ненулевой цифры в записи числа. Как и при обычной записи в десятичной системе, он равен числу цифр в записи числа без предшествующих незначащих нулей. В данном примере порядок равен четырем. &lt;br /&gt;
&lt;br /&gt;
Методы данной группы являются трансформирующими и поточными, то есть могут применяться даже в том случае, когда объем входных данных заранее не известен. В общем случае скорость работы компрессора (содержащего прямое, &amp;quot;сжимающее&amp;quot; преобразование) равна скорости декомпрессора (реализующего обратное, &amp;quot;разжимающее&amp;quot; преобразование) и зависит только от объема исходных данных. Памяти потребуется всего несколько байт.&lt;br /&gt;
&lt;br /&gt;
В самом простом случае под запись экспонент и мантисс отводится фиксированное число бит: &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Причем &amp;lt;tex&amp;gt;E \geqslant 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;M \geqslant 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E + M = R&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;
1. Fixed &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; Fixed (Фиксированная длина экспоненты {{---}} Фиксированная длина мантиссы), а остальные три:&lt;br /&gt;
&lt;br /&gt;
2. Fixed &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; Variable (Фиксированная длина экспоненты {{---}} Переменная длина мантиссы),&lt;br /&gt;
&lt;br /&gt;
3. Variable &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; Variable (Переменная длина экспоненты {{---}} Переменная длина мантиссы) и&lt;br /&gt;
&lt;br /&gt;
4. Variable &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; Fixed (Переменная длина экспоненты {{---}} Фиксированная длина мантиссы).&lt;br /&gt;
&lt;br /&gt;
Есть несколько путей еще большего увеличения степени сжатия. Например, применение хорошо исследованных схем кодирования (Элиаса, Раиса, Голомба, Фибоначчи).&lt;br /&gt;
&lt;br /&gt;
== Коды переменной длины (Variable + Variable) ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition ='''Унарное представление числа &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ''' (англ. ''unary code'') {{---}} &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; подряд идущих единиц, заканчивающихся контрольным нулем (иногда наоборот: &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; нулей, за которыми следует контрольная единица). Более наглядно унарные коды можно представить в виде двоичного дерева, которое устроено следующим образом: каждому ребру, ведущему из вершины к правому ребенку, соответствует единица, иначе ноль, причем левый ребенок уже не имеет детей. Например, если нужно закодировать число m, нужно m раз пройти по правым вершинам и затем остановиться на левой.}}&lt;br /&gt;
Например, унарный код нуля {{---}} &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, единицы {{---}} &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;, двойки {{---}} &amp;lt;tex&amp;gt;110&amp;lt;/tex&amp;gt; и т. д.&lt;br /&gt;
=== Гамма-код Элиаса ===&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition ='''Гамма-код Элиаса ''' (англ. ''Elias gamma code'') {{---}} это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом. Он обычно используется при кодировании целых чисел, максимальное значение которых не может быть определено заранее, или чтобы сжать данные, в которых маленькие значения встречаются более часто, чем большие.}}&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;
&lt;br /&gt;
# Выделить из целого числа старший значащий бит (самую большую степень &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;, которую число включает — &amp;lt;tex&amp;gt;2\times{N}&amp;lt;/tex&amp;gt;) и младшие &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; бит.&lt;br /&gt;
# Записать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; в унарном коде, то есть &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; нулей, за которыми следует единица.&lt;br /&gt;
# Дописать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; младших двоичных цифр числа следом за этим унарным кодом.&lt;br /&gt;
&lt;br /&gt;
==== Декодирование ====&lt;br /&gt;
&lt;br /&gt;
# Считать все нули, встречающиеся до первой &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; — количество этих нулей.&lt;br /&gt;
# Принимая во внимание единицу, которая станет первым битом целого числа, со значением &amp;lt;tex&amp;gt;2^N&amp;lt;/tex&amp;gt;, считать оставшиеся &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; цифр целого числа.&lt;br /&gt;
&lt;br /&gt;
==== Примеры ====&lt;br /&gt;
&lt;br /&gt;
''' Пример кодирования числа &amp;lt;tex&amp;gt;15&amp;lt;/tex&amp;gt; '''&lt;br /&gt;
&lt;br /&gt;
# Записать число &amp;lt;tex&amp;gt;15&amp;lt;/tex&amp;gt; в двоичном представлении  &amp;lt;tex&amp;gt;1111_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Дописать перед числом три нуля  '''&amp;lt;tex&amp;gt;0001111&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
''' Пример декодирования последовательности битов &amp;lt;tex&amp;gt;0001111&amp;lt;/tex&amp;gt; '''&lt;br /&gt;
&lt;br /&gt;
# Считываем нули до первой единицы, &amp;lt;tex&amp;gt;N = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Считываем единицу и &amp;lt;tex&amp;gt;N = 3&amp;lt;/tex&amp;gt; бит. Получаем &amp;lt;tex&amp;gt;2^3&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;111_2 = 15&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Приведем примеры нескольких первых гамма-кодов Элиаса:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
! Число || Гамма-код &lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|1||1&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|2||010&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
||3||011&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|4||00100&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|5||00101&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|6||00110&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|7||00111&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|8||0001000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Гамма-код Элиаса не подходит для кодирования нулевых значений или отрицательных чисел. Для того, чтобы закодировать ноль нужно прибавить к нему &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до кодирования и отнять после декодирования. Чтобы закодировать все целые числа можно установить биекцию (соответствие), отображая целые числа из &amp;lt;tex&amp;gt;(0, 1, -1, 2, -2, 3, -3, \dots)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;(1, 2, 3, 4, 5, 6, 7, \dots)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Дельта-код Элиаса ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition ='''Дельта-код Элиаса ''' (англ. ''Elias delta code'') {{---}} это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом. Как далее будет видно, дельта-код с некоторого числа короче гамма-кода.}}&lt;br /&gt;
==== Алгоритм построения дельта-кода Элиаса ====&lt;br /&gt;
&lt;br /&gt;
'''Способ первый:'''&lt;br /&gt;
&lt;br /&gt;
# Сосчитать &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} количество значащих битов в двоичном представлении числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Сосчитать &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} количество значащих битов в двоичном представлении числа &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Записать &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; нулей и одну единицу.&lt;br /&gt;
# С правой стороны дописать биты числа &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; без старшей единицы.&lt;br /&gt;
# С правой стороны дописать биты числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; без старшей единицы (&amp;lt;tex&amp;gt;N_2&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Способ второй:'''&lt;br /&gt;
&lt;br /&gt;
# Сосчитать &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} количество значащих битов в двоичном представлении числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Закодировать &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; с помощью гамма-кода Элиаса.&lt;br /&gt;
# Дописать к &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; справа двоичное представление числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; без старшей единицы.&lt;br /&gt;
&lt;br /&gt;
==== Декодирование ====&lt;br /&gt;
&lt;br /&gt;
# Сосчитать &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} количество нулей во входном потоке до первой единицы.&lt;br /&gt;
# Не включая единицу считать &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; битов. Считанное число в сумме с &amp;lt;tex&amp;gt;2^M&amp;lt;/tex&amp;gt; дает &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Далее идут &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; младших битов числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt;. Считать их и к считанному числу прибавить &amp;lt;tex&amp;gt;2^{L-1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Примеры ====&lt;br /&gt;
&lt;br /&gt;
'''Пример кодирования числа &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
# В двоичном представлении числа &amp;lt;tex&amp;gt;N = 10 = 1010_2&amp;lt;/tex&amp;gt;  всего &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; значащих бита &amp;lt;tex&amp;gt;(L = 4)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# В двоичном представлении числа &amp;lt;tex&amp;gt;L = 4 = 100_2&amp;lt;/tex&amp;gt; всего &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; значащих бита &amp;lt;tex&amp;gt;(M = 3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Пишем &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; ноль и одну единицу &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Дописываем справа биты числа &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; без старшей единицы &amp;lt;tex&amp;gt;00100&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Дописываем с правой стороны биты числа &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; без старшей единицы '''&amp;lt;tex&amp;gt;00100010&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
'''Пример декодирования последовательности битов &amp;lt;tex&amp;gt;00100010&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
# Считаем количество нулей до первой единицы во входном потоке &amp;lt;tex&amp;gt;(M = 2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Читаем из потока следующие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; бит &amp;lt;tex&amp;gt;(00)&amp;lt;/tex&amp;gt;. Это дает нам &amp;lt;tex&amp;gt;L = 2^M + 00_2&amp;lt;/tex&amp;gt; = 4.&lt;br /&gt;
# Читаем из потока следующие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; бит &amp;lt;tex&amp;gt;(010)&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;N = 2^{L- 1} + 010_2 =&amp;lt;/tex&amp;gt; '''&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Приведем примеры нескольких первых дельта-кодов Элиаса:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
! Число || Дельта-код&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|1||1&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|2||0100&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|3||0101&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|4||01100&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|5||01101&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|6||01110&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|7||01111&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|8||00100000&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|9||00100001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Сравнение гамма- и дельта-кодов Элиаса ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
! Диапазон || Гамма-коды || Длина кода, бит || Дельта-коды || Длина кода, бит&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|1||1|||1||1||1&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|2...3||01x||3||010x||4&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|4...7||001xx||5||011xx||5&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|8...15||0001xxx||7||00100xxx||8&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|16...31||00001xxxx||9||00101xxxx||9&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|32...63||000001xxxxx||11||00110xxxxx||10&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|64...127||0000001xxxxxx||13||00111xxxxxx||11&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|128...255||00000001xxxxxxx||15||0001000xxxxxxx||14&lt;br /&gt;
|}&lt;br /&gt;
и т. д. Символами &amp;quot;x&amp;quot; тут обозначены биты мантиссы без старшей единицы.&lt;br /&gt;
&lt;br /&gt;
Для диапазона &amp;lt;tex&amp;gt;[2^K,2^{K+1}- 1]&amp;lt;/tex&amp;gt; коды формируются следующим образом:&lt;br /&gt;
&lt;br /&gt;
'''Гамма-код''': &amp;lt;tex&amp;gt;00..(K&amp;lt;/tex&amp;gt; раз&amp;lt;tex&amp;gt;)..01x..(K&amp;lt;/tex&amp;gt; раз&amp;lt;tex&amp;gt;)..x&amp;lt;/tex&amp;gt;; длина &amp;lt;tex&amp;gt;2\times{K} + 1&amp;lt;/tex&amp;gt; бит;&lt;br /&gt;
&lt;br /&gt;
'''Дельта-код''': &amp;lt;tex&amp;gt;n...(2\times{L}+1&amp;lt;/tex&amp;gt; раз&amp;lt;tex&amp;gt;)...nx..(K&amp;lt;/tex&amp;gt; раз&amp;lt;tex&amp;gt;)..x&amp;lt;/tex&amp;gt;; длина: &amp;lt;tex&amp;gt;2\times{L}+K+1&amp;lt;/tex&amp;gt; бит, где &amp;lt;tex&amp;gt;L = [\log_2{(K+1)}]&amp;lt;/tex&amp;gt; {{---}} целая часть логарифма числа &amp;lt;tex&amp;gt;(K+1)&amp;lt;/tex&amp;gt; по основанию &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} биты, относящиеся к записи экспоненты дельта-кода, их число &amp;lt;tex&amp;gt;2\times{L} + 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Единственное отличие между гамма- и дельта-кодами состоит в том, что в гамма-кодах экспоненты записываются в унарном виде, а в дельта-кодах к ним еще раз применяется гамма-кодирование.&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что для чисел &amp;lt;tex&amp;gt;2, 3, 8 \dots 15&amp;lt;/tex&amp;gt; дельта-код длиннее гамма-кода, для чисел &amp;lt;tex&amp;gt;1, 4...7, 16...31&amp;lt;/tex&amp;gt; длина дельта-кода совпадает с длиной гамма-кода, для всех остальных чисел дельта-код короче гамма-кода. Это происходит вследствие того, как строятся данные коды. Как показано выше, длина гама-кода &amp;lt;tex&amp;gt;2\times{K} + 1&amp;lt;/tex&amp;gt;, что при больших &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; очевидно больше, чем &amp;lt;tex&amp;gt;2\times{[\log_2{(K+1)}]} + K + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Омега-код Элиаса ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition ='''Омега-код Элиаса ''' (англ. ''Elias omega code'') {{---}} это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом. Так же, как гамма- и дельта-код Элиаса, он приписывает к началу целого числа порядок его величины в универсальном коде. Однако, в отличие от двух других указанных кодов, омега-код рекурсивно кодирует префикс, именно поэтому он также известен, как '''рекурсивный код Элиаса'''.}}&lt;br /&gt;
Омега-кодирование используется в приложениях, где самое большое кодируемое значение неизвестно заранее, или для сжатия данных, в которых маленькие значения встречаются намного чаще, чем большие.&lt;br /&gt;
&lt;br /&gt;
Данные коды состоят из последовательности групп длинной &amp;lt;tex&amp;gt;L_1, L_2, L_3 \dots, L_m&amp;lt;/tex&amp;gt; бит, которые начинаются (слева) с бита &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. В конце последовательности (справа) всегда &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. Длина каждой следующей &amp;lt;tex&amp;gt;(n+1)&amp;lt;/tex&amp;gt;-й группы задается значением битов предыдущей &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-й группы. &lt;br /&gt;
&lt;br /&gt;
В омега-кодах Элиаса длина первой группы {{---}} &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; бита. Длина следующей группы на единицу больше значения предыдущей. Первое значение задается отдельно.&lt;br /&gt;
==== Алгоритм построения омега-кода Элиаса ====&lt;br /&gt;
# В конец представления записать &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если число не единица &amp;lt;tex&amp;gt;({N}\neq1)&amp;lt;/tex&amp;gt;, слева от построенной последовательности добавить его двоичное представление.&lt;br /&gt;
# В &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; записать новое значение {{---}} количество только что записанных цифр(бит), минус один.&lt;br /&gt;
# Вернуться к шагу 2.&lt;br /&gt;
&lt;br /&gt;
==== Декодирование ====&lt;br /&gt;
&lt;br /&gt;
# Записываем в переменную &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; единицу.&lt;br /&gt;
# Считываем первый слева бит. Если он равен единице, то считываем группу бит длиной &amp;lt;tex&amp;gt;(N + 1)&amp;lt;/tex&amp;gt;. Записываем в &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; число, двоичное представление которого равно этой группе бит. Если он равен нулю, то &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; и есть наше число.&lt;br /&gt;
# Удаляем считанную группу из последовательности и переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
==== Примеры ====&lt;br /&gt;
'''Пример кодирования числа &amp;lt;tex&amp;gt;N  = 12&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
# Записываем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавляем справа от нуля двоичное представление &amp;lt;tex&amp;gt;12 (1100 0)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;N = 4 - 1 = 3&amp;lt;/tex&amp;gt; (длина последовательности &amp;lt;tex&amp;gt;1100&amp;lt;/tex&amp;gt; минус &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;).&lt;br /&gt;
# Добавляем справа двоичное представление &amp;lt;tex&amp;gt;N (11 1100 0)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt;N = 1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;12&amp;lt;/tex&amp;gt; кодирует последовательность '''&amp;lt;tex&amp;gt;11 1100 0&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
'''Пример декодирования последовательности &amp;lt;tex&amp;gt;11 1100 0&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;N = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Считываем группу &amp;lt;tex&amp;gt;11. N = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Считываем группу &amp;lt;tex&amp;gt;1100. N = 12&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Следующий бит &amp;lt;tex&amp;gt;= 0&amp;lt;/tex&amp;gt;, поэтому закодированное число {{---}} '''&amp;lt;tex&amp;gt;12&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Приведем примеры нескольких первых омега-кодов Элиаса:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
! Число || Омега-код&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|1||0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|2||10 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|3||11 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|4||10 100 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|5||10 101 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|6||10 110 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|7||10 111 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|8||11 1000 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|9||11 1001 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|10||11 1010 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|11||11 1011 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|12||11 1100 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|13||11 1101 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|14||11 1110 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|15||11 1111 0&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|16||10 100 10000 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Количество групп в коде возрастает быстро вначале, но далее — очень медленно:&lt;br /&gt;
&lt;br /&gt;
# для &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; будет &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; групп;&lt;br /&gt;
# &amp;lt;tex&amp;gt;2 ... 3 (2^1 ... 2^2 - 1)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; группа;&lt;br /&gt;
# &amp;lt;tex&amp;gt;4 ... 15 (2^2 ... 2^{2^2} - 1)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; группы;&lt;br /&gt;
# &amp;lt;tex&amp;gt;16 ... 65536 (2^{2^2} ... 2^{2^{2^2}} - 1)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; группы;&lt;br /&gt;
# &amp;lt;tex&amp;gt;65536 ... 2\times10^{19728} (2^{2^{2^2}} ... 2^{2^{2^{2^2}}} - 1)&amp;lt;/tex&amp;gt; {{---}} всего &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; группы.&lt;br /&gt;
&lt;br /&gt;
Здесь быстрое возрастание количества значений в группе сильно напоминает [[СНМ (реализация с помощью леса корневых деревьев)#Асимптотика|функцию Аккермана]]. Начиная с третьей &amp;lt;tex&amp;gt;(i = 3)&amp;lt;/tex&amp;gt; группы их диапазон лежит между значениями функции &amp;lt;tex&amp;gt;A(i - 3, 4) + 3&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A(i -2, 4) + 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#EEEEFF&lt;br /&gt;
! Число || Омега-код || Длина&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|1||0||1&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|2—3||1x 0||3&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|4—7||10 1xx 0||6&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|8—15||11 1xxx 0||7&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|16—31||10 100 1xxxx 0||11&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|32—63||10 101 1xxxxx 0||12&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|64—127||10 110 1xxxxxx 0||13&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|128—255||10 111 1xxxxxxx 0||14&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|256—511||11 1000 1xxxxxxxx 0||16&lt;br /&gt;
|-align=&amp;quot;center&amp;quot; bgcolor=#FFFFFF&lt;br /&gt;
|511—1023||11 1001 1xxxxxxxxx 0||17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*Д. Ватолин, Ратушняк, М. Смирнов,  В. Юкин &amp;quot;Методы сжатия данных&amp;quot;&lt;br /&gt;
*[http://rain.ifmo.ru/cat/view.php/theory/coding/integer-2005 Кодирование целых чисел]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%93%D0%B0%D0%BC%D0%BC%D0%B0-%D0%BA%D0%BE%D0%B4_%D0%AD%D0%BB%D0%B8%D0%B0%D1%81%D0%B0 Википедия {{---}} Гамма-код Элиаса]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4_%D0%AD%D0%BB%D0%B8%D0%B0%D1%81%D0%B0 Википедия {{---}} Дельта-код Элиаса]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%9E%D0%BC%D0%B5%D0%B3%D0%B0-%D0%BA%D0%BE%D0%B4_%D0%AD%D0%BB%D0%B8%D0%B0%D1%81%D0%B0 Википедия {{---}} Омега-код Элиаса]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4 Википедия {{---}} Универсальный код]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы сжатия ]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%9D%D0%9C_(%D0%BD%D0%B0%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8)&amp;diff=83330</id>
		<title>СНМ (наивные реализации)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%9D%D0%9C_(%D0%BD%D0%B0%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8)&amp;diff=83330"/>
				<updated>2022-09-01T04:43:17Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Система (лес, объединение) непересекающихся множеств''' (СНМ, disjoint set forest, DSF, disjoint set union, DSU) {{---}} иерархическая структура данных, позволяющая эффективно работать с множествами. &lt;br /&gt;
__TOC__&lt;br /&gt;
== Описание ==&lt;br /&gt;
Структура хранит набор объектов (например, чисел от &amp;lt;tex&amp;gt; 0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; n - 1 &amp;lt;/tex&amp;gt;) в виде непересекающихся множеств. У каждого множества есть конкретный представитель.&lt;br /&gt;
&lt;br /&gt;
Определены две операции:&lt;br /&gt;
* &amp;lt;math&amp;gt; \mathrm{union(x, y)} &amp;lt;/math&amp;gt; {{ --- }} объединяет множества, содержащие &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt; \mathrm{find (x)} &amp;lt;/math&amp;gt; {{ --- }} возвращает представителя множества, в котором находится &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;&lt;br /&gt;
Для любого элемента множества представитель всегда одинаковый. Поэтому чтобы проверить принадлежность элементов &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; одному множеству достаточно сравнить &amp;lt;math&amp;gt; \mathrm{find (x)} &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \mathrm{find(y)} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:DSU_1_Example.png|500px|center|Пример работы СНМ]]&lt;br /&gt;
&lt;br /&gt;
== Реализации ==&lt;br /&gt;
=== С помощью массива ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
'''Оценка работы:'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |init&lt;br /&gt;
 |find&lt;br /&gt;
 |union&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть в массиве s хранятся номера множеств, в &amp;lt;tex&amp;gt; s[i] &amp;lt;/tex&amp;gt; будет храниться номер множества, к которому принадлежит &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt;. Этот номер отождествляет множество, &amp;lt;math&amp;gt; \mathrm{find} &amp;lt;/math&amp;gt; возвращает именно его. Тогда &amp;lt;math&amp;gt; \mathrm{find} &amp;lt;/math&amp;gt;, очевидно, будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Чтобы объединить множества &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, надо изменить все &amp;lt;tex&amp;gt; s[i] &amp;lt;/tex&amp;gt;, равные номеру множества &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, на номер &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;. Тогда &amp;lt;math&amp;gt; \mathrm{union} &amp;lt;/math&amp;gt; работает за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''int''' s[n]&lt;br /&gt;
 '''func''' init():&lt;br /&gt;
     '''for''' i = 0 '''to''' n - 1&lt;br /&gt;
         s[i] = i               &amp;lt;font color=green&amp;gt; // сначала каждый элемент лежит в своем множестве &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''int''' find(k):&lt;br /&gt;
     '''return''' s[k]&lt;br /&gt;
&lt;br /&gt;
 '''func''' union(x, y):&lt;br /&gt;
     '''if''' s[x] == s[y]&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''else'''&lt;br /&gt;
         t = s[y]&lt;br /&gt;
         '''for''' i = 0 '''to''' n - 1&lt;br /&gt;
             '''if''' s[i] == t&lt;br /&gt;
                 s[i] = s[x]&lt;br /&gt;
&lt;br /&gt;
=== С помощью списка ===&lt;br /&gt;
&amp;lt;!--'''Оценка работы:'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
 |init&lt;br /&gt;
 |find&lt;br /&gt;
 |union&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |&amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем хранить множество в виде списка. Для каждого элемента списка храним ссылку на следующий элемент и указатель на &amp;lt;tex&amp;gt; head &amp;lt;/tex&amp;gt;, который является представителем. Для того чтобы найти представителя, нужно перейти по ссылке на &amp;lt;tex&amp;gt; head &amp;lt;/tex&amp;gt;. Значит &amp;lt;math&amp;gt; \mathrm{find} &amp;lt;/math&amp;gt; работает за &amp;lt;tex&amp;gt; O(1) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для объединения множеств потребуется объединить два списка и обновить ссылки на &amp;lt;tex&amp;gt; head &amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;math&amp;gt; \mathrm{union} &amp;lt;/math&amp;gt; работает за &amp;lt;tex&amp;gt; O(n) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы объединить два списка, нужно хранить ссылку на &amp;lt;tex&amp;gt; tail &amp;lt;/tex&amp;gt;. Ее можно хранить в голове списка.&lt;br /&gt;
&lt;br /&gt;
 '''struct''' SetItem &lt;br /&gt;
     '''int''' data       &lt;br /&gt;
     '''SetItem''' head&lt;br /&gt;
     '''SetItem''' next&lt;br /&gt;
     '''SetItem''' tail&lt;br /&gt;
&lt;br /&gt;
 '''SetItem''' s[n]&lt;br /&gt;
&lt;br /&gt;
 '''func''' init():&lt;br /&gt;
     '''for''' i = 0 '''to''' n - 1&lt;br /&gt;
         s[i].data = i&lt;br /&gt;
         s[i].head = s[i]         &lt;br /&gt;
         s[i].tail = s[i]&lt;br /&gt;
         s[i].next = null&lt;br /&gt;
&lt;br /&gt;
 '''int''' find('''SetItem''' x):                        &amp;lt;font color=green&amp;gt; // подразумевается, что &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; {{ --- }} ссылка на один из элементов &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' x.head.data&lt;br /&gt;
&lt;br /&gt;
 '''func''' union('''SetItem''' x, '''SetItem''' y): &amp;lt;font color=green&amp;gt; // &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; {{ --- }} элементы множеств&amp;lt;/font&amp;gt;&lt;br /&gt;
     x = x.head&lt;br /&gt;
     y = y.head&lt;br /&gt;
     '''if''' x == y&lt;br /&gt;
         '''return'''&lt;br /&gt;
     x.tail.next = y                         &amp;lt;font color=green&amp;gt; // соединим списки &amp;lt;/font&amp;gt;&lt;br /&gt;
     x.tail = y.tail                         &amp;lt;font color=green&amp;gt; // сделаем корректную ссылку на &amp;lt;tex&amp;gt; tail &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; head&amp;lt;/tex&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''while''' y &amp;lt;tex&amp;gt; \neq &amp;lt;/tex&amp;gt; null                         &amp;lt;font color=green&amp;gt; // скорректируем ссылки на &amp;lt;tex&amp;gt; head &amp;lt;/tex&amp;gt; у элементов множества &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
         y.head = x&lt;br /&gt;
         y = y.next&lt;br /&gt;
&lt;br /&gt;
[[Файл:DSU_list_example.png|800px|center|Пример объединения двух множеств (union)]]&lt;br /&gt;
&lt;br /&gt;
== Другие реализации ==&lt;br /&gt;
* [[СНМ (списки с весовой эвристикой)]]&lt;br /&gt;
* [[СНМ (реализация с помощью леса корневых деревьев)]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BD%D0%B5%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D0%BA%D0%B0%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2 Википедия {{---}} Система непересекающихся множеств]&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/104772/ Система непересекающихся множеств и её применения]&lt;br /&gt;
* Т. Кормен - Алгоритмы, построение и анализ. Второе издание. Часть V. Глава 21.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=83329</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=83329"/>
				<updated>2022-09-01T04:43:12Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' {{---}} это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ. Над каждым этапом работает SCRUM-команда. Сотрудничество команд организуется по методике SCRUM of SCRUMs.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа {{---}} понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&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;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 {{---}} минимально допустимым значением, 0.9 {{---}} оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &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;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&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;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров  для быстрого масштабирования количества контейнеров по мере увеличения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&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;
&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;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&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;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83328</id>
		<title>Задача трансляции изображений</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83328"/>
				<updated>2022-09-01T04:43:05Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Задача трансляции изображения (англ. Image-to-image translation)''' — это задача из области [[ Компьютерное зрение| компьютерного зрения]], цель которой состоит в том, чтобы научиться строить соответствия между входным и выходным изображениями, используя тренировочные данные.&lt;br /&gt;
}}&lt;br /&gt;
Другими словами, задача состоит в том, чтобы научиться преобразовывать изображение из одной области в другую, получая в итоге изображение со стилем (характеристиками) последней.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Horse2Zebra.png|thumb|right|Рис. 1. Пример трансляции изображения: превращение лошади в зебру.&amp;lt;ref name=&amp;quot;cycle&amp;quot;&amp;gt;[https://github.com/junyanz/CycleGAN CycleGAN {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
&lt;br /&gt;
Задача разделяется на два типа в зависимости от тренировочных данных. &amp;lt;br&amp;gt;&lt;br /&gt;
В одном случае, у нас есть четкое представление результата, который должен получиться, а в другом случае, его нет, но есть множество, определяющее стиль желаемого результата (Рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[File:Paired_vs_unpaired_training_data.png|400px|right|thumb|Рис. 2. Виды тренировочных данных для трансляции изображений. &amp;lt;ref name=&amp;quot;towardsdatascience2&amp;quot;&amp;gt;[https://towardsdatascience.com/cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-3fa8d9a6aa1d CycleGAN {{---}} Towardsdatascience]&amp;lt;/ref&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;
* сегментация изображения (англ. segmentation map) {{---}} реальная картинка;&lt;br /&gt;
* линии-края (англ. edges) {{---}} фотография;&lt;br /&gt;
* генерация разных поз и одежды на человеке;&lt;br /&gt;
* описывающий изображение текст {{---}} фотография.&lt;br /&gt;
Некоторые примеры изображены на Рис. 3.&lt;br /&gt;
[[File:Examples_paired_translation.jpg|700px|center|thumb|Рис. 3. Примеры применения алгоритма трансляции изображений, обученном на парных тренировочных данных. (Pix2Pix)&amp;lt;ref name=&amp;quot;pix&amp;quot;&amp;gt;[https://github.com/phillipi/pix2pix Pix2Pix {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Обучение на независимых множествах ===&lt;br /&gt;
&lt;br /&gt;
'''Алгоритм трансляции изображений, обученный на двух независимых множествах''' — это такой алгоритм трансляции изображений, тренировочные данные которого состоят из двух независимых групп, описывающих свой стиль, цель которого научиться отображать одну группу в другую так, чтобы содержание изображений (общее) сохранялось, а стиль (уникальные элементы изображений) переносился.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
* тренировочные данные {{---}} два множества: &amp;lt;code&amp;gt;{реальные фотографии}, {картины К. Моне}&amp;lt;/code&amp;gt;;&lt;br /&gt;
* приложение {{---}} взяли любую фотографию, например, поле с цветами; получили поле с цветами в стиле К. Моне.&lt;br /&gt;
&lt;br /&gt;
[[File:Examples_unpaired_translation.jpeg|700px|center|thumb|Рис. 4. Примеры применения алгоритма трансляции изображений, обученном на двух независимых множествах. (CycleGan)&amp;lt;ref name=&amp;quot;cycle&amp;quot;&amp;gt;[https://github.com/junyanz/CycleGAN CycleGAN {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Pix2Pix ==&lt;br /&gt;
&lt;br /&gt;
Pix2Pix&amp;lt;ref name=&amp;quot;pix&amp;quot;&amp;gt;[https://github.com/phillipi/pix2pix Pix2Pix {{---}} GitHub]&amp;lt;/ref&amp;gt; {{---}} это подход для трансляции изображений с помощью глубоких [[:Сверточные нейронные сети|сверточных нейронных сетей]].&lt;br /&gt;
&lt;br /&gt;
=== Архитектура ===&lt;br /&gt;
&lt;br /&gt;
[[File:Training_CGAN_pix2pix.png|400px|right|thumb|Рис. 5. Пример процесса обучения генератора и дискриминатора для Pix2Pix. &amp;lt;ref name=&amp;quot;towardsdatascience&amp;quot;&amp;gt;[https://towardsdatascience.com/pix2pix-869c17900998 Pix2Pix {{---}} Towardsdatascience]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Pix2Pix реализует архитектуру [[Generative Adversarial Nets (GAN)#CGAN_.28Conditional_Generative_Adversarial_Nets.29| условных порождающих состязательных сетей ]](англ. CGAN), где для генератора взята архитектура, основанная на U-Net&amp;lt;ref name=&amp;quot;unet&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-24574-4_28 U-Net: Convolutional Networks for Biomedical Image Segmentation]&amp;lt;/ref&amp;gt;, а для дискриминатора используется сверточный классификатор PatchGAN&amp;lt;ref name=&amp;quot;patch&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-46487-9_43 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks]&amp;lt;/ref&amp;gt;, который штрафует алгоритм на уровне участков изображения.&lt;br /&gt;
&lt;br /&gt;
Генератор CGAN'a работает следующим образом: на вход подается one-hot вектор класса x и вектор шума z, в результате прохода через условный генератор выдается сгенерированное изображение этого класса. Таким образом, генератор можно представить, как следующую функцию: &amp;lt;tex&amp;gt;G: \{x,z\} \to y&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Генератор Pix2Pix работает cхожим образом, но вместо вектора класса подается изображение, а вектор шума и вовсе убирается, потому что он не вносит достаточно стохастичности в результат работы генератора.&lt;br /&gt;
&lt;br /&gt;
Генератор обучается создавать максимально правдоподобные выходные изображения, дискриминатор же учится как можно лучше отличать фальшивые изображения от реальных.&lt;br /&gt;
==== Генератор ====&lt;br /&gt;
&lt;br /&gt;
[[File:U-Net-Generator-Model.png|400px|right|thumb|Рис. 6. Архитектура Pix2Pix генератора. &amp;lt;ref name=&amp;quot;machinelearningmastery&amp;quot;&amp;gt;[https://machinelearningmastery.com/how-to-implement-pix2pix-gan-models-from-scratch-with-keras/ Pix2Pix GAN Models {{---}} Machine Learning Mastery]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Для генератора Pix2Pix используется U-net-генератор.&amp;lt;br&amp;gt;&lt;br /&gt;
'''U-net-генератор'''&amp;lt;ref name=&amp;quot;unet&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-24574-4_28 U-Net: Convolutional Networks for Biomedical Image Segmentation]&amp;lt;/ref&amp;gt; {{---}} это модель encoder-decoder с добавлением пропускаемых соединений (англ. ''skip-connections'') между зеркальными слоями в стеках кодировщика и декодера.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы генератора:&lt;br /&gt;
* на вход подается изображение;&lt;br /&gt;
* далее последовательно применяются свертка, [[Batch-normalization | батч-нормализация]] (англ. Batch Norm layer), функция активации LeakyReLU и пулинг, что, тем самым, уменьшает количество признаков;&lt;br /&gt;
* при этом, следуя архитектуре U-net, добавляются пропускаемые соединения между каждым слоем &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и слоем &amp;lt;tex&amp;gt;n - i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} общее количество слоев; каждое пропускаемое соединение просто объединяет все каналы на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; с другими на слое &amp;lt;tex&amp;gt;n - i&amp;lt;/tex&amp;gt;; таким образом, информация, которая могла быть сильно сжата (потеряна), может доходить до некоторых более поздних слоев;&lt;br /&gt;
* после того, как получен слой минимального размера, начинается работа декодера, который делает то же, что и кодировщик, с отличием в слое, обратном пулингу, который увеличивает количество признаков;&lt;br /&gt;
* также в декодере добавляется dropout, чтобы достигнуть стохастичности на выходе генератора.&lt;br /&gt;
&lt;br /&gt;
Генератор должен не только обмануть дискриминатор, но и приблизиться к истине, поэтому его '''функция ошибки''' выглядит следующим образом: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L(G) = BCE\,Loss&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://towardsdatascience.com/understanding-binary-cross-entropy-log-loss-a-visual-explanation-a3ac6025181a BCE Loss {{---}} towardsdatascience]&amp;lt;/ref&amp;gt; &amp;lt;tex&amp;gt;+\,\lambda*\sum_{i=1}^{n}|generated\_output - real\_output|&amp;lt;/tex&amp;gt;,  где &amp;lt;tex&amp;gt;|generated\_output - real\_output|&amp;lt;/tex&amp;gt; {{---}} попиксельная разница.&lt;br /&gt;
&lt;br /&gt;
==== Дискриминатор ==== &lt;br /&gt;
&lt;br /&gt;
[[File:The-PatchGAN-structure-in-the-discriminator-architecture.png|400px|right|thumb|Рис. 7. Архитектура PatchGAN дискриминатора. &amp;lt;ref name=&amp;quot;researchgate&amp;quot;&amp;gt;[https://www.researchgate.net/figure/The-PatchGAN-structure-in-the-discriminator-architecture_fig5_339832261 The PatchGAN structure {{---}} ResearchGate]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Для дискриминатора данной сети используется сверточный дискриминатор PatchGAN.&lt;br /&gt;
&lt;br /&gt;
'''PatchGAN дискриминатор'''&amp;lt;ref name=&amp;quot;patch&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-46487-9_43 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks]&amp;lt;/ref&amp;gt; {{---}} это тип дискриминатора для генеративных состязательных сетей, который штрафует алгоритм на уровне локальных фрагментов (патчей).&amp;lt;br&amp;gt;&lt;br /&gt;
Дискриминатор PatchGAN пытается определить, является ли каждый фрагмент размера &amp;lt;tex&amp;gt;N\times N&amp;lt;/tex&amp;gt; изображения настоящим или поддельным. Этот дискриминатор сверточно запускается по изображению, усредняя все ответы, чтобы посчитать окончательный результат &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Проще говоря, для каждого фрагмента определяется матрица классификаций, где все значения находятся в промежутке &amp;lt;tex&amp;gt;[0,1]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} подделка. Проходясь сверткой, в итоге получаем конечную матрицу классификаций. Таким образом, для поддельного изображения от генератора PatchGan должен попытаться вывести матрицу нулей. &amp;lt;br&amp;gt;&lt;br /&gt;
Интересно, что &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; может быть намного меньше полного размера изображения и при этом давать результаты высокого качества. Это выгодно, потому что меньший PatchGAN имеет меньше параметров, работает быстрее и может применяться к изображениям большого размера.&amp;lt;br&amp;gt;&lt;br /&gt;
Такой дискриминатор эффективно моделирует изображение как Марковское случайное поле&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Markov_random_field Markov random field {{---}} Wikipedia]&amp;lt;/ref&amp;gt;, предполагая независимость между пикселями, разделенных диаметром более одного фрагмента.&lt;br /&gt;
&lt;br /&gt;
==== Полное описание архитектуры ====&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы описать полный порядок работы Pix2Pix, обратимся к примеру:&lt;br /&gt;
&lt;br /&gt;
Пусть у вас есть набор пар, состоящий из реальных фотографий и их сегментаций. Задача состоит в том, чтобы  научиться генерировать из сегментированных изображений реальные. &lt;br /&gt;
* помещается сегментированное изображение в генератор U-Net, и он генерирует некоторый выход; &lt;br /&gt;
* дальше сгенерированное изображение соединяется с исходным входным сегментированным изображением, и это все идет в PatchGan дискриминатор, который выводит матрицу классификации, состоящую из значений между 0 и 1, которая показывает, насколько реальны или поддельны разные части этого изображения;&lt;br /&gt;
* затем для вычисления ошибки дискриминатора проводится 2 сравнения:&lt;br /&gt;
** сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным сегментированным изображением} с матрицей из всех 0;&lt;br /&gt;
** матрицы классификация от {объединения реального изображения с исходным входным сегментированным изображением} с матрицей из всех 1;&lt;br /&gt;
* затем для вычисления ошибки генератора проводится сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным изображением} с матрицей из всех 1, которое считается с помощью BCE Loss, которое впоследствии суммируется с попиксельным сравнением реального изображения со сгенерированным, домноженным на &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
[[File:Pix2pix-UNet-128-GAN-network-architecture.png|700px|center|thumb|Рис. 8. Архитектура Pix2Pix. &amp;lt;ref name=&amp;quot;researchgate2&amp;quot;&amp;gt;[https://www.researchgate.net/figure/Pix2pix-UNet-128-GAN-network-architecture_fig2_324962509 Pix2pix UNet_128 GAN network architecture {{---}} ResearchGate]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
Для тестирования решения были проведены следующие эксперименты:&lt;br /&gt;
* сегментированные изображения &amp;lt;tex&amp;gt;\leftrightarrow&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* нарисованная карта &amp;lt;tex&amp;gt;\leftrightarrow&amp;lt;/tex&amp;gt; фотоснимок;&lt;br /&gt;
* черно-белые фотографии &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; цветные фотографии;&lt;br /&gt;
* линии-края &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* эскизы-рисунки &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* день &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; ночь;&lt;br /&gt;
и так далее.&lt;br /&gt;
&lt;br /&gt;
[[File:Pix2pix_examples.png|800px|center|thumb|Рис. 9. Примеры Pix2Pix. &amp;lt;ref&amp;gt;[https://sh-tsang.medium.com/review-pix2pix-image-to-image-translation-with-conditional-adversarial-networks-gan-ac85d8ecead2 Sik-Ho Tsang]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Pix2PixHD ==&lt;br /&gt;
&lt;br /&gt;
[[File:Generator_pix2pixhd.png|400px|right|thumb|Рис. 10. Генератор Pix2PixHD. &amp;lt;ref name=&amp;quot;towardsdatascience&amp;quot;&amp;gt;[https://towardsdatascience.com/pix2pix-869c17900998 Pix2Pix {{---}} Towardsdatascience]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Pix2PixHD&amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;{{---}} нейронная сеть, основанная на архитектуре Pix2Pix, которая является новым удачным подходом для решения задачи получения изображений высокого разрешения из сегментированных изображений.&lt;br /&gt;
&lt;br /&gt;
Основа Pix2Pix была улучшена за счет изменений в генераторе, дискриминаторе и функции ошибки.&lt;br /&gt;
&lt;br /&gt;
'''Генератор''' был разбит на две подсети &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; так, что первая приняла роль глобальной сети генератора, а вторая стала локальным усилителем сети. Таким образом, генератор стал задаваться набором &amp;lt;tex&amp;gt;G = \{G1, G2\}&amp;lt;/tex&amp;gt;. Глобальная сеть генератора работает с изображениями с разрешением &amp;lt;tex&amp;gt;1024 × 512&amp;lt;/tex&amp;gt;, в то время как локальный усилитель сети принимает на вход изображения с разрешением в 4 раза больше размера вывода предыдущей сети. Для получения изображений большего разрешения могут быть добавлены дополнительные локальные усилители сети.&lt;br /&gt;
&lt;br /&gt;
Чтобы различать реальные и синтезированные изображения с высоким разрешением, дискриминатор должен иметь большое поле восприятия. Для этого потребуется либо более глубокая сеть, либо более крупные сверточные ядра, оба из которых увеличат емкость сети и потенциально могут вызвать переобучение. Кроме того, оба варианта требуют большего объема памяти для обучения, что уже является дефицитным ресурсом для создания изображений с высоким разрешением. Для решения проблемы предлагаем используется '''3 дискриминатора''', которые имеют идентичную структуру сети, но работают с разными масштабами изображения&amp;lt;ref name=&amp;quot;Pix2PixHDPaper&amp;quot;&amp;gt;[https://arxiv.org/pdf/1711.11585.pdf High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Функция ошибки''' была улучшена за счет добавления ошибки (feature matching loss) в разных масштабах изображения для каждого дискриминатора &amp;lt;tex&amp;gt;\sum_{k=1}^{3} L_{FM}(G, D_k)&amp;lt;/tex&amp;gt;, для вычисления которой будем использовать  выдаваемые значения дискриминатора на разных слоях изображения: &amp;lt;tex&amp;gt;L_{FM}(G, D_k) = \mathbb{E}_{(s,x)}\sum_{i=1}^{T}\frac{1}{N_i}[||D_k^{(i)}(s,x) - D_k^{(i)}(s, G(s))||]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} количество слоев, &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; {{---}} количество элементов в каждом слое, &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} исходное сегментированное изображение, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} соответствующее реальное изображение, &amp;lt;tex&amp;gt;G(s)&amp;lt;/tex&amp;gt; {{---}} сгенерированное изображение.&lt;br /&gt;
&lt;br /&gt;
На рисунках 11 и 12 приведены примеры генерации изображения по входным сегментированным изображениям с применением различных стилей.&lt;br /&gt;
&lt;br /&gt;
[[File:City_pix2pixhd.gif|600px|center|thumb|Рис. 11. Пример работы Pix2PixHD {{---}} label-to-streetview.&amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Face_pix2pixhd.gif|600px|center|thumb|Рис. 12. Пример работы Pix2PixHD {{---}} label-to-face. &amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== CycleGAN ==&lt;br /&gt;
[[File:CycleGAN Arxitecture.jpeg|390px|right|thumb|Рис. 13. Алгоритм CycleGAN &amp;lt;ref name=&amp;quot;Алгоритм CycleGAN&amp;quot;&amp;gt;[https://habr.com/ru/post/479218/  Алгоритм CycleGAN]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Нейронная сеть, в отличии от описанной выше Pix2Pix позволяет реализовать решение задачи обучения на независимых множествах. Обычно применяются для задач изменения стиля фотографий.&lt;br /&gt;
&lt;br /&gt;
=== Архитектура ===&lt;br /&gt;
'''CycleGAN'''&amp;lt;ref name=&amp;quot; Cycle-Consistent Adversarial Networks&amp;quot;&amp;gt;[https://arxiv.org/abs/1703.10593  Cycle-Consistent Adversarial Networks]&amp;lt;/ref&amp;gt; реализует архитектуру циклически-согласованных состязательных сетей (англ. {{---}} ''Cycle-Consistent Adversarial Networks''), суть которой состоит в решении проблемы отсутствия парного набора данных.&lt;br /&gt;
&lt;br /&gt;
В Архитектуре присутствуют 2 генератора и 2 дискриминатора которые выполняют различные задачи:&lt;br /&gt;
*Генератор &amp;lt;math&amp;gt;G_{A}&amp;lt;/math&amp;gt; учится преобразовывать исходное изображение &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; в выходное изображение &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; &lt;br /&gt;
*Генератор &amp;lt;math&amp;gt;G_{B}&amp;lt;/math&amp;gt; учится преобразовывать выходное изображение &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; в исходное изображение &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;&lt;br /&gt;
*Дискриминатор &amp;lt;math&amp;gt;D_{A}&amp;lt;/math&amp;gt; учится различать изображение &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и сгенерированное изображение &amp;lt;math&amp;gt;X ( G_{B}(Y) )&amp;lt;/math&amp;gt;&lt;br /&gt;
*Дискриминатор &amp;lt;math&amp;gt;D_{B}&amp;lt;/math&amp;gt; учится различать изображение &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; и сгенерированное изображение &amp;lt;math&amp;gt;Y ( G_{A}(X) )&amp;lt;/math&amp;gt;&lt;br /&gt;
Структура генератора состоит из кодировщика (англ. {{---}} ''Encoder''), создающего функцию особенностей из исходного изображения, трансформатора (англ. {{---}} ''Transformation''), изменяющего функцию особенностей для создания сгенерированного изображения, и декодера (англ. {{---}} ''Decoder''), возвращающего функцию особенностей обратно в формат изображения. Структура дискриминатора состоит из декодера, извлекающего особенности из входного изображения, и классификатора, определяющего сгенерировано ли изображение.&lt;br /&gt;
[[File:Generator.jpeg|390px|right|thumb|Рис. 14. Архитектура Генератора  &amp;lt;ref name=&amp;quot;how CycleGAN works&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
[[File:Discriminator.jpeg|390px|right|thumb|Рис. 15. Архитектура Дискриминатора &amp;lt;ref name=&amp;quot;how CycleGAN works&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
Реализация элементов дискриминатора и генератора аналогичны тем, которые используются в Pix2Pix.&lt;br /&gt;
&lt;br /&gt;
'''Сеть''' предоставляет подход перевода изображения из исходного домена  &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; в целевой домен &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; при отсутствии парных примеров. Цель задачи в изучении отображения &amp;lt;math&amp;gt;G{A}: X → Y &amp;lt;/math&amp;gt;, так, чтобы распределение изображений &amp;lt;math&amp;gt;G_{A}(X)&amp;lt;/math&amp;gt; было неотличимо от распределения &amp;lt;math&amp;gt;G_{B}(Y)&amp;lt;/math&amp;gt; с учетом состязательной потери (aнгл. {{---}} ''Сonsistency loss'').&lt;br /&gt;
Также чтобы избежать коллапса мод&amp;lt;ref name=&amp;quot;Mode Collapse&amp;quot;&amp;gt;[http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)#.D0.A3.D0.BB.D1.83.D1.87.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F_GAN Улучшение обучения GAN]&amp;lt;/ref&amp;gt;(англ. {{---}} ''Mode collapse''), следует проверить отображение  &amp;lt;math&amp;gt;G : Y → X &amp;lt;/math&amp;gt;, который пытается сопоставить &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Другими словами для выполнения успешного преобразования должно выполниться следующее условие &amp;lt;math&amp;gt;G_{B}(G_{A}(X)) \sim X + Loss_{full}. &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Функция потери ====&lt;br /&gt;
Функция потери&amp;lt;ref name=&amp;quot;Cyclic_loss&amp;quot;&amp;gt;[https://towardsdatascience.com/a-gentle-introduction-to-cycle-consistent-adversarial-networks-6731c8424a87  Cyclic_loss]&amp;lt;/ref&amp;gt; должна быть выполнена таким образом, что&lt;br /&gt;
все отображения должны быть противоположными друг другу и взаимно однозначными.&lt;br /&gt;
&lt;br /&gt;
Она состоит из потери согласованности цикла (англ. {{---}} ''Cycle Consistency Loss'') и состязательной потери (англ. {{---}} ''Adversarial loss'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Loss_{adv}(G,D_{B},X) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{B}(G_{Xi})))*2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Loss_{adv}(F,D_{A},Y) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{A}(F_{Yi}))*2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Loss_{cyc}(G,F,X,Y) = \frac{1}{m}\sum_{i=1}^m(F(G(Xi) - Xi) + (G(F(Yi)) - Yi))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Loss_{full} = Loss_{adv} + \lambda * Loss_{cyc}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} гиперпараметр для уравнения потери согласованности цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Doge starrynight.jpg|700px|center|thumb|Рис. 16. Пример работы CycleGAN  &amp;lt;ref name=&amp;quot;how CycleGAN works&amp;quot;&amp;gt;[https://towardsdatascience.com/cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-3fa8d9a6aa1d  Пример работы CycleGAN]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
[[File:Comics.png|700px|center|thumb|Рис. 17. Пример работы CycleGAN  &amp;lt;ref name=&amp;quot;Алгоритм CycleGAN&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
* [[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
* [[Сверточные нейронные сети]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://arxiv.org/abs/1611.07004 Image-to-Image Translation with Conditional Adversarial Networks]&lt;br /&gt;
* [https://arxiv.org/abs/1711.11585 High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs]&lt;br /&gt;
* [https://arxiv.org/abs/1805.03189 Learning image-to-image translation using paired and unpaired training samples]&lt;br /&gt;
* [https://arxiv.org/abs/1703.10593v6 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]&lt;br /&gt;
* [https://www.coursera.org/learn/apply-generative-adversarial-networks-gans/home/welcome Apply Generative Adversarial Networks (GANs) {{---}} Coursera]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение | ]]&lt;br /&gt;
[[Категория:Компьютерное зрение | ]]&lt;br /&gt;
[[Категория:Сверточные нейронные сети | ]]&lt;br /&gt;
[[Категория:Глубокое обучение | ]]&lt;br /&gt;
[[Категория:{{BASEPAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%B8%D1%80%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B8%D0%B4&amp;diff=83327</id>
		<title>Квадратичные иррациональности и приведённый вид</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%B8%D1%80%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B8%D0%B4&amp;diff=83327"/>
				<updated>2022-09-01T04:42:59Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Эту страницу надо удалить.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Удалить]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D1%81%D0%BE%D1%87%D0%BB%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=83326</id>
		<title>Использование обхода в глубину для поиска точек сочленения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_%D1%82%D0%BE%D1%87%D0%B5%D0%BA_%D1%81%D0%BE%D1%87%D0%BB%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=83326"/>
				<updated>2022-09-01T04:42:53Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=Дан [[Отношение связности, компоненты связности|связный]] [[Основные определения теории графов|неориентированный граф]] &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. Найти все [[Точка сочленения, эквивалентные определения|точки сочленения]] в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt; O(|V| + |E|).&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
=== Описание алгоритма ===&lt;br /&gt;
Запустим [[Обход в глубину, цвета вершин|обход в глубину]] из произвольной вершины графа; обозначим её через &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt;. Заметим следующий факт:&lt;br /&gt;
&lt;br /&gt;
* Пусть мы находимся в обходе в глубину, просматривая сейчас все рёбра из вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, если текущее ребро (&amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;to&amp;lt;/tex&amp;gt;) таково, что из вершины &amp;lt;tex&amp;gt;to&amp;lt;/tex&amp;gt; и из любого её потомка в дереве обхода в глубину нет обратного ребра в вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; или какого-либо её предка, то эта вершина является точкой сочленения. В противном случае она ей не является. (В самом деле, мы этим условием проверяем, нет ли другого пути из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;to&amp;lt;/tex&amp;gt;, кроме как спуск по ребру (&amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;to&amp;lt;/tex&amp;gt;) дерева обхода в глубину.)&lt;br /&gt;
&lt;br /&gt;
Теперь осталось научиться проверять этот факт для каждой вершины эффективно. Для этого воспользуемся &amp;quot;временами входа в вершину&amp;quot;, вычисляемыми алгоритмом поиска в глубину.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Joint_point_2_rsz.png‎|280px|thumb|left| &amp;lt;font color=red&amp;gt;Красным&amp;lt;/font&amp;gt; цветом обозначены точки сочленения&amp;lt;br&amp;gt;&amp;lt;font color=blue&amp;gt;Синим&amp;lt;/font&amp;gt; — ребра по которым идет DFS]]&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;tin[u]&amp;lt;/tex&amp;gt; — время входа поиска в глубину в вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Через &amp;lt;tex&amp;gt;up[u]&amp;lt;/tex&amp;gt; обозначим минимум из времени захода в саму вершину &amp;lt;tex&amp;gt;tin[u]&amp;lt;/tex&amp;gt;, времен захода в каждую из вершин &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, являющуюся концом некоторого обратного ребра &amp;lt;tex&amp;gt;(u,p)&amp;lt;/tex&amp;gt;, а также из всех значений &amp;lt;tex&amp;gt;up[v]&amp;lt;/tex&amp;gt; для каждой вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, являющейся непосредственным сыном &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в дереве поиска.&lt;br /&gt;
&lt;br /&gt;
Тогда из вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; или её потомка есть обратное ребро в её предка &amp;lt;tex&amp;gt;\Leftrightarrow \exists&amp;lt;/tex&amp;gt; такой сын &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;up[v] &amp;amp;lt; tin[u]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, если для текущей вершины &amp;lt;tex&amp;gt;u \ne root &amp;lt;/tex&amp;gt; существует непосредственный сын &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;up[v] \geqslant tin[u]&amp;lt;/tex&amp;gt;, то вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; является точкой сочленения, в противном случае она точкой сочленения не является.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
 &lt;br /&gt;
 '''function''' findCutPoints(G[n]: '''Graph'''):&amp;lt;font color=darkgreen&amp;gt; // функция принимает граф G с количеством вершин n и выполняет поиск точек сочленения во всем графе &amp;lt;/font&amp;gt;&lt;br /&gt;
     visited = array[n, ''false'']&lt;br /&gt;
                    &lt;br /&gt;
    '''function''' dfs(v: '''int''', p: '''int'''):&lt;br /&gt;
       time = time + 1&lt;br /&gt;
       up[v] = tin[v] = time &lt;br /&gt;
       visited[v] = ''true''&lt;br /&gt;
       count = 0             &lt;br /&gt;
       '''for''' u: (v, u) '''in''' G   &lt;br /&gt;
          '''if''' u == p&lt;br /&gt;
             '''continue'''&lt;br /&gt;
          '''if''' visited[u]&lt;br /&gt;
             up[v] = min(up[v], tin[u])&lt;br /&gt;
          '''else'''&lt;br /&gt;
             dfs(u, v) &lt;br /&gt;
             count = count + 1&lt;br /&gt;
             up[v] = min(up[v], up[u])&lt;br /&gt;
             '''if''' p != -1 '''and''' up[u] &amp;gt;= tin[v]&lt;br /&gt;
                  v — cutpoint &lt;br /&gt;
       '''if''' p == -1 '''and''' count &amp;gt;= 2&lt;br /&gt;
             v — cutpoint &lt;br /&gt;
                    	   &lt;br /&gt;
    '''for''' i = 1 '''to''' n             &lt;br /&gt;
       '''if''' '''not''' visited[i]              &lt;br /&gt;
          dfs(i, -1)&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; — дерево [[Обход в глубину, цвета вершин|обхода в глубину]], &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; — корень &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. &lt;br /&gt;
* Вершина &amp;lt;tex&amp;gt;u \ne root&amp;lt;/tex&amp;gt; — точка сочленения &amp;lt;tex&amp;gt;\Leftrightarrow \exists v \in T&amp;lt;/tex&amp;gt; — сын &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; : из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; или любого потомка вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; нет обратного ребра в предка вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. &lt;br /&gt;
* &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; — точка сочленения &amp;lt;tex&amp;gt;\Leftrightarrow root&amp;lt;/tex&amp;gt; имеет хотя бы двух сыновей в дереве поиска в глубину.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Joint_point_1.png|48px |thumb|‎ | Рисунок к &amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Удалим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Докажем, что не существует пути из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в любого предка вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть это не так. Тогда &amp;lt;tex&amp;gt;\exists x \in T&amp;lt;/tex&amp;gt; — предок &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;\exists&amp;lt;/tex&amp;gt; путь из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G \backslash u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — предпоследняя вершина на этом пути, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — потомок &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;(w, x)&amp;lt;/tex&amp;gt; — не ребро дерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;(в силу единственности пути в дереве) &amp;lt;tex&amp;gt;\Rightarrow (w, x)&amp;lt;/tex&amp;gt; — обратное ребро, что противоречит условию.&lt;br /&gt;
#Пусть у &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; хотя бы два сына. Тогда при удалении &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; не существует пути между его поддеревьями, так как не существует перекрестных ребер &amp;lt;tex&amp;gt;\Rightarrow root&amp;lt;/tex&amp;gt; — точка сочленения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Докажем что из отрицания второго утверждения следует отрицание первого. Обозначим через &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; граф, состоящий из вершин, не являющихся потомками &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Удалим вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Очевидно, что граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; и все поддеревья вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; останутся связными, кроме того из каждого поддерева есть ребро в &amp;lt;tex&amp;gt;G' \Rightarrow G \backslash u&amp;lt;/tex&amp;gt; — связный &amp;lt;tex&amp;gt;\Rightarrow u&amp;lt;/tex&amp;gt; — не точка сочленения.&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; — точка сочленения и у него есть только один сын. Тогда при удалении &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; остается дерево с корнем в его сыне, содержащее все остальные вершины графа, то есть оставшийся граф связен — противоречие с тем, что &amp;lt;tex&amp;gt;root&amp;lt;/tex&amp;gt; — точка сочленения.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Асимптотика ===&lt;br /&gt;
Оценим время работы алгоритма. Процедура &amp;lt;tex&amp;gt;\mathrm{dfs}&amp;lt;/tex&amp;gt; вызывается от каждой вершины не более одного раза, а внутри процедуры рассматриваются все такие [[Основные определения теории графов|ребра]] &amp;lt;tex&amp;gt;\{e\ |\ \mathrm{begin(e)} = v\}&amp;lt;/tex&amp;gt;. Всего таких ребер для всех вершин в графе &amp;lt;tex&amp;gt;O(E)&amp;lt;/tex&amp;gt;, следовательно, время работы алгоритма оценивается как &amp;lt;tex&amp;gt;O(V+E)&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;
* Асанов М., Баранский В., Расин В. — Дискретная математика: Графы, матроиды, алгоритмы — Лань, 2010. — 368 с. — ISBN 978-5-8114-1068-2&lt;br /&gt;
* [http://e-maxx.ru/algo/cutpoints MAXimal :: algo :: Поиск точек сочленения]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Обход в глубину]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=83325</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=83325"/>
				<updated>2022-09-01T04:42:47Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов.&lt;br /&gt;
&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Составить множество, состоящее из нетерминалов, входящих в левые части таких правил.&lt;br /&gt;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2 \ldots C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2 \ldots C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов. Противоречие. Следовательно, алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Модификация с очередью ===&lt;br /&gt;
Заведем несколько структур:&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождаюшие нетерминалы.&lt;br /&gt;
# Для каждого правила вида &amp;lt;tex&amp;gt;A \rightarrow \alpha_0 B_1 \alpha_1 B_2 \alpha_2 \ldots B_k \alpha_k \ &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''.&lt;br /&gt;
Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2 \ldots X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2 \ldots X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2 \ldots X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2 \ldots w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, \ldots, Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} \ldots Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&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;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате мы получим новую грамматику без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил: &lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B5_%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B&amp;diff=83324</id>
		<title>Линейные ограниченные операторы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B5_%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B&amp;diff=83324"/>
				<updated>2022-09-01T04:42:42Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
Будем рассматривать пару пространств &amp;lt;tex&amp;gt;X, Y&amp;lt;/tex&amp;gt; и оператор &amp;lt;tex&amp;gt;A: X \to Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Оператор &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''линейным''', если &amp;lt;tex&amp;gt;A(\alpha x_1 + \beta x_2) = \alpha A(x_1) + \beta A(x_2)&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;A&amp;lt;/tex&amp;gt; называется &amp;lt;tex&amp;gt;\|A\| = \sup\limits_{\|x\| \le 1} \| Ax \|&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;A&amp;lt;/tex&amp;gt; '''ограничен''', если &amp;lt;tex&amp;gt;\|A\| \le \infty&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;A&amp;lt;/tex&amp;gt; '''непрерывен''' в точке &amp;lt;tex&amp;gt;x_0&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\lim\limits_{x \to x_0} Ax = Ax_0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так же, как и в случае с линейным функционалом, можно показать, что ограниченность линейного оператора равносильна его непрерывности (копипаста из 2 семестра)&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Линейный оператор непрерывен тогда и только тогда, когда он ограничен.&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; {{---}} ограничен, значит, &amp;lt;tex&amp;gt; \left \| \mathcal{A}(x) \right \| \le m \left \| x \right \|, m \ge 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt;\left \| \mathcal{A} \left( \Delta x \right) \right \| \le m \left \| \Delta x \right \| &amp;lt;/tex&amp;gt;&lt;br /&gt;
#: &amp;lt;tex&amp;gt; \mathcal{A} \left( \Delta x \right) \xrightarrow [\Delta x \to 0]{} 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
#: А непрерывен в 0, следовательно, непрерывен и на X.&lt;br /&gt;
# Пусть &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; {{---}} непрерывен на X, в частности, в &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#: Подставляем в определение &amp;lt;tex&amp;gt;\varepsilon = 1: ~ \exists \delta &amp;gt; 0: \forall z: \left \| z \right \| \le \delta \to ~ \left \| \mathcal{A}(z) \right \| \le \varepsilon = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* Для &amp;lt;tex&amp;gt;x = 0&amp;lt;/tex&amp;gt; условие ограничения будет соблюдено при любом &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#* Для &amp;lt;tex&amp;gt;x \ne 0&amp;lt;/tex&amp;gt; рассмотрим &amp;lt;tex&amp;gt;z = \frac{\delta}{2} \frac {x}{\left \| x \right \|}.\quad&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;tex&amp;gt; \left \| z \right \| = \frac{\delta}{2} &amp;lt; \delta \to \left \| \mathcal{A}(z) \right \| \le 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
#*: Но &amp;lt;tex&amp;gt;\mathcal{A} \left ( z \right ) = \frac {\delta}{2 \left \| x \right \|} \mathcal{A}(x) &amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt; \| \mathcal{A}(z) \| = \frac {\delta}{2 \| x \|} \| \mathcal{A}(x) \| \le 1&amp;lt;/tex&amp;gt;, таким образом, &amp;lt;tex&amp;gt; \| \mathcal{A}(x) \| \le \frac2{\delta} \| x \|&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: Выберем &amp;lt;tex&amp;gt; m = \frac2{\delta} &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;Y&amp;lt;/tex&amp;gt; - линейное множество, &amp;lt;tex&amp;gt;Cl Y = X&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A: Y \to Z&amp;lt;/tex&amp;gt; - линейный ограниченный оператор, &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; {{---}} банахово.&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\exists ! B: X \to Z&amp;lt;/tex&amp;gt;:&lt;br /&gt;
# &amp;lt;tex&amp;gt;B|_Y = A&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\|B\| = \|A\|&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;Cl Y = X&amp;lt;/tex&amp;gt;, то для любого &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; можно подобрать последовательность &amp;lt;tex&amp;gt;y_n \in Y: y_n \to x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z_n = Ay_n \in Z&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\|z_n - z_m\| = \|A(y_n - y_m)\| \le \|A\|\|y_n - y_m\| \xrightarrow[n,m\to \infty]{} 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{ z_n \}&amp;lt;/tex&amp;gt; сходится в себе, следовательно, в силу банаховости &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\{ z_n \}&amp;lt;/tex&amp;gt; сходится, &amp;lt;tex&amp;gt;\exists z = \lim\limits_{n \to \infty} z_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;z \underset{def}{=} Bx = \lim\limits_{y_n \to x} Ay_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; линеен по арифметике предела. Проверим однозначность определения:&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;y_n' \to x&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\|Ay_n' - Ay\| \le \|A\|\|y_n - y_n'\| \to 0&amp;lt;/tex&amp;gt;, то есть, &amp;lt;tex&amp;gt;\lim Ay_n' = \lim Ay_n&amp;lt;/tex&amp;gt;, и оператор определен корректно.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Ясно, что норма оператора сохраняется, здесь все тривиально&amp;quot;{{TODO|t=написать о тривиальном. Наверняка также как в [[Линейные функционалы#densefunextension]], но лучше бы все равно написать, а то мало ли}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Обычно пространство линейных ограниченных операторов из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; обозначают как &amp;lt;tex&amp;gt;L(X, Y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; {{---}} банахово, тогда &amp;lt;tex&amp;gt;L(X, Y)&amp;lt;/tex&amp;gt; тоже банахово.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим сходящуюся в себе последовательность операторов &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;L(X, Y)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для произвольного &amp;lt;tex&amp;gt;x \in X&amp;lt;/tex&amp;gt; рассмотрим &amp;lt;tex&amp;gt;\{A_n x\}&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\|A_nx -A_mx\| = \|(A_n - A_m)x\| \le \|A_n - A_m\| \|x\| \to 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;\{A_nx\}&amp;lt;/tex&amp;gt; сходится в себе, то существует &amp;lt;tex&amp;gt;y = \lim\limits_{n \to \infty} A_n x, y \underset{def}{=} Ax&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;A = \lim\limits_{n \to \infty} A_n&amp;lt;/tex&amp;gt;. Рассмотрим &amp;lt;tex&amp;gt;\|x\| \le 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;\{A_n\}&amp;lt;/tex&amp;gt; сходится в себе, то &amp;lt;tex&amp;gt;\forall \varepsilon \exists N: \forall n, m \ge N: \| A_n - A_m \| &amp;lt; \varepsilon&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;\forall x \forall \varepsilon \exists N_1(x): \forall n \ge N_1: \| A_n x - A x \| &amp;lt; \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, для любого &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; можно выбрать &amp;lt;tex&amp;gt;n_1(x) \ge N, N_1(x)&amp;lt;/tex&amp;gt;, такое, что &amp;lt;tex&amp;gt;\forall m \ge N: \|Ax - A_m x\| \le \|Ax - A_{n_1} x\| + \|(A_{n_1} - A_m) x\| \le 2 \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;\|A - A_m\| = \sup\limits_{\|x\| \le 1} \|Ax - A_m x\| \le 2 \varepsilon \to 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
* &amp;lt;tex&amp;gt;A: \mathbb{R}^n \to \mathbb{R}^m&amp;lt;/tex&amp;gt; — очевидно, линеен, а ограничен, так как в качестве константы, его ограничивающей можно взять сумму модулей элементов матрицы оператора.&lt;br /&gt;
* &amp;lt;tex&amp;gt;X = C[0, 1]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; - непрерывная на &amp;lt;tex&amp;gt;[0, 1] \times [0, 1]&amp;lt;/tex&amp;gt; функция, &amp;lt;tex&amp;gt;x \in X&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;A(x, t) = \int\limits_0^1 K(t, s) x(s) ds&amp;lt;/tex&amp;gt; {{---}} интегральный оператор Фредгольма. Очевидно, он линеен, а так как &amp;lt;tex&amp;gt;|K(t, S)| \le M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|A(x, t)| \le M \|x\|&amp;lt;/tex&amp;gt;, то ограничен.&lt;br /&gt;
&lt;br /&gt;
Сама по себе задача вычисления &amp;lt;tex&amp;gt;\|A\|&amp;lt;/tex&amp;gt; может быть нетривиальной даже в конечномерном случае.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Bounded_operator Bounded operator]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Функциональный анализ 3 курс]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8F_%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83323</id>
		<title>Композиция отношений</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8F_%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=83323"/>
				<updated>2022-09-01T04:42:36Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Композицией''' (произведением, суперпозицией) бинарных отношений (англ. ''composition of binary relations'') &amp;lt;tex&amp;gt;R\subseteq A\times B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S\subseteq B\times C&amp;lt;/tex&amp;gt; называется такое отношение &amp;lt;tex&amp;gt; (R \circ S) \subseteq A\times C&amp;lt;/tex&amp;gt;, что: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\forall a \in A, c \in C : a (R \circ S) c \iff \exists b \in B : (a R b) \wedge (b S c) &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;R\subseteq A\times A&amp;lt;/tex&amp;gt;  {{---}}  отношение &amp;quot;можно доехать на поезде&amp;quot;, а &amp;lt;tex&amp;gt;S\subseteq A\times A&amp;lt;/tex&amp;gt;  {{---}}  отношение &amp;quot;можно доехать на автобусе&amp;quot;. Тогда отношение &amp;lt;tex&amp;gt;R\circ S\subseteq A\times A&amp;lt;/tex&amp;gt;  {{---}}  отношение &amp;quot;можно добраться из пункта А в пункт Б, сначала проехав на поезде, а потом на автобусе (только по одному разу)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Степень отношений ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Степень отношения''' (англ. ''power of relation'') &amp;lt;tex&amp;gt;R^{n} \subseteq A\times A&amp;lt;/tex&amp;gt;, определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; R^{n} = R^{n-1} \circ R; &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; R^{1} = R; &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; R^{0} = \{ (x, x) \mid x \in A \}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В связи с этим понятием, также вводятся обозначения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; R^{+} = \bigcup\limits^{\infty}_{i=1} R^{i} &amp;lt;/tex&amp;gt; — [[Транзитивное замыкание]] (англ. ''transitive closure'') отношения &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; R^{*} = \bigcup\limits^{\infty}_{i=0} R^{i} &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;
|definition=&lt;br /&gt;
Отношение &amp;lt;tex&amp;gt;R^{-1} \subseteq B\times A&amp;lt;/tex&amp;gt; называют '''обратным''' (англ. ''inverse relation'') для отношения &amp;lt;tex&amp;gt; R \subseteq A\times B&amp;lt;/tex&amp;gt;, если:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; bR^{-1}a \iff aRb &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Ядром отношения''' (англ. ''kernel of relation'') &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; называется отношение &amp;lt;tex&amp;gt; R\circ R^{-1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
Композиция отношений обладает следующими свойствами:&lt;br /&gt;
&lt;br /&gt;
* Ядро отношения &amp;lt;tex&amp;gt; R &amp;lt;/tex&amp;gt; [[Симметричное отношение|симметрично]]: &amp;amp;nbsp; &amp;lt;tex&amp;gt;a (R \circ R^{-1}) b  \iff  b (R \circ R^{-1})a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Композиция отношений [[Ассоциативная операция|ассоциативна]]: &amp;amp;nbsp; &amp;lt;tex&amp;gt; (R \circ S) \circ T = R \circ (S \circ T) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Обратное отношение для отношения, являющемуся обратным к &amp;lt;tex&amp;gt; R &amp;lt;/tex&amp;gt; есть само &amp;lt;tex&amp;gt; R :&amp;lt;/tex&amp;gt; &amp;amp;nbsp; &amp;lt;tex&amp;gt;  (R^{-1})^{-1} = R &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Обратное отношение к композиции отношений &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S &amp;lt;/tex&amp;gt; есть композиция отношений, обратных к &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S : &amp;lt;/tex&amp;gt; &amp;amp;nbsp; &amp;lt;tex&amp;gt; (R \circ S) ^ {-1} = (S ^ {-1}) \circ (R ^ {-1}) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Обратное отношение к объединению отношений &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S &amp;lt;/tex&amp;gt; есть объединение отношений, обратных к &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S : &amp;lt;/tex&amp;gt; &amp;amp;nbsp;&amp;lt;tex&amp;gt; (R \cup S) ^ {-1} = (R^{-1}) \cup (S^{-1}) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Обратное отношение к пересечению отношений &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S &amp;lt;/tex&amp;gt; есть пересечение отношений, обратных к &amp;lt;tex&amp;gt;R &amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;S : &amp;lt;/tex&amp;gt; &amp;amp;nbsp;&amp;lt;tex&amp;gt; (R \cap S) ^ {-1} = (R^{-1}) \cap (S^{-1}) &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;
* Новиков Ф. А. {{---}} Дискретная математика для программистов: Учебник для вузов. 3-е изд. {{---}} СПБ.: Питер, 2009 {{---}} 52 с.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Composition_of_relations Wikipedia {{---}} Composition of relations]&lt;br /&gt;
* [http://math2.uncc.edu/~hbreiter/m1165/Lecture10.pdf UNC Charlotte {{---}} Lectures in Discrete Mathematics: Composition of Relations and Directed Graphs.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Отношения ]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=83322</id>
		<title>Теория матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=83322"/>
				<updated>2022-09-01T04:42:30Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&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;
* [[Аксиоматизация матроида базами]]&lt;br /&gt;
* [[Теорема о циклах]]&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;^\star&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;
== Объединение матроидов ==&lt;br /&gt;
* [[Объединение матроидов, проверка множества на независимость]]&lt;br /&gt;
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]&lt;br /&gt;
* [[Алгоритм построения базы в объединении матроидов]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория матроидов]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB&amp;diff=83321</id>
		<title>Согласованный интервал</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB&amp;diff=83321"/>
				<updated>2022-09-01T04:42:24Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Параллельное программирование]]&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Интервал''' — упорядоченная пара [[Срез, согласованный срез|срезов]] (не обязательно согласованных) &amp;lt;tex&amp;gt;[G, H]&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;G \le H&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Интервал $[G, H]$ является '''согласованным''', если &amp;lt;tex&amp;gt;\forall e, g: g \in G \land e \rightarrow g \Rightarrow e \in H&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Это значит, что нет сообщений, которые пересекают весь согласованный интервал в обратную сторону (или, что то же самое, нет и &amp;quot;произошло-до&amp;quot; в обратную сторону).&lt;br /&gt;
Если взять $[G, G]$, то получим в точности определение согласованного среза.&lt;br /&gt;
&lt;br /&gt;
Теорема: &amp;quot;интервал $[G, H]$ согласован&amp;quot; равносильно &amp;quot;существует согласованный срез $X$ внутри интервала: $G \le X \le H$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В одну сторону очевидно: если внутри интервала есть согласованный срез, то этот срез в обратную сторону сообщения&lt;br /&gt;
пересекать не могут. Значит, не могут они пересекать и весь интервал.&lt;br /&gt;
&lt;br /&gt;
В обратную сторону (на экзамене не требуется): рассмотрим произвольный согласованный интервал &amp;lt;tex&amp;gt;[G, H]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
В доказательстве ниже будем считать, что $a \to a$ для простоты (но можно переписать доказательство и без рефлексивности).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; может не быть согласованным срезом (если есть стрелочка из &amp;lt;tex&amp;gt;H \setminus G&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;), что печально.&lt;br /&gt;
Но можно попробовать пойти по стрелочкам в обратную сторону.&lt;br /&gt;
Придумаем формальное &amp;quot;замыкание&amp;quot; &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;: возьмём множество &amp;lt;tex&amp;gt;X = \{ e \mid \exists g \in G \colon e \rightarrow g \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* $G \subseteq X$ по построению (тут пользуемся тем, что $a \to a$).&lt;br /&gt;
* $X \subseteq H$, иначе есть стрелочка, пересекающая согласованный интервал в обратную сторону.&lt;br /&gt;
* $X$ является срезом, так как если есть $a &amp;lt; b$ и $b \in X$, есть $g \in G$ такое, что $b \rightarrow g$. По транзитивности имеем $a \rightarrow g$, что и требуется.&lt;br /&gt;
* $X$ является согласованным срезом. Пусть есть события $a \rightarrow b$, причём $b \in X$. Тогда есть такое $g \in G$, что $b \rightarrow g$. Следовательно, $a \rightarrow g$. Значит, $a \in X$, что и требовалось.&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%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=83320</id>
		<title>Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%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=83320"/>
				<updated>2022-09-01T04:42:18Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=CatBoost&amp;diff=83319</id>
		<title>CatBoost</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=CatBoost&amp;diff=83319"/>
				<updated>2022-09-01T04:42:13Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Библиотека CatBoost {{---}} метод машинного обучения, основанный на градиентном бустинге (англ. ''gradient boosting'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Практически любой современный метод на основе градиентного бустинга работает с числовыми признаками. Если у нас в наборе данных присутствуют не только числовые, но и категориальные признаки (англ. ''categorical features''), то необходимо переводить категориальные признаки в числовые. Это приводит к искажению их сути и потенциальному снижению точности работы модели.&lt;br /&gt;
Именно поэтому было важно разработать алгоритм, который умеет работать не только с числовыми признаками, но и с категориальными напрямую, закономерности между которыми этот алгоритм будет выявлять самостоятельно, без ручной «помощи».&lt;br /&gt;
CatBoost {{---}} библиотека для градиентного бустинга, главным преимуществом которой является то, что она одинаково хорошо работает «из коробки» как с числовыми признаками, так и с категориальными. Программное обеспечение разработано по методологии SCRUM.&lt;br /&gt;
&lt;br /&gt;
Документацию по CatBoost можно найти на сайте&amp;lt;ref&amp;gt;[https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/ Документация CatBoost]&amp;lt;/ref&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;
Алгоритм работы следующий: для каждого документа имеется набор значений признаков, имеется дерево, в вершинах дерева {{---}} условия. Если условие выполнено, осуществляется переход в правого ребенка вершины, иначе в левого. Нужно пройти до листа по дереву в соответствии со значениями признаков для документа. На выходе каждому документу соответствует значение листа. Это и есть ответ.&lt;br /&gt;
&lt;br /&gt;
=== Бустинг ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идея бустинг-подхода заключается в комбинации слабых (с невысокой обобщающей способностью) функций, которые строятся в ходе итеративного процесса, где на каждом шаге новая модель обучается с  использованием  данных  об  ошибках  предыдущих. Результирующая функция представляет собой линейную комбинацию базовых, слабых моделей. Более подробно можно посмотреть в статье про градиентный бустинг&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Gradient_boosting |Gradient Boosting, Wikipedia]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Далее будет рассматриваться бустинг деревьев решений. Будем строить несколько деревьев, чтобы добавление новых деревьев уменьшало ошибку. Итого при достаточно большом количестве деревьев мы сможем сильно уменьшить ошибку, однако не стоит забывать, что чем больше деревьев, тем дольше обучается модель и в какой-то момент прирост качества становится незначительным.&lt;br /&gt;
&lt;br /&gt;
=== Градиентный бустинг ===&lt;br /&gt;
&lt;br /&gt;
* В основе CatBoost лежит градиентный бустинг.&lt;br /&gt;
&lt;br /&gt;
* Градиент функции ошибки {{---}} все производные по всем значениям функции&lt;br /&gt;
Градиентный бустинг {{---}} метод машинного обучения, который создает решающую модель прогнозирования в виде ансамбля слабых моделей прогнозирования, обычно деревьев решений. Он строит модель поэтапно, позволяя оптимизировать произвольную дифференцируемую функцию потерь.&lt;br /&gt;
&lt;br /&gt;
== Особенности CatBoost ==&lt;br /&gt;
&lt;br /&gt;
=== Режимы работы ===&lt;br /&gt;
&lt;br /&gt;
* Регрессия (англ. ''regression''); &lt;br /&gt;
* Классификация (англ. ''classification'');&lt;br /&gt;
 Функция потерь (англ. ''loss function'') {{---}} максимизируем вероятность того, что все объекты в обучающей выборке классифицированы правильно, вероятность - это сигмоида над значением формулы.&lt;br /&gt;
 Функция ''predict_proba'' {{---}} на выходе получаем готовые вероятности. Нужно отметить, что складывать их уже нельзя.&lt;br /&gt;
 Функция ''predict'' {{---}} выдает необработанный результат. Такой результат можно складывать, например, с результатами других моделей.&lt;br /&gt;
* Мультиклассификация (англ. ''multiclass classification'');&lt;br /&gt;
* Ранжирование (англ. ''ranking'').&lt;br /&gt;
Объекты с попарной классификацией (??)&lt;br /&gt;
&lt;br /&gt;
=== Метрики ===&lt;br /&gt;
&lt;br /&gt;
Поддерживает множество [[Оценка_качества_в_задачах_классификации_и_регрессии|метрик]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt; (англ. ''metrics''), таких как:&lt;br /&gt;
* Регрессия: ''MAE, MAPE, RMSE, SMAPE'' etc.;&lt;br /&gt;
* Классификация: ''Logloss , Precision, Recall, F1, CrossEntropy, BalancedAccuracy'' etc.;&lt;br /&gt;
* Мультиклассификация: ''MultiClass, MultiClassOneVsAll, HammingLoss, F1'' etc.;&lt;br /&gt;
* Ранжирование: ''NDCG, PrecisionAt, RecallAt, PFound, PairLogit'' etc.&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;
&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;
=== Вычисление значений в листьях === &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;
Отметим, что существует идеальный шаг по градиенту, однако листьев в дереве меньше, чем документов в датасете.&lt;br /&gt;
Поэтому мы можем пытаться приближать тот самый идеальный шаг.&lt;br /&gt;
Чтобы найти лучший сплит, проверяем похожесть после одного шага алгоритма по градиенту.&lt;br /&gt;
&lt;br /&gt;
=== Рандомизация ===&lt;br /&gt;
&lt;br /&gt;
Есть рандомизация метрики, по которой выбирается лучшее дерево. &lt;br /&gt;
 ''Score += random_strength *  Rand (0, lenofgrad * q)'' &lt;br /&gt;
&lt;br /&gt;
''q'' {{---}} множитель, уменьшающийся при увеличении итерации. &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;
CatBoost поддерживает несколько режимов выборки данных&lt;br /&gt;
&lt;br /&gt;
* Бутстрап (англ. ''bootstrap'') Бернулли {{---}} выбираем документ с вероятностью ''p''. Регулируется параметром ''sample_rate'';&lt;br /&gt;
* Байесовский бутстрап {{---}} байесовское распределение. Регулируется параметром ''bagging_temp''.&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;
&lt;br /&gt;
* Uniform. Равномерно разбиваем отрезок от минимума значения для данного признака до максимума;&lt;br /&gt;
* Медианная сетка. Задаем количество разбиений над множеством значений, далее идем по объектам в порядке сортировки и разбиваем на группы по k объектов, где k {{---}} количество объектов в одном слоте разбиения;&lt;br /&gt;
* UniformAndQuantiles. Комбинация 1 и 2 пунктов;&lt;br /&gt;
* MaxSumLog {{---}} в основе лежит динамика, работает долго;&lt;br /&gt;
* GreedyLogSum {{---}} аналог MaxSumLog, используется жадный алгоритм, поэтому работает не точно, однако быстрее чем MaxSumLog.&lt;br /&gt;
&lt;br /&gt;
=== Работа с категориальными признаками ===&lt;br /&gt;
&lt;br /&gt;
* LabelEncoding {{---}} на реальных примерах точность работы низкая, так как появляется отношения порядка между объектами;&lt;br /&gt;
* One-hot encoding {{---}} дает неплохую точность, если различных значений признаков не много. Иначе один признак размножится на множество признаков и будет влиять на модель заведомо сильнее остальных признаков.&lt;br /&gt;
&lt;br /&gt;
 Лучше не делать препроцессинг самим из-за проблем, описанных выше. В CatBoost можно задать параметр cat_features, передав туда индексы категориальных признаков. Также можно отрегулировать параметр ''one_hot_max_size'' {{---}} максимальное количество различных значений у категориального признака, чтобы он мог в последствии быть подвержен one-hot encoding.&lt;br /&gt;
&lt;br /&gt;
== Подбор параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже описаны гиперпараметры (англ. ''hyperparameters''), на которые стоит обратить внимание при использовании библиотеки.&lt;br /&gt;
&lt;br /&gt;
* cat_features;&lt;br /&gt;
* Overfitting detector;&lt;br /&gt;
* Число итераций и learning rate;&lt;br /&gt;
* L2_reg;&lt;br /&gt;
* Random_srength;&lt;br /&gt;
* Bagging_temp;&lt;br /&gt;
* Глубина дерева (стоит попробовать 10 и 6).&lt;br /&gt;
&lt;br /&gt;
== Полезная функциональность ==&lt;br /&gt;
&lt;br /&gt;
* Snapshots;&lt;br /&gt;
* Overfitting detector;&lt;br /&gt;
* CV;&lt;br /&gt;
* eval_metrics.&lt;br /&gt;
&lt;br /&gt;
== Бенчмарки ==&lt;br /&gt;
&lt;br /&gt;
Сравнение библиотеки CatBoost с открытыми аналогами XGBoost, LightGBM и H20 на наборе публичных датасетов&amp;lt;ref&amp;gt;[https://catboost.yandex/#benchmark| Benchmarks]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример использования ==&lt;br /&gt;
* Делим данные на тренировочное и тестовое множество&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
 X_train, X_validation, y_train, y_validation = train_test_split(X, y, '''train_size'''=0.5, '''random_state'''=1234)&lt;br /&gt;
 '''print'''(X_train.shape, X_validation.shape)&lt;br /&gt;
&lt;br /&gt;
* Создаем классификатор&lt;br /&gt;
 '''from''' catboost '''import''' CatBoostClassifier&lt;br /&gt;
&lt;br /&gt;
 best_model = CatBoostClassifier(&lt;br /&gt;
    '''bagging_temperature'''=1,&lt;br /&gt;
    '''random_strength'''=1,&lt;br /&gt;
    '''thread_count'''=3,&lt;br /&gt;
    '''iterations'''=500,&lt;br /&gt;
    '''l2_leaf_reg''' = 4.0, &lt;br /&gt;
    '''learning_rate''' = 0.07521709965938336,&lt;br /&gt;
    '''save_snapshot'''=True,&lt;br /&gt;
    '''snapshot_file'''='snapshot_best.bkp',&lt;br /&gt;
    '''random_seed'''=63,&lt;br /&gt;
    '''od_type'''='Iter',&lt;br /&gt;
    '''od_wait'''=20,&lt;br /&gt;
    '''custom_loss'''=['AUC', 'Accuracy'],&lt;br /&gt;
    '''use_best_model'''=True&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
* Обучаемся&lt;br /&gt;
&lt;br /&gt;
 best_model.fit(&lt;br /&gt;
    X_train, y_train,&lt;br /&gt;
    '''cat_features'''=cat_features,&lt;br /&gt;
    '''eval_set'''=(X_validation, y_validation),&lt;br /&gt;
    '''logging_level'''='Silent',&lt;br /&gt;
    '''plot'''=True&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
* Вывод числа деревьев в модели&lt;br /&gt;
&lt;br /&gt;
 '''print'''('Resulting tree count:', best_model.tree_count_)&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; '''Resulting tree count: 217'''&lt;br /&gt;
&lt;br /&gt;
* Используем скользящий контроль (англ. cross validation)&lt;br /&gt;
 '''from''' catboost '''import''' cv&lt;br /&gt;
&lt;br /&gt;
 params = best_model.get_params()&lt;br /&gt;
 params['iterations'] = 10&lt;br /&gt;
 params['custom_loss'] = 'AUC'&lt;br /&gt;
 del params['use_best_model']&lt;br /&gt;
 pool1 = Pool(X, '''label'''=y, '''cat_features'''=cat_features)&lt;br /&gt;
&lt;br /&gt;
 cv_data = cv(&lt;br /&gt;
    '''params''' = params,&lt;br /&gt;
    '''pool''' = pool1,&lt;br /&gt;
    '''fold_count'''=2,&lt;br /&gt;
    '''inverted'''=False,&lt;br /&gt;
    '''shuffle'''=True,&lt;br /&gt;
    '''stratified'''=False,&lt;br /&gt;
    '''partition_random_seed'''=0&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
* Выводим результат&lt;br /&gt;
 best_value = np.max(cv_data['AUC_test_avg'])&lt;br /&gt;
 best_iter = np.argmax(cv_data['AUC_test_avg'])&lt;br /&gt;
 '''print'''('Best validation AUC score: {:.2f}±{:.2f} on step {}'.format(&lt;br /&gt;
    best_value,&lt;br /&gt;
    cv_data['AUC_test_stddev'][best_iter],&lt;br /&gt;
    best_iter&lt;br /&gt;
 ))&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; '''Best validation AUC score: 0.91±0.00 on step 9'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Больше примеров&amp;lt;ref&amp;gt;[https://tech.yandex.com/catboost/doc/dg/concepts/python-usages-examples-docpage Примеры ипользования CatBoost]&amp;lt;/ref&amp;gt; можно найти на сайте библиотеки''.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Дерево_решений_и_случайный_леc|Дерево решений и случайный леc]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[:Бустинг,_AdaBoost|Бустинг, AdaBoost]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/| Overview of CatBoost]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Gradient_boosting| Gradient Boosting, WIkipedia]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9&amp;diff=83318</id>
		<title>Расширения полей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9&amp;diff=83318"/>
				<updated>2022-09-01T04:42:07Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt; K \subset F&amp;lt;/tex&amp;gt;, F называется расширением K (если &amp;lt;tex&amp;gt;[F : K]&amp;lt;/tex&amp;gt; - конечна, то F - конечное расширение поля K)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Степенью расширения называется величина &amp;lt;tex&amp;gt;[F:K]&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;A \subset K \subset F \Rightarrow [F:A] = [K:A] \cdot [F:K]&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;K \subset F, \alpha \in F&amp;lt;/tex&amp;gt;, рассмотрим &amp;lt;tex&amp;gt;K(\alpha)&amp;lt;/tex&amp;gt; {{---}} наименьшее подполе &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt;, которое содержит &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; (пересечение всех таких подполей содержится в &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; получается тоже подполе (замкнутое относительно операций сложения, умножения и обратно). &amp;lt;br /&amp;gt;&lt;br /&gt;
Все возможные записи с &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; образуют поле &amp;lt;tex&amp;gt;K(\alpha)&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;\frac{(K_1+\alpha)^7}{\alpha + K_2}&amp;lt;/tex&amp;gt; и т.п. &amp;lt;br /&amp;gt;&lt;br /&gt;
Если &amp;lt;tex&amp;gt;\alpha \in K \Rightarrow K(\alpha)=K, K \subset K(\alpha) \subset F, K(\alpha)&amp;lt;/tex&amp;gt; {{---}} расширение поля &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. (простое расширение {{---}} присоединение одного элемента). &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;K \subset K(\alpha) &amp;lt;/tex&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists f \in K[x] \colon f(\alpha) = 0&amp;lt;/tex&amp;gt; {{---}} простое алгебраическое&lt;br /&gt;
# &amp;lt;tex&amp;gt;\nexists f&amp;lt;/tex&amp;gt; {{---}} простое трансцендентное&lt;br /&gt;
# &amp;lt;tex&amp;gt;K(\alpha) \cong K(x) = \left\{\frac{p(x)}{q(x)} \mid p(x),q(x) \in K[x] \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Категория: Поля]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=83317</id>
		<title>Обучение на больших данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=83317"/>
				<updated>2022-09-01T04:42:01Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Обучение на больших данных''' {{---}} раздел машинного обучения, специализирующийся на построении моделей, обрабатывающих большие объёмы данных. Также встречаются термины &amp;quot;big data&amp;quot; или &amp;quot;большие данные&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Понятие больших данных ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология и история ===&lt;br /&gt;
&lt;br /&gt;
Сам термин &amp;quot;большие данные&amp;quot; часто трактуется очень неоднозначно, так как в ходе истории компьютерной техники объём данных и носителей этих данных возрастал в геометрической прогрессии. 50 лет назад жёсткий диск на 5 мегабайт нельзя было поднять без помощи автопогрузчика. В наши же дни маленькая коробочка весом в полкило может вмещать до нескольких терабайт данных (а то и десятков терабайт), а данные, хранящиеся на различных серверах можно исчислять петабайтами. Поэтому вопрос, какие же данные считать большими, довольно запутанный.&lt;br /&gt;
&lt;br /&gt;
В качестве универсального решения было принято, что те данные, которые невозможно уместить на одном сервере, можно называть &amp;quot;большими&amp;quot;. Но это далеко не все признаки &amp;quot;больших&amp;quot; данных. В наше время на серверных кластерах информация постоянно двигается, существует понятие &amp;quot;поток данных&amp;quot;, генерируется много новой информации, и всё это постоянно записывается и перезаписывается. Из-за этого также возникает ряд проблем, но об этом позже.&lt;br /&gt;
&lt;br /&gt;
=== Признаки больших данных. Правило VVV ===&lt;br /&gt;
Чтобы массив информации обозначить приставкой «big» он должен обладать следующими признаками&amp;lt;ref name=&amp;quot;vvv&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5#VVV Правило VVV]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
* Volume (Объем) {{---}} данные измеряются по физической величине и занимаемому пространству на цифровом носителе. К «big» относят массивы свыше 150 Гб в сутки;&lt;br /&gt;
* Velocity (Скорость, обновление) {{---}} информация регулярно обновляется и для обработки в реальном времени необходимы интеллектуальные технологии &amp;lt;ref name=&amp;quot;inttech&amp;quot;&amp;gt;[https://studme.org/200941/informatika/intellektualnye_tehnologii_primenenie Интеллектуальные технологии]&amp;lt;/ref&amp;gt; в рамках больших данных;&lt;br /&gt;
* Variety (Разнообразие) {{---}} информация в массивах может иметь неоднородные форматы, быть структурированной частично, полностью и скапливаться бессистемно. Например, социальные сети используют большие данные в виде текстов, видео, аудио, финансовых транзакций, картинок и прочего.&lt;br /&gt;
&lt;br /&gt;
В современных системах рассматриваются два дополнительных фактора:&lt;br /&gt;
* Variability (Изменчивость) {{---}} потоки данных могут иметь пики и спады, сезонности, периодичность. Всплески неструктурированной информации сложны в управлении, требует мощных технологий обработки;&lt;br /&gt;
* Value (Значение данных) {{---}} информация может иметь разную сложность для восприятия и переработки, что затрудняет работу интеллектуальным системам. Например, массив сообщений из соцсетей {{---}} это один уровень данных, а транзакционные операции {{---}} другой. Задача машин определить степень важности поступающей информации, чтобы быстро структурировать.&lt;br /&gt;
&lt;br /&gt;
== Особенности работы с большими данными ==&lt;br /&gt;
&lt;br /&gt;
=== Порядок работы с большими данными ===&lt;br /&gt;
Чтобы эффективно обрабатывать и анализировать большие данные, существуют такие инструменты как &amp;quot;аналитические модели&amp;quot;&amp;lt;ref name=&amp;quot;analiticsmodels&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C Математические модели в форме аналитических моделей]&amp;lt;/ref&amp;gt;. Их решения ищутся в замкнутом виде, в виде функциональных зависимостей. Такие модели способны строить гипотезы на основе больших данных, искать в них зависимости и закономерности {{---}} всю самую полезную для большинства бизнес-задач информацию. Кроме того, важна хорошая [[Интерпретируемые модели|интерпретируемость]] построенной модели, так как это позволяет упростить её анализ без повторного её построения, что при работе с большими данными крайне важно. Для этого большие данные проходят через несколько этапов:&lt;br /&gt;
&lt;br /&gt;
1. [[Автоматическое машинное обучение|Чистка данных]] (англ. data cleaning) {{---}} поиск и исправление ошибок в первичном наборе информации, например, ошибки ручного ввода (опечатки) или некорректные значения с измерительных приборов из-за кратковременных сбоев;&lt;br /&gt;
&lt;br /&gt;
2. [[Уменьшение размерности|Работа с признаками]] (англ. feature engineering) {{---}} генерация переменных для построения аналитических моделей;&lt;br /&gt;
&lt;br /&gt;
3. [[Модель алгоритма и её выбор|Построение]] и обучение аналитической модели (англ. model selection) для предсказания целевой (таргетной) переменной. Так проверяются гипотезы о зависимости таргетной переменной от предикторов.&lt;br /&gt;
&lt;br /&gt;
На практике это помогает решить множество задач. Например, проанализировать, как связаны отказы оборудования с условиями подачи напряжения, или определить вероятность своевременного возврата кредита частным заемщиком.&lt;br /&gt;
&lt;br /&gt;
=== Методы обработки больших данных ===&lt;br /&gt;
К основным методам сбора и анализа больших данных относят следующие:&lt;br /&gt;
* глубинный анализ или &amp;quot;добыча&amp;quot; данных (англ. data mining&amp;lt;ref name=&amp;quot;datamining&amp;quot;&amp;gt;[https://ru.wikipedia.org/wiki/Data_mining Data Mining]&amp;lt;/ref&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;
* визуализация аналитических данных — рисунки, графики, диаграммы, таблицы.&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;
* При возникновении ошибок в модели приходится тратить очень много ресурсов на их поиск и устранение, так как объёмы данных очень велики;&lt;br /&gt;
* Возникает проблема разнородности данных. Необходимо уметь обрабатывать данные различных форматов в рамках одной системы. Например, описания книг, фильмов и музыки;&lt;br /&gt;
&lt;br /&gt;
Также стоит отметить, что в связи с большой популярностью &amp;quot;больших данных&amp;quot;, эта сфера очень быстро развивается, постоянно появляются всё новые технологии и инструменты для работы. Для развивающегося бизнеса внедрение систем по работе с большими данными приводит к дополнительным материальным затратам. А  от специалистов в этой сфере требуется быстро овладевать новыми навыками, что также может вызвать затруднения.&lt;br /&gt;
&lt;br /&gt;
=== Применение машинного обучения к большим данным. Поиск в больших данных ===&lt;br /&gt;
При работе с большими данными иногда возникает ситуация, когда пользователю нужно найти какие-то конкретные данные. Возникает задача эффективного поиска информации в больших данных. В силу большого объёма всех данных большинство известных методов поиска будут работать неэффективно. Например, '''''поиск перебором'''''&amp;lt;ref =&amp;quot;bruteforcesearch&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Brute-force_search#:~:text=In%20computer%20science%2C%20brute%2Dforce,candidate%20satisfies%20the%20problem's%20statement. Поиск перебором]&amp;lt;/ref&amp;gt; (англ. ''exhaustive search'') {{---}} широко распространенный алгоритм не подходит для больших данных вследствие плохой оптимизации по времени исполнения и используемому месту. Также '''не подходят''' алгоритмы '''''поиска с ориентиром (индексирование)''''' (англ. ''beacon guided searching, BGS'') и [[Метрический классификатор и метод ближайших соседей|'''''метод &amp;quot;ближайших соседей&amp;quot;''''']] (англ. ''nearest neighbour search''). В случае первого на больших данных хранение индексов этих данных становится проблемой, так как данных слишком много, а в случае со вторым алгоритмом будут сильно мешать различные шумы и отклонения, коих в больших данных зачастую очень много.&lt;br /&gt;
&lt;br /&gt;
Здесь на помощь приходят [https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC генетические алгоритмы]. Процедура поиска в больших данных производится довольно часто, следовательно такие алгоритмы довольно быстро приспособятся к поиску наиболее часто используемых данных. Также к плюсам генетических алгоритмов можно отнести возможность кастомизации и устойчивость к шумам, а также хорошую масштабируемость для задач с более высокой размерностью. Всё это как раз то, что нужно в случае больших данных.&lt;br /&gt;
&lt;br /&gt;
Кроме того, при поиске в больших данных может помочь [[Кластеризация|кластеризация]] этих данных. Таким образом они будут разбиты на группы &amp;quot;похожести&amp;quot;, когда данные в каждой группе обладают сходными признаками, по которым можно существенно снизить круг дальнейшего поиска, что существенно ускоряет процесс поиска.&lt;br /&gt;
&lt;br /&gt;
С той же целью может применятся и оценка '''''важности признака при перестановке'''''&amp;lt;ref name=&amp;quot;pfi&amp;quot;&amp;gt;[https://docs.microsoft.com/ru-ru/dotnet/machine-learning/how-to-guides/explain-machine-learning-model-permutation-feature-importance-ml-net#train-the-model Permutation Feature Importance]&amp;lt;/ref&amp;gt; (англ. ''permutation feature importance, PFI''). Этот приём позволяет выделить наиболее значимые признаки объектов. Заключается он в том, что после первоначального обучения некоторой модели происходит случайная перестановка значений признаков у объектов. За итерацию берётся некоторый признак, который есть у всех объектов, и происходит случайная перестановка значений этого признака между объектами. При этом оставшиеся признаки не изменяются. Далее происходит повторный запуск модели и производится расчёт отклонений её результатов от первичных. Такая процедура выполняется для всех признаков, чтобы можно было выделить наиболее значимые. Это может существенно помочь в задаче поиска, когда можно снизить количество рассматриваемых признаков, принимая во внимание только наиболее значимые.&lt;br /&gt;
Например, существует некоторый набор данных, содержащий информацию о продаваемой недвижимости. Каждый объект недвижимости имеет множество признаков: местоположение относительно объектов инфраструктуры, уровень благополучия данного района города, и многие другие. В этом случае при помощи приёма PFI можно рассчитать, какие из этих признаков имеют большее влияние на цену объекта недвижимости.&lt;br /&gt;
&lt;br /&gt;
== Обработка разнородных данных в рамках одной системы ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Озеро&amp;quot; данных ===&lt;br /&gt;
При работе с большими данными часто возникает ситуация, когда одна и та же модель должна уметь обрабатывать данные различного формата. Это позволяет строить аналитические модели точнее и получать более достоверную информацию о данных в дальнейшем. Также отметим, что в данной ситуации данные берутся из множества '''различных''' источников, которые и определяют формат получаемых данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель распределенного хранения разнородных данных в концепции '''''«озеро данных»'''''&amp;lt;ref name=&amp;quot;datalake&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Data_lake Озеро данных]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;S=\langle\{DT\}_{i=1}^{n_{st}},\{SS\}_{j=1}^{m_{ss}},\{E\}_{k=1}^{p_e},IS,DS\rangle&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\{DT\}_{i=1}^{n_{st}}&amp;lt;/tex&amp;gt; {{---}} множество шаблонов данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\{SS\}_{j=1}^{m_{ss}}&amp;lt;/tex&amp;gt; {{---}} методы разбиения разнородных данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\{E\}_{k=1}^{p_e}&amp;lt;/tex&amp;gt; {{---}} множество исполнителей задач сбора данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;n_{st}&amp;lt;/tex&amp;gt; {{---}} количество шаблонов данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;m_{ss}&amp;lt;/tex&amp;gt; {{---}} количество типов данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;IS&amp;lt;/tex&amp;gt; {{---}} метод индексирования данных в хранилище озера данных;&lt;br /&gt;
* &amp;lt;tex&amp;gt;DS&amp;lt;/tex&amp;gt; {{---}} структура озера разнородных данных.&lt;br /&gt;
&lt;br /&gt;
Данная модель позволяет хранить как сырые разнородные данные, так и структурированные данные в соответствии с предопределенной схемой. Такой результат достигается наличием шаблонов объектов и шаблонов параметров объектов. Также это позволяет снизить временные затраты на доступ к данным.&lt;br /&gt;
&lt;br /&gt;
=== Схема модели хранения разнородных данных ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Schema.PNG|700px|thumb|right|Рисунок 1: Модель хранения разнородных данных&amp;lt;ref name=&amp;quot;datalake_pic&amp;quot;&amp;gt;[http://www.vstu.ru/upload/iblock/ed2/ed26c52e2ff99fb5b39fbaf37717a96c.pdf Модель хранения разнородных данных - схема озера данных]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим схему модели, изображённую на рисунке 1:&lt;br /&gt;
&lt;br /&gt;
* '''Object template''' {{---}} шаблон некоторого объекта &amp;lt;tex&amp;gt;O&amp;lt;/tex&amp;gt;. Каждый объект может иметь множество источников данных &amp;lt;tex&amp;gt;M_{ds}&amp;lt;/tex&amp;gt;. Структуру объекта можно представить следующим образом: &amp;lt;tex&amp;gt;O=\langle ds_1, ds_2, \dots, ds_m \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Data source template''' {{---}} шаблон источника данных. Каждый источник данных может иметь множество параметров с различными типами данных &amp;lt;tex&amp;gt;M_p&amp;lt;/tex&amp;gt;. Структуру источника данных можно представить следующим образом: &amp;lt;tex&amp;gt;ds=\langle p_1, p_2, \dots, p_k \rangle&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* '''Parameter template''' {{---}} шаблон параметра, хранимого в источнике данных;&lt;br /&gt;
&lt;br /&gt;
Чтобы реализовать такую модель хранения, необходимо выполнить следующие действия:&lt;br /&gt;
::1. '''Определение требуемой схемы данных:'''&lt;br /&gt;
::Наблюдаемые объекты описываются набором гетерогенных данных. Схема данных для хранения такого рода данных представлена в соответствии с форматом: &amp;lt;tex&amp;gt;sD=\langle gld, timestamp, (lat, lon), attrD \rangle&amp;lt;/tex&amp;gt;, в котором:&lt;br /&gt;
::* &amp;lt;tex&amp;gt;gld&amp;lt;/tex&amp;gt; {{---}} глобальный идентификатор объекта (уникален);&lt;br /&gt;
::* &amp;lt;tex&amp;gt;timestamp&amp;lt;/tex&amp;gt; {{---}} его временная метка;&lt;br /&gt;
::* &amp;lt;tex&amp;gt;(lat, lon)&amp;lt;/tex&amp;gt; {{---}} координаты его местоположения на временной отметке;&lt;br /&gt;
::* &amp;lt;tex&amp;gt;attrD&amp;lt;/tex&amp;gt; {{---}} словарь, описывающий функции объекта и его значения.&lt;br /&gt;
::2. '''Описание источников данных и настроек сборщиков данных:'''&lt;br /&gt;
::Высокоуровневое описание произвольных источников данных определяется форматом: &amp;lt;tex&amp;gt;sC=\langle sld, acs, (lat, lon), attrS \rangle&amp;lt;/tex&amp;gt;, в котором:&lt;br /&gt;
::* &amp;lt;tex&amp;gt;sld&amp;lt;/tex&amp;gt; {{---}} уникальный идентификатор источника данных;&lt;br /&gt;
::* &amp;lt;tex&amp;gt;acs&amp;lt;/tex&amp;gt; {{---}}  список значений ключа для источника данных;&lt;br /&gt;
::* &amp;lt;tex&amp;gt;attrS&amp;lt;/tex&amp;gt; {{---}} внутренняя схема данных полученных от источника данных.&lt;br /&gt;
::3. '''Построение схем привязки данных:'''&lt;br /&gt;
::На этом этапе создается связь между исходной схемой источника данных и требуемой схемой. Эта ссылка представлена в виде набора &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, содержащего пары атрибутов из набора &amp;lt;tex&amp;gt;attrD&amp;lt;/tex&amp;gt; схемы &amp;lt;tex&amp;gt;sD&amp;lt;/tex&amp;gt; и атрибутов из набора &amp;lt;tex&amp;gt;attrS&amp;lt;/tex&amp;gt; в схеме &amp;lt;tex&amp;gt;sC&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:::&amp;lt;tex&amp;gt;R=\{r_{i,j}\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
:::&amp;lt;tex&amp;gt;r_{i,j}=\langle attrD_i, attrS_j \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
::Здесь также следует помнить, что:&lt;br /&gt;
:::&amp;lt;tex&amp;gt;\exists r_{lon}:\langle lon^{(sC)}, lon^{sD} \rangle&amp;lt;/tex&amp;gt;,&lt;br /&gt;
:::&amp;lt;tex&amp;gt;\exists r_{lat}:\langle lat^{(sC)}, lat^{sD} \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::4. '''Реализация алгоритмов преобразования данных:'''&lt;br /&gt;
::В соответствии с настройками привязки &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и алгоритмами &amp;lt;tex&amp;gt;\{\alpha_k\}_{k=1}^{||R||}&amp;lt;/tex&amp;gt; реализовано преобразование данных из исходной схемы в желаемую:&lt;br /&gt;
:::&amp;lt;tex&amp;gt;\forall r_{i,j} \in R&amp;lt;/tex&amp;gt;,&lt;br /&gt;
:::&amp;lt;tex&amp;gt;\exists \alpha_{i,j}:v(attrD_i) \implies v^*(attrS_j)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; {{---}} значение атрибута.&lt;br /&gt;
::5. '''Разделение данных:'''&lt;br /&gt;
::Схема &amp;lt;tex&amp;gt;DS&amp;lt;/tex&amp;gt; для разделения потоков данных в микро-потоки:&lt;br /&gt;
:::&amp;lt;tex&amp;gt;DS_{\alpha_k}=\langle df, \alpha_k, \{mdf_l\}_{l=1}^{L_{\alpha_k}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:: Здесь &amp;lt;tex&amp;gt;df&amp;lt;/tex&amp;gt; {{---}} исходный поток данных, &amp;lt;tex&amp;gt;mdf_l&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-й l поток данных в памяти для определенного алгоритма &amp;lt;tex&amp;gt;\alpha_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_{\alpha_k}&amp;lt;/tex&amp;gt; – количество потоков. Данные разбиваются на потоки данных, подлежащие обработке в распределенной архитектуре, в соответствии с предопределенными задачами.&lt;br /&gt;
::6. '''Вставка обработанных данных в базу данных:'''&lt;br /&gt;
::Когда данные преобразуются в соответствии с определенной схемой, они вставляются в базу данных. Это позволяет извлекать разнородные данные из базы данных без дополнительных манипуляций с данными.&lt;br /&gt;
&lt;br /&gt;
Данная модель позволяет обрабатывать массивы данных различных по структуре за счёт их преобразования к нужному формату. В дальнейшем аналитическая модель, работающая с этими данными сможет делать более точные прогнозы и гипотезы, так как по каждому объекту будет значительно больше различной информации.&lt;br /&gt;
&lt;br /&gt;
=== Применение методов машинного обучения для построения &amp;quot;озера&amp;quot; данных ===&lt;br /&gt;
&lt;br /&gt;
Представленная выше модель хорошо описывает схему хранения разнородных данных путём создания некоторого шаблона, который мог бы описывать все эти данные. Построение такого шаблона может быть очень трудоёмкой задачей, так как данных много и их форматов тоже может быть много. Возникает задача '''''метапрофилирования''''' данных. Этот процесс направлен на структуризацию разносортных данных и различных метаданных. Без этого большинство действий с данными будут попросту невозможны – будь то построение запросов для СУБД, очистка данных, их классификация и кластеризация. Кроме того, когда объёмы данных слишком велики, в БД может быть огромное количество таблиц, чьи метаданные могут сильно различаться. В таких условиях получение полной информации даже по одному объекту будет практически невыполнимой задачей.&lt;br /&gt;
&lt;br /&gt;
'''Мета-профайл''' (англ. ''metadata-profile'') {{---}} особая структура данных, призванная собрать воедино различную информацию о конкретном объекте &amp;lt;tex&amp;gt;O&amp;lt;/tex&amp;gt;. Сюда так же входят и различные представления этого объекта. Например, музыкальную композицию можно идентифицировать по-разному, от названия и автора до жанра и года создания:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;MP=(Name, Prop)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;Name&amp;lt;/tex&amp;gt; {{---}} уникальное имя мета-профайла, &amp;lt;tex&amp;gt;Name \in Namespace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Namespace&amp;lt;/tex&amp;gt; {{---}} все возможные имена объектов;&lt;br /&gt;
* &amp;lt;tex&amp;gt;Prop&amp;lt;/tex&amp;gt; {{---}} множество атрибутов мета-профайла &amp;lt;tex&amp;gt;\{p_1, \dots, p_n\} | \forall p_i \in Prop: i=\{1, \dots, n\}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p_i=(PName_i, PType_i, P_i)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
** &amp;lt;tex&amp;gt;PName_i&amp;lt;/tex&amp;gt; {{---}} уникальное имя атрибута, &amp;lt;tex&amp;gt;PName_i \in PNamespace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;PNamespace&amp;lt;/tex&amp;gt; {{---}} все возможные имена атрибутов.&lt;br /&gt;
** &amp;lt;tex&amp;gt;PType_i&amp;lt;/tex&amp;gt; {{---}} простой тип данных, &amp;lt;tex&amp;gt;PType_i \in Plaintypes&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Plaintypes&amp;lt;/tex&amp;gt; {{---}} все возможные типы данных. Важно, что типы являются простыми, то есть числами, символами или строками.&lt;br /&gt;
** &amp;lt;tex&amp;gt;P_i : 0 &amp;lt; P_i &amp;lt; 1&amp;lt;/tex&amp;gt; {{---}} вероятность принадлежности атрибута &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; некоторому случайно отобранному представлению &amp;lt;tex&amp;gt;O&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построение этой структуры можно произвести различными методами машинного обучения. Сюда входят [[Логистическая регрессия|логистическая регрессия]], [[Байесовская классификация|наивная байесовская классификация]], [[Глубокое обучение|глубокое обучение]]. Фактически, здесь стоит задача классификации, в которой мы должны понять, какие атрибуты относятся к описываемому объекту, а какие нет. &lt;br /&gt;
&lt;br /&gt;
Предположим, что у нас имеется некоторая выборка данных из одного источника. В данной выборке для каждого объекта имеется лишь одно представление, достаточно полное для однозначной его идентификации. Также имеется выборка данных, относящихся к объектам совсем другого типа, но имеющих похожие атрибуты, её размер должен быть примерно таким же, как и у предыдущей, чтобы убедиться в том, что данные для обучения сбалансированы. Это необходимо, чтобы отметать неверные варианты при обучении. Опираясь на эти выборки, происходит обучение на остальных данных (различные источники данных), представленных в виде векторов, содержащих в себе имена различных атрибутов объекта и значения этих атрибутов. На основе вероятностей, имен, типов атрибутов принимается решение, отнести их к объекту или нет. Таким образом, шаблон объекта обрастает новыми атрибутами, по которым его можно идентифицировать.&lt;br /&gt;
&lt;br /&gt;
== Работа с комплексом Apache Spark для обучения на больших данных ==&lt;br /&gt;
&lt;br /&gt;
=== Об инструментах Apache Spark ===&lt;br /&gt;
&lt;br /&gt;
Многие компании на сегодняшний день уже столкнулись с необходимостью обработки больших массивов данных. Для этой цели они начали использовать проекты экосистемы [https://hadoop.apache.org/ Apache Hadoop]. Данная экосистема базируется на [https://ru.wikipedia.org/wiki/MapReduce#:~:text=MapReduce%20%E2%80%94%20%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%20%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9%2C%20%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F,%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85%20%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0%D1%85. MapReduce], парадигме параллельного программирования, разработанного компанией Google.&lt;br /&gt;
Основные достоинства MapReduce:&lt;br /&gt;
* масштабируемость;&lt;br /&gt;
* устойчивость к сбоям;&lt;br /&gt;
* простота использования.&lt;br /&gt;
Но при всех достоинствах данного инструмента, наблюдалась низкая производительность на итеративных алгоритмах (например, алгоритмы машинного обучения). Решение проблемы было найдено в университете Беркли: была разработана модель распределенных вычислений, которая имеет устойчивость к сбоям при пользовании распределенной коллекцией данных (англ. resilient distributed dataset, RDD).&lt;br /&gt;
На основе RDD по сей день развивается система [https://spark.apache.org/ Apache Spark], которая обладает сравнительно высокой эффективностью при работе итеративных алгоритмов за счет кэширования результатов в памяти. На основе концепции распределенных коллекций разрабатываются распределенные системы:&lt;br /&gt;
* [https://spark.apache.org/docs/1.0.0/sql-programming-guide.html Shark] {{---}} хранилище данных;&lt;br /&gt;
* [https://spark.apache.org/docs/latest/graphx-programming-guide.html GraphX] {{---}} система обработки графовых данных;&lt;br /&gt;
* [https://spark.apache.org/docs/latest/streaming-programming-guide.html Spark Streaming] {{---}} система обработки потоковых данных;&lt;br /&gt;
* [https://spark.apache.org/docs/latest/ml-guide.html Spark MLlib] {{---}} библиотека алгоритмов машинного обучения.&lt;br /&gt;
Все из перечисленных систем совместимы со стеком технологий Hadoop.&lt;br /&gt;
MLlib {{---}} основная библиотека Spark. Она предоставляет множество служебных программ, полезных для задач машинного обучения:&lt;br /&gt;
* классификация;&lt;br /&gt;
* регрессия;&lt;br /&gt;
* кластеризация;&lt;br /&gt;
* моделирование;&lt;br /&gt;
* сингулярное разложение и анализ по методу главных компонент;&lt;br /&gt;
* проверка гипотез и статистической выборки.&lt;br /&gt;
&lt;br /&gt;
=== Примеры реализации алгоритмов с использованием Spark MLlib ===&lt;br /&gt;
Рассмотрим удобство использования Apache Spark на примере. Задача нашей модели {{---}} предугадать: захочет ли клиент оформить срочный вклад. Для этого воспользуемся [https://www.kaggle.com/rouseguy/bankbalanced| данными из Machine Learning Repository].&lt;br /&gt;
	Напишем нашу модель на Python. Для начала работы с Apache Spark его необходимо установить, выполнив &lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''pip''' '''install'''&amp;lt;/font&amp;gt; pyspark&lt;br /&gt;
Считаем данные из нашего файла и выведем информацию о датасете на экран:&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.sql &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; SparkSession&lt;br /&gt;
 spark = SparkSession.builder.appName(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'ml-bank'&amp;lt;/font&amp;gt;).getOrCreate()&lt;br /&gt;
 df = spark.read.csv(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'bank.csv'&amp;lt;/font&amp;gt;, header = &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;True&amp;lt;/font&amp;gt;, inferSchema = &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;True&amp;lt;/font&amp;gt;)&lt;br /&gt;
 df.printSchema()&lt;br /&gt;
Результат:&lt;br /&gt;
 root&lt;br /&gt;
  |-- age: integer (nullable = true)&lt;br /&gt;
  |-- job: string (nullable = true)&lt;br /&gt;
  |-- marital: string (nullable = true)&lt;br /&gt;
  |-- education: string (nullable = true)&lt;br /&gt;
  |-- default: string (nullable = true)&lt;br /&gt;
  |-- balance: integer (nullable = true)&lt;br /&gt;
  |-- housing: string (nullable = true)&lt;br /&gt;
  |-- loan: string (nullable = true)&lt;br /&gt;
  |-- contact: string (nullable = true)&lt;br /&gt;
  |-- day: integer (nullable = true)&lt;br /&gt;
  |-- month: string (nullable = true)&lt;br /&gt;
  |-- duration: integer (nullable = true)&lt;br /&gt;
  |-- campaign: integer (nullable = true)&lt;br /&gt;
  |-- pdays: integer (nullable = true)&lt;br /&gt;
  |-- previous: integer (nullable = true)&lt;br /&gt;
  |-- poutcome: string (nullable = true)&lt;br /&gt;
  |-- deposit: string (nullable = true)&lt;br /&gt;
Как видно наши данные состоят из множества столбцов, содержащих числа и строки Для большей информации выведем наши данные с помощью таблицы pandas. Для примера выведем 7 первых значений:&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; pandas &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''as'''&amp;lt;/font&amp;gt; pd&lt;br /&gt;
 pd.DataFrame(df.take(&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;7&amp;lt;/font&amp;gt;), columns=df.columns).transpose()&lt;br /&gt;
[[Файл:SparkMLFirstTable.png]]&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Нас будут интересовать только численные данные. Для них построим таблицу с основной информацией (количество/ среднее по всей таблице/ среднеквадратичное отклонение / минимальное значение / максимальное значение):&lt;br /&gt;
 numeric_features = [t[&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;] &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''for'''&amp;lt;/font&amp;gt; t &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''in'''&amp;lt;/font&amp;gt; df.dtypes &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; t[&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;] == &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'int'&amp;lt;/font&amp;gt;]&lt;br /&gt;
 df.select(numeric_features).describe().toPandas().transpose()&lt;br /&gt;
 &lt;br /&gt;
[[Файл:SparkMLSecondTable.png]]&lt;br /&gt;
&lt;br /&gt;
Оценим корреляцию между оставшимися данными:&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pandas.plotting &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; scatter_matrix&lt;br /&gt;
 numeric_data = df.select(numeric_features).toPandas()&lt;br /&gt;
 axs = scatter_matrix(numeric_data, figsize=(&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;8&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;8&amp;lt;/font&amp;gt;))&lt;br /&gt;
 n = len(numeric_data.columns)&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''for'''&amp;lt;/font&amp;gt; i &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''in'''&amp;lt;/font&amp;gt; range(n):&lt;br /&gt;
     v = axs[i, &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;]&lt;br /&gt;
     v.yaxis.label.set_rotation(&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;)&lt;br /&gt;
     v.yaxis.label.set_ha(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'right'&amp;lt;/font&amp;gt;)&lt;br /&gt;
     v.set_yticks(())&lt;br /&gt;
     h = axs[n-&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;, i] &lt;br /&gt;
     h.xaxis.label.set_rotation(&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;90&amp;lt;/font&amp;gt;)&lt;br /&gt;
     h.set_xticks(())&lt;br /&gt;
&lt;br /&gt;
[[Файл:SparkMLThirdTable.png]]&lt;br /&gt;
&lt;br /&gt;
На данных графиках можно увидеть зависимость, к примеру, между возрастом и балансом на карте. Не будем учитывать эти корреляции при построении наших моделей, однако избавимся от дня и месяца рождения, так как эти параметры не влияют на желание клиента оформить быстрый кредит.&lt;br /&gt;
 df = df.select(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'age'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'job'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'marital'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'education'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'default'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'balance'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'housing'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'loan'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'contact'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'duration'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'campaign'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'pdays'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'previous'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'poutcome'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'deposit'&amp;lt;/font&amp;gt;)&lt;br /&gt;
 cols = df.columns&lt;br /&gt;
Подготовим оставшиеся данные для построения моделей.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.feature &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; StringIndexer, VectorAssembler, OneHotEncoder&lt;br /&gt;
 &lt;br /&gt;
 categoricalColumns = [&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'job'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'marital'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'education'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'default'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'housing'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'loan'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'contact'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'poutcome'&amp;lt;/font&amp;gt;]&lt;br /&gt;
 stages = []&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''for'''&amp;lt;/font&amp;gt; categoricalCol &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''in'''&amp;lt;/font&amp;gt; categoricalColumns:&lt;br /&gt;
     stringIndexer = StringIndexer(inputCol = categoricalCol, outputCol =   categoricalCol + &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'Index'&amp;lt;/font&amp;gt;)&lt;br /&gt;
     encoder = OneHotEncoder(inputCols=[stringIndexer.getOutputCol()], outputCols=[categoricalCol + &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;classVec&amp;quot;&amp;lt;/font&amp;gt;])&lt;br /&gt;
     stages += [stringIndexer, encoder]&lt;br /&gt;
 label_stringIdx = StringIndexer(inputCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'deposit'&amp;lt;/font&amp;gt;, outputCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'label'&amp;lt;/font&amp;gt;)&lt;br /&gt;
 stages += [label_stringIdx]&lt;br /&gt;
 numericCols = [&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'age'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'balance'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'duration'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'campaign'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'pdays'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'previous'&amp;lt;/font&amp;gt;]&lt;br /&gt;
 assemblerInputs = [c + &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;classVec&amp;quot;&amp;lt;/font&amp;gt; &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''for'''&amp;lt;/font&amp;gt; c &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''in'''&amp;lt;/font&amp;gt; categoricalColumns] + numericCols&lt;br /&gt;
 assembler = VectorAssembler(inputCols=assemblerInputs, outputCol=&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;features&amp;quot;&amp;lt;/font&amp;gt;)&lt;br /&gt;
 stages += [assembler]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; Pipeline&lt;br /&gt;
 pipeline = Pipeline(stages = stages)&lt;br /&gt;
 pipelineModel = pipeline.fit(df)&lt;br /&gt;
 df = pipelineModel.transform(df)&lt;br /&gt;
 selectedCols = [&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'label'&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'features'&amp;lt;/font&amp;gt;] + cols&lt;br /&gt;
 df = df.select(selectedCols)&lt;br /&gt;
 df.printSchema()&lt;br /&gt;
Наконец, поделим нашу выборку на обучающую и тестирующую&lt;br /&gt;
 train, test = df.randomSplit([&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;0.7&amp;lt;/font&amp;gt;, &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;0.3&amp;lt;/font&amp;gt;], seed = &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;2018&amp;lt;/font&amp;gt;)&lt;br /&gt;
Построим модели и выведем точность для:&lt;br /&gt;
&lt;br /&gt;
Logistic Regression&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.classification &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; LogisticRegression&lt;br /&gt;
 lr = LogisticRegression(featuresCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'features'&amp;lt;/font&amp;gt;, labelCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'label'&amp;lt;/font&amp;gt;,    maxIter=&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;10&amp;lt;/font&amp;gt;)&lt;br /&gt;
 lrModel = lr.fit(train)&lt;br /&gt;
 &lt;br /&gt;
 trainingSummary = lrModel.summary&lt;br /&gt;
 print(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;Точность: &amp;quot;&amp;lt;/font&amp;gt; + str(trainingSummary.areaUnderROC))&lt;br /&gt;
&lt;br /&gt;
 Точность: 0.8865478305561797&lt;br /&gt;
Binary Classification&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.evaluation &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; BinaryClassificationEvaluator&lt;br /&gt;
 evaluator = BinaryClassificationEvaluator()&lt;br /&gt;
 print(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;Точность: &amp;quot;&amp;lt;/font&amp;gt;, evaluator.evaluate(predictions))&lt;br /&gt;
&lt;br /&gt;
 Точность:  0.8837112925002687&lt;br /&gt;
Decision Tree&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.classification &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; DecisionTreeClassifier&lt;br /&gt;
 dt = DecisionTreeClassifier(featuresCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'features'&amp;lt;/font&amp;gt;, labelCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'label'&amp;lt;/font&amp;gt;,    maxDepth = &amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;3&amp;lt;/font&amp;gt;)&lt;br /&gt;
 dtModel = dt.fit(train)&lt;br /&gt;
 predictions = dtModel.transform(test)&lt;br /&gt;
 evaluator = BinaryClassificationEvaluator()&lt;br /&gt;
 print(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;Точность: &amp;quot;&amp;lt;/font&amp;gt; + str(evaluator.evaluate(predictions, {evaluator.metricName: &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;areaUnderROC&amp;quot;&amp;lt;/font&amp;gt;})))&lt;br /&gt;
&lt;br /&gt;
 Точность: 0.7808118726917547&lt;br /&gt;
&lt;br /&gt;
Random Forest&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.classification &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; RandomForestClassifier&lt;br /&gt;
 rf = RandomForestClassifier(featuresCol = &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;'features'&amp;lt;/font&amp;gt;, labelCol = &amp;quot;green&amp;quot;&amp;gt;'label'&amp;lt;/font&amp;gt;)&lt;br /&gt;
 rfModel = rf.fit(train)&lt;br /&gt;
 predictions = rfModel.transform(test)&lt;br /&gt;
 evaluator = BinaryClassificationEvaluator()&lt;br /&gt;
 print(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;Точность: &amp;quot;&amp;lt;/font&amp;gt; + str(evaluator.evaluate(predictions, {evaluator.metricName: &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;areaUnderROC&amp;quot;&amp;lt;/font&amp;gt;})))&lt;br /&gt;
&lt;br /&gt;
 Точность: 0.8777131493473223&lt;br /&gt;
Gradient-Boosted Tree &lt;br /&gt;
 &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''from'''&amp;lt;/font&amp;gt; pyspark.ml.classification &amp;lt;font color = &amp;quot;orange&amp;quot;&amp;gt;'''import'''&amp;lt;/font&amp;gt; GBTClassifier&lt;br /&gt;
 gbt = GBTClassifier(maxIter=&amp;lt;font color = &amp;quot;blue&amp;quot;&amp;gt;10&amp;lt;/font&amp;gt;)&lt;br /&gt;
 gbtModel = gbt.fit(train)&lt;br /&gt;
 predictions = gbtModel.transform(test)&lt;br /&gt;
 evaluator = BinaryClassificationEvaluator()&lt;br /&gt;
 print(&amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;Точность: &amp;quot;&amp;lt;/font&amp;gt; + str(evaluator.evaluate(predictions, {evaluator.metricName: &amp;lt;font color = &amp;quot;green&amp;quot;&amp;gt;&amp;quot;areaUnderROC&amp;quot;&amp;lt;/font&amp;gt;})))&lt;br /&gt;
&lt;br /&gt;
 Точность: 0.8935091626908479&lt;br /&gt;
&lt;br /&gt;
== Практическое применение Big Data ==&lt;br /&gt;
На сегодняшний день работа с большими данными популярна во многих рабочих сферах. Как правило, бизнес-приложения обрабатывают огромные потоки данных из различных источников, после чего создается предсказание следующего предполагаемого события. Программисты бизнес-приложений получают в два раза больше программистов других приложений. А программист бизнес-приложений, умеющий работать с большими данными по методологии SCRUM, получает ещё больше.&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;
Однако внедрению Big Data мешает два фактора. Для мелких и средних компаний – это долгий и дорогой процесс сбора данных. А некоторая информация и вовсе относится к персональной – ее сбор без согласия гражданина запрещен.&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;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации  ==&lt;br /&gt;
* [https://habr.com/ru/company/habr_career/blog/456746/ Блог компании Хабр Карьера {{---}} Большие данные — большая ответственность, большой стресс и большие деньги]&lt;br /&gt;
* [https://habr.com/ru/company/productstar/blog/503580/ Блог компании ProductStar {{---}} Что такое «Big Data»?]&lt;br /&gt;
* [https://databricks.com/spark/about О системе Apache Spark]&lt;br /&gt;
* [https://docs.microsoft.com/ru-ru/azure/hdinsight/spark/apache-spark-creating-ml-pipelines Документация от Microsoft {{---}} Создание конвейера машинного обучения Apache Spark]&lt;br /&gt;
* [https://www.researchgate.net/publication/322994594_A_survey_of_different_search_techniques_for_big_data A survey of different search techniques for big data] {{---}} 4th International Conference on Innovations in Information, Embedded and Communication Systems, 2017;&lt;br /&gt;
* [http://www.vstu.ru/upload/iblock/ed2/ed26c52e2ff99fb5b39fbaf37717a96c.pdf Методы обработки разнородных данных в проактивных системах управления транспортной инфраструктурой] {{---}} Чан Ван Фу, Волгоградский государственный технический университет, 2019г;&lt;br /&gt;
* [https://www.researchgate.net/profile/Michael_Gubanov/publication/346275767_WebLens_Towards_Interactive_Large-scale_Structured_Data_Profiling/links/5fc0055c299bf104cf7fd4a1/WebLens-Towards-Interactive-Large-scale-Structured-Data-Profiling.pdf Towards Interactive Large-scale Structured Data Profiling] {{---}} Rituparna Khan, Michael Gubanov {{---}} Department of Computer Science, Florida State University, 2020г.&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Большие данные]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D1%83%D0%BC_%D0%BF%D0%BE_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC%D1%83_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D1%83_%D0%B7%D0%B0_3_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80&amp;diff=83316</id>
		<title>Теоретический минимум по математическому анализу за 3 семестр</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D1%83%D0%BC_%D0%BF%D0%BE_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%BC%D1%83_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D1%83_%D0%B7%D0%B0_3_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80&amp;diff=83316"/>
				<updated>2022-09-01T04:41:54Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Математический анализ 2 курс]]&lt;br /&gt;
&lt;br /&gt;
=1. Полукольцо и алгебра множеств (примеры)=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; — некоторое множество, &amp;lt;tex&amp;gt; \mathcal R &amp;lt;/tex&amp;gt; — совокупность его подмножеств (не обязательно всех). &amp;lt;tex&amp;gt;\mathcal R&amp;lt;/tex&amp;gt; называется '''полукольцом''' множеств из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, если:&lt;br /&gt;
# &amp;lt;tex&amp;gt; \varnothing \in \mathcal R &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; A, B \in \mathcal R \Rightarrow A \cap B \in \mathcal R &amp;lt;/tex&amp;gt; (замкнутость относительно пересечения)&lt;br /&gt;
# &amp;lt;tex&amp;gt; A, B \in \mathcal R, A \subset B  \Rightarrow \exists D_1, \ldots, D_n, \ldots \in R: B \setminus A = \bigcup\limits_n D_n, D_n \in \mathcal R, D_i \cap D_j = \varnothing &amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt; i \ne j &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; X &amp;lt;/tex&amp;gt; — некоторое множество, &amp;lt;tex&amp;gt; \mathcal A &amp;lt;/tex&amp;gt; —  совокупность его подмножеств. &amp;lt;tex&amp;gt; \mathcal A &amp;lt;/tex&amp;gt; — '''алгебра''', если:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt; \varnothing \in \mathcal A &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; B \in \mathcal A \Rightarrow \overline B = X \setminus B \in \mathcal A &amp;lt;/tex&amp;gt; (замкнутость относительно дополнения)&lt;br /&gt;
# &amp;lt;tex&amp;gt; B, C \in \mathcal A \Rightarrow B \cup C \in \mathcal A &amp;lt;/tex&amp;gt; (замкнутость относительно объединения)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathcal A &amp;lt;/tex&amp;gt; называется '''σ-алгеброй''' (сигма-алгеброй, счетной алгеброй), если третья аксиома усилена требованием принадлежности &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;
{{TODO|t = дописать: чего-нить по теме}}&lt;br /&gt;
&lt;br /&gt;
=2. Мера на полукольце множеств и ее основные свойства=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; \mathcal R &amp;lt;/tex&amp;gt; — полукольцо. &amp;lt;tex&amp;gt; m: \mathcal R \rightarrow \overline{\mathbb R}_{+}&amp;lt;/tex&amp;gt; называется '''мерой''' на нем, если:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt; m(\varnothing) = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
# Для дизъюнктных &amp;lt;tex&amp;gt; A_1, A_2, \ldots, A_n, \ldots \in \mathcal R &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A \in \mathcal R &amp;lt;/tex&amp;gt;, такого, что &amp;lt;tex&amp;gt; A = \bigcup\limits_{n} A_n &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; m(A) = \sum\limits_n m(A_n) &amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-аддитивность)&lt;br /&gt;
}}&lt;br /&gt;
===Два важных свойства на полукольце:===&lt;br /&gt;
&lt;br /&gt;
Пусть  &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; — мера на полукольце  &amp;lt;tex&amp;gt; \mathcal R &amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
&lt;br /&gt;
1) Для &amp;lt;tex&amp;gt; A \in \mathcal R &amp;lt;/tex&amp;gt; и дизъюнктных  &amp;lt;tex&amp;gt; A_1, A_2, \ldots, A_n, \ldots \in \mathcal R&amp;lt;/tex&amp;gt; таких, что &amp;lt;tex&amp;gt;\bigcup\limits_{n} A_n \subset A &amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;  \sum\limits_{n} m(A_n) \le m(A) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Для &amp;lt;tex&amp;gt; A \in \mathcal R &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A_1, A_2, \ldots, A_n, \ldots \in \mathcal R&amp;lt;/tex&amp;gt; таких, что &amp;lt;tex&amp;gt;A \subset \bigcup\limits_{n} A_n &amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt; m(A) \le \sum\limits_{n} m(A_n) &amp;lt;/tex&amp;gt; (''&amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-полуаддитивность'')&lt;br /&gt;
&lt;br /&gt;
''Замечание:'' в случае &amp;lt;tex&amp;gt; n = 1&amp;lt;/tex&amp;gt; второе свойство &amp;lt;tex&amp;gt;A \subset B \Rightarrow m(A) \le m(B) &amp;lt;/tex&amp;gt; называют ''монотоностью'' меры.&lt;br /&gt;
&lt;br /&gt;
=3. Внешняя мера, порожденная мерой на полукольце=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Внешняя мера''' на множестве &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; - неотрицательная функция, заданная на множестве всех подмножеств &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt;, и удовлетворяющая следующим аксиомам:&lt;br /&gt;
&lt;br /&gt;
1) &amp;lt;tex&amp;gt; \mu^* (\varnothing) = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Для &amp;lt;tex&amp;gt; A \subset \bigcup\limits_n A_n &amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt; \mu^*(A) \le \sum\limits_{n} \mu^*(A_n) &amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-полуаддитивность)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть заданы полукольцо &amp;lt;tex&amp;gt; \mathcal R &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и мера &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на нем. Тогда для любого множества &amp;lt;tex&amp;gt; A \subset X &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1) Полагаем &amp;lt;tex&amp;gt; \mu^*(A) = + \infty &amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; нельзя покрыть не более чем счетным количеством множеств из полукольца.&lt;br /&gt;
&lt;br /&gt;
2) Полагаем &amp;lt;tex&amp;gt; \mu^*(A) = \inf\limits_{A \subset \bigcup\limits_{n} E_n} \sum\limits_{n} m(E_n) &amp;lt;/tex&amp;gt;, в противном случае, то есть внешняя мера является нижней гранью множества мер для всех не более чем счетных покрытий &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; из полукольца &amp;lt;tex&amp;gt; \mathcal R &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Определенная нами &amp;lt;tex&amp;gt; \mu^* &amp;lt;/tex&amp;gt; является корректной внешней мерой на &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt;, при этом, для &amp;lt;tex&amp;gt; A \in \mathcal R, \mu^*(A) = m(A) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=4. Понятие о мю*- измеримых множествах. Доказательство основной теоремы=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть есть множество &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; и внешняя мера &amp;lt;tex&amp;gt; \mu^* &amp;lt;/tex&amp;gt; на нем, и множества &amp;lt;tex&amp;gt; A, B &amp;lt;/tex&amp;gt; являются подмножествами &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt;. Множество &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; '''хорошо разбивает''' множество &amp;lt;tex&amp;gt; B &amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt; \mu^*(B) = \mu^*(B \cap A) + \mu^*(B \cap \overline{A}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Множество &amp;lt;tex&amp;gt;A \in X&amp;lt;/tex&amp;gt; называется '''μ*-измеримым''', если оно хорошо разбивает всякое множество &amp;lt;tex&amp;gt;E \in X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=5. Распространение меры с полукольца на сигма-алгебру по Каратеодори. Доказательство теоремы=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Каратеодори&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть построения &amp;lt;tex&amp;gt;(X, \mathcal{R}, m) \to (X, 2^X, \mu^*) \to (X, \mathcal{A}, \mu)&amp;lt;/tex&amp;gt; были выполнены так, как описывалось в предыдущих параграфах. Тогда:&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathcal{R} \subset \mathcal{A}&amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mu|_\mathcal{R} = m&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=6. Теорема о повторном применении процесса Каратеодори=&lt;br /&gt;
&amp;lt;tex&amp;gt;(m, \mathcal{R}) \to \mu^* \to (\mu, \mathcal{A}) \to \nu^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим &amp;lt;tex&amp;gt;\nu^*&amp;lt;/tex&amp;gt; {{---}} внешнюю мера для &amp;lt;tex&amp;gt;(\mu, \mathcal{A})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Возникает вопрос: &amp;quot;Построили ли мы что-то новое?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mu^*=\nu^*&amp;lt;/tex&amp;gt; (повторное применение процесса Каратеодори не приводит нас к новой мере).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=7. Критерий мю*-измеримости=&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|about=Критерий &amp;lt;tex&amp;gt;\mu&amp;lt;/tex&amp;gt;-измеримости&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;E\subset X&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;-измеримо &amp;lt;tex&amp;gt;\iff&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\forall\varepsilon &amp;gt; 0&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; \exists (A_\varepsilon, B_\varepsilon), A_\varepsilon, B_\varepsilon\in\mathcal{A} : A_\varepsilon \subset E \subset B_\varepsilon : \mu(B_\varepsilon\setminus A_\varepsilon) &amp;lt; \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=8. Объем многомерного параллелепипеда и его основные свойства=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\Pi = \langle a_1; b_1 \rangle \times \cdots \times \langle a_n; b_n \rangle = \{\bar x = (x_1; x_2 \ldots x_n), x_j \in \langle a_j; b_j \rangle\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;v(\Pi) = \prod\limits_{j=1}^n (b_j - a_j)&amp;lt;/tex&amp;gt; {{---}} объём прямоугольника&lt;br /&gt;
}}&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Pi_1, \ldots, \Pi_p&amp;lt;/tex&amp;gt; попарно не имеют общих внутренних точек, &amp;lt;tex&amp;gt;\bigcup\limits_{j=1}^p \Pi_j = \Pi&amp;lt;/tex&amp;gt;(прямоугольник), тогда &amp;lt;tex&amp;gt;v(\Pi)=\sum\limits_{j=1}^pv(\Pi_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Pi_1, \ldots, \Pi_p&amp;lt;/tex&amp;gt; попарно не имеют общих внутренних точек и &amp;lt;tex&amp;gt;\bigcup\limits_{j=1}^p\Pi_j \subset \Pi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;v(\Pi) \geq \sum\limits_{j=1}^pv(\Pi_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Pi_1, \ldots, \Pi_p&amp;lt;/tex&amp;gt; {{---}} прямоугольники, &amp;lt;tex&amp;gt;\Pi \subset \bigcup\limits_{j = 1}^p \Pi_j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;v(\Pi)\leq\sum\limits_{j=1}^pv(\Pi_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=9. Объем, как мера на полукольце ячеек=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Объём ячейки {{---}} &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-аддитивная функция на &amp;lt;tex&amp;gt;\mathcal{R}&amp;lt;/tex&amp;gt;, то есть, мера на этом множестве.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=10. Некоторые классы измеримых по Лебегу множеств (счетные, открытые, замкнутые)=&lt;br /&gt;
&lt;br /&gt;
{{TODO|t = дописать: чего-нить по теме}}&lt;br /&gt;
&lt;br /&gt;
=11. Теорема о внешней мере в R^n=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E \subset \mathbb R ^n &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; \lambda^*E = \inf\limits_{G: E \subset G} \lambda G &amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; - открытые множества).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TODO|t = дописать: чего-нить по теме}}&lt;br /&gt;
&lt;br /&gt;
=12. Структура измеримого по Лебегу множества=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt; измеримо по Лебегу. Тогда оно представимо в виде &amp;lt;tex&amp;gt; E = A \cup B &amp;lt;/tex&amp;gt;, причем A - множество типа &amp;lt;tex&amp;gt; F_{\sigma} &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; \lambda B = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=13. Определение измеримых функций, теорема о множествах Лебега=&lt;br /&gt;
&lt;br /&gt;
Будем рассматривать пространство &amp;lt;tex&amp;gt; (X, \mathcal A, \mu) &amp;lt;/tex&amp;gt;, считаем, что мера &amp;lt;tex&amp;gt; \mu &amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt; \sigma &amp;lt;/tex&amp;gt;-конечная, полная, то есть:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; X = \bigcup\limits_p X_p : \mu X_p &amp;lt; + \infty &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mu B = 0 , A \subset B \Rightarrow A \in \mathcal A, \mu A = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E \subset X, f: E \rightarrow \mathbb R &amp;lt;/tex&amp;gt;, будем обозначать как &amp;lt;tex&amp;gt; E ( P )&amp;lt;/tex&amp;gt; совокупность точек из &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, для которых свойство &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; верно.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; a \in \mathbb R &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; E(f &amp;lt; a), E(f \le a), E(f &amp;gt; a), E(f \ge a) &amp;lt;/tex&amp;gt; — '''множества Лебега''' функции &amp;lt;tex&amp;gt; f &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; f : E \rightarrow \mathbb R &amp;lt;/tex&amp;gt; называется '''измеримой по Лебегу''', если для любого &amp;lt;tex&amp;gt; a \in \mathbb R &amp;lt;/tex&amp;gt; множества Лебега всех четырех типов измеримы(то есть, принадлежат сигма-алгебре).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|about=&lt;br /&gt;
Измеримость по Лебегу&lt;br /&gt;
|statement=&lt;br /&gt;
Функция измерима по Лебегу на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; измеримо её множество Лебега одного любого фиксированного типа.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=14. Арифметика измеримых функций=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; измеримы на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
1) &amp;lt;tex&amp;gt;|f|&amp;lt;/tex&amp;gt; {{---}} измерима &amp;lt;br&amp;gt;&lt;br /&gt;
1.5) &amp;lt;tex&amp;gt;kf&amp;lt;/tex&amp;gt; {{---}} измеримо (&amp;lt;tex&amp;gt;k \in \mathbb{R}&amp;lt;/tex&amp;gt;) &amp;lt;br&amp;gt;&lt;br /&gt;
2) &amp;lt;tex&amp;gt;f^2&amp;lt;/tex&amp;gt; {{---}} измеримо &amp;lt;br&amp;gt;&lt;br /&gt;
3) &amp;lt;tex&amp;gt;f + g&amp;lt;/tex&amp;gt; {{---}} измеримо &amp;lt;br&amp;gt;&lt;br /&gt;
4) &amp;lt;tex&amp;gt;f \cdot g&amp;lt;/tex&amp;gt; {{---}} измеримо &amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=15. Измеримость поточечного предела измеримых функций=&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; измеримо, &amp;lt;tex&amp;gt;f_n : E \to \mathbb{R}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt; {{---}} измеримо на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\forall x \in E : f(x) = \lim\limits_{n\to\infty} f_n(x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; тоже измеримо на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=16. Эквивалентные функции и сходимость почти всюду=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть заданы функции &amp;lt;tex&amp;gt;f_n, f&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E' = \{x | x \in E, \lim\limits_{n\to\infty} f_n(x) \ne f(x)\}&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;\mu E' = 0&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f_n\to f&amp;lt;/tex&amp;gt; '''почти всюду''' на &amp;lt;tex&amp;gt;E&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;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;, определённые на множестве &amp;lt;tex&amp;gt;E \in X&amp;lt;/tex&amp;gt;, называются '''эквивалентными''' на этом множестве, если  &amp;lt;tex&amp;gt;f(x) = g(x)&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;f_n&amp;lt;/tex&amp;gt; {{---}} измеримо, &amp;lt;tex&amp;gt;f_n \to f&amp;lt;/tex&amp;gt; почти всюду на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измерима.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=17. Предел по мере и его единственность=&lt;br /&gt;
&lt;br /&gt;
Пусть функции &amp;lt;tex&amp;gt;f_n, f&amp;lt;/tex&amp;gt; {{---}} измеримы на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, множества &amp;lt;tex&amp;gt;E(|f_n - f| \geq \delta)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\delta &amp;gt; 0&amp;lt;/tex&amp;gt;, измеримы.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt; стремятся по мере на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;f_n\stackrel{[E]}{\Rightarrow} f&amp;lt;/tex&amp;gt;), если &amp;lt;tex&amp;gt;\forall\delta&amp;gt;0 : \mu E(|f_n - f| \geq \delta) \xrightarrow[n\to\infty]{} 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В определённом смысле, это наиболее слабый вид сходимости, что подтверждает следующая классическая теорема Лебега.&lt;br /&gt;
&lt;br /&gt;
//а единственность у нас вообще была? 0_о Если да, то {{TODO|t = добавить}}.&lt;br /&gt;
: А в каком смысле единственность? Очевидно же, что если функциональная последовательность сходится почти всюду к &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;, то она будет сходиться почти всюду и к любой функции &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt;g \sim f&amp;lt;/tex&amp;gt;. А значит, будет сходиться к ней и по мере.&lt;br /&gt;
&lt;br /&gt;
=18. Теорема Лебега о связи сходимости п.в. и по мере=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Лебег&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mu E&amp;lt;+\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f_n\to f&amp;lt;/tex&amp;gt; почти всюду на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;f_n\stackrel{E}{\Rightarrow} f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=19. Теорема Рисса=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Фердинанд Рисс&lt;br /&gt;
|statement=Пусть последовательность функций сходится по мере к функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда из неё можно выделить подпоследовательность, которая сходится почти всюду на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=20. Теорема Егорова=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Егоров&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\mu E &amp;lt; +\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f_n \to f&amp;lt;/tex&amp;gt; почти всюду на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда, для любого &amp;lt;tex&amp;gt;\delta &amp;gt; 0: \exists E'' \subset E&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mu E'' &amp;gt; \mu E - \delta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f_n \stackrel{E''}{\rightrightarrows} f&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Смысл теоремы Егорова в том, что сходимость почти всюду не очень сильно (с точностью до множества малой меры) отличается от равномерной сходимости.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=21. Теоремы Лузина (без док-ва) и Фреше=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Лузин&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;E \subset \mathbb{R}^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измерима на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; по мере Лебега. Тогда &amp;lt;tex&amp;gt;\forall\varepsilon&amp;gt;0\ \exists \varphi&amp;lt;/tex&amp;gt; {{---}} непрерывная на &amp;lt;tex&amp;gt;\mathbb{R}^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\lambda_nE(f\ne\varphi)&amp;lt;\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Это принято называть &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-свойством Лузина. &lt;br /&gt;
&lt;br /&gt;
Если, помимо всего прочего, &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; ограничена &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; можно подобрать таким образом, что она ограничена той же постоянной на &amp;lt;tex&amp;gt;\mathbb{R}^n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Фреше&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;E\subset \mathbb{R}^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измерима на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists\varphi_n&amp;lt;/tex&amp;gt; {{---}} последовательность непрерывных на &amp;lt;tex&amp;gt;\mathbb{R}^n&amp;lt;/tex&amp;gt; функций, такая, что &amp;lt;tex&amp;gt;\varphi_n\to f&amp;lt;/tex&amp;gt; почти всюду на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=22. Суммы Лебега-Дарбу и их свойства, определение интеграла Лебега, совпадение интеграла Римана с интегралом Лебега=&lt;br /&gt;
&lt;br /&gt;
Есть &amp;lt;tex&amp;gt;(X, \mathcal{A}, \mu)&amp;lt;/tex&amp;gt;. Далее, мы всегда предполагаем, что &amp;lt;tex&amp;gt;\mu&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-конечная и полная. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} измеримое множество (&amp;lt;tex&amp;gt;E \in \mathcal{A}&amp;lt;/tex&amp;gt;),&lt;br /&gt;
&amp;lt;tex&amp;gt;f : E \to \mathbb{R}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\forall x \in E : |f(x)| \leq M&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mu E &amp;lt; +\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Разобьём &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; на конечное число попарно дизъюнктных измеримых частей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E = \bigcup\limits_{p=1}^n e_p&amp;lt;/tex&amp;gt; {{---}} дизъюнктные и измеримые. &amp;lt;tex&amp;gt;\tau = \{e_1; e_2; \ldots e_n\}&amp;lt;/tex&amp;gt; {{---}} разбиение.&lt;br /&gt;
&lt;br /&gt;
Строим системы чисел &amp;lt;tex&amp;gt;m_p(f)  = m_p = \inf\limits_{x \in e_p} f(x)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;M_p(f) = M_p = \sup\limits_{x\in e_p} f(x)&amp;lt;/tex&amp;gt;, они конечны.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Верхняя и нижняя суммы Лебега-Дарбу {{---}} &amp;lt;tex&amp;gt;\underline{s}(\tau) = \sum\limits_{p=1}^n m_p \mu e_p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\overline{s}(\tau) = \sum\limits_{p=1}^n M_p \mu e_p&amp;lt;/tex&amp;gt;. Они аналогичны суммам Дарбу для интеграла Римана.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\tau_1, \tau_2&amp;lt;/tex&amp;gt; {{---}} разбиения. Если любой отрезок &amp;lt;tex&amp;gt; e \in \tau_1&amp;lt;/tex&amp;gt; содержится в каком-то отрезке &amp;lt;tex&amp;gt;e' \in \tau_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\tau_1&amp;lt;/tex&amp;gt; мельче &amp;lt;tex&amp;gt;\tau_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\tau_1 \leq \tau_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\underline{s}(\tau) \leq \overline{s}(\tau)&amp;lt;/tex&amp;gt;&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\tau_1 \leq \tau_2 \Rightarrow \underline{s}(\tau_2) \leq \underline{s}(\tau_1)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\overline{s}(\tau_1) \leq \overline{s}(\tau_2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\forall \tau_1, \tau_2 : \underline{s}(\tau_1) \leq \overline{s}(\tau_2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Тогда, если определить &amp;lt;tex&amp;gt;\underline{L} = \sup\limits_{\tau} \underline{s}(\tau)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\overline{L} = \inf\limits_{\tau} \overline{s}(\tau)&amp;lt;/tex&amp;gt;, то из леммы следует: &amp;lt;tex&amp;gt;\underline{s}(\tau) \leq \underline{L} \leq \overline{L} \leq \overline{s}(\tau)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Если &amp;lt;tex&amp;gt;\underline{L} = \overline{L}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} интегрируема по Лебегу на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, общее значение этих чисел {{---}} интеграл Лебега, &amp;lt;tex&amp;gt;\underline{L}=\overline{L} = \int\limits_E f d\mu&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;f\in\mathcal{R}(a;b) \Rightarrow f \in \mathcal{L}&amp;lt;/tex&amp;gt;. Иначе говоря, существует интеграл Лебега &amp;lt;tex&amp;gt;\int\limits_{[a;b]} fd\lambda = \int\limits_a^b fdx&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=23. Интегрируемость ограниченной, измеримой функции=&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; - произвольное измеримое множество, &amp;lt;tex&amp;gt;f: E \to \mathbb{R_{+}}&amp;lt;/tex&amp;gt; - измеримая функция.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим набор множеств &amp;lt;tex&amp;gt; e &amp;lt;/tex&amp;gt;, такой, что &amp;lt;tex&amp;gt;e \in E&amp;lt;/tex&amp;gt; - измеримо, &amp;lt;tex&amp;gt;\mu e &amp;lt; +\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; - ограничена на &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;. В такой ситуации существует &amp;lt;tex&amp;gt;\int \limits_{e} f d\mu&amp;lt;/tex&amp;gt; {{---}} интеграл Лебега.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; '''суммируема''' на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\sup \limits_{\{e \}} \int \limits_{e} f d\mu = \int \limits_{E} f d\mu&amp;lt;/tex&amp;gt; {{---}}  интеграл по &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=24. Счетная аддитивность интеграла=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} измеримо, разбито на дизъюнктные измеримые части: &amp;lt;tex&amp;gt;E = \bigcup \limits_{n} E_n&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измеримо, &amp;lt;tex&amp;gt;f: E \to \mathbb{R_{+}}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\int \limits_{E} f = \sum \limits_{n} \int \limits_{E_n} f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=25. Абсолютная непрерывность интеграла=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
Абсолютная непрерывность&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; — суммируема на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; \forall \varepsilon &amp;gt; 0\ \exists \delta &amp;gt; 0: \mu A &amp;lt; \delta, A \subset E \Rightarrow \left| \int\limits_A f \right| &amp;lt; \varepsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=26. Арифметические свойства интеграла Лебега=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-аддитивность интеграла&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть существует &amp;lt;tex&amp;gt; \int\limits_E fd\mu&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E = \bigcup\limits_n E_n&amp;lt;/tex&amp;gt; {{---}} измеримы и дизъюнктны. Тогда &amp;lt;tex&amp;gt; \int\limits_E fd\mu = \sum\limits_n \int\limits_{E_n} fd\mu &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|about=линейность интеграла&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\exists\int f, \int g&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\alpha, \beta \in \mathbb{R}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\alpha\int\limits_E fd\mu + \beta\int\limits_E gd\mu = \int\limits_E(\alpha f + \beta g)d\mu&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=27. Теорема Лебега о предельном переходе под знаком интеграла=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Лебег&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\mu E &amp;lt; +\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f_n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измеримы на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|f| \le M, |f_n(x)| \le M\ \forall n&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;f_n \Rightarrow f&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\int \limits _{E} f_n \to \int \limits_{E} f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=28. Определение интеграла от суммируемой функции=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; '''суммируема''' на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\sup\int\limits_{e}fd\mu &amp;lt; +\infty&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; - '''хорошее множество''', то есть &amp;lt;tex&amp;gt;e \subset E&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mu e &amp;lt; +\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; - ограничена на &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=29. Сигма-аддитивность интеграла неотрицательных функций=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} измеримо, разбито на дизъюнктные измеримые части: &amp;lt;tex&amp;gt;E = \bigcup \limits_{n} E_n&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; {{---}} измеримо, &amp;lt;tex&amp;gt;f: E \to \mathbb{R_{+}}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\int \limits_{E} f = \sum \limits_{n} \int \limits_{E_n} f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=30. Арифметические свойства интеграла неотрицательных функций=&lt;br /&gt;
&lt;br /&gt;
(Конечно долго, но кто хочет - исправьте)&lt;br /&gt;
&amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-аддитивность позволяет переносить на любые &amp;lt;tex&amp;gt;f \ge 0&amp;lt;/tex&amp;gt; стандартные свойства интеграла Лебега, например, линейность.&lt;br /&gt;
Действительно, &amp;lt;tex&amp;gt; \int \limits_{E}(f + g) = \int \limits_{E} f + \int \limits_{E} g&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;f, g \ge 0&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Чтобы свести ситуацию к ограниченным функциям, мы разбиваем &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; на измеримые, дизъюнктные множества. &amp;lt;tex&amp;gt;E = \bigcup \limits_{n = 1}^{\infty} E_{f_n}(n - 1 \le f &amp;lt; n)&amp;lt;/tex&amp;gt;. Аналогично, &amp;lt;tex&amp;gt;E = \bigcup \limits_{n = 1}^{\infty} E_{g_n}(n - 1 \le g &amp;lt; n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После этого, &amp;lt;tex&amp;gt;E = \bigcup \limits_{m,n = 1}^{\infty}(E_{f_n} \cap E_{g_m}) = \bigcup \limits_{p=1}^{\infty} B_p&amp;lt;/tex&amp;gt;. За счет &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-конечности меры, можно считать, что &amp;lt;tex&amp;gt;\forall p: \mu B_p &amp;lt; +\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
За счет &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt;-аддитивности интеграла от неотрицательной функции: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\int \limits_{E} (f+g) = \sum \limits_{p} \int \limits_{B_p} (f + g) = \sum \limits_{p} (\int \limits_{B_p} f + \int \limits_{B_p} g) = \sum \limits_{p} \int \limits_{B_p}f + \sum \limits_{p} \int \limits_{B_p} g = \int \limits_{E} f + \int \limits_{E} g&amp;lt;/tex&amp;gt;. Получили линейность.&lt;br /&gt;
&lt;br /&gt;
=31. О распространении основных свойств интеграла Лебега на суммируемые функции произвольного знака=&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt; \int\limits_E &amp;lt;/tex&amp;gt; определен линейной формулой, то на суммируемые функции произвольного знака переносятся также &amp;lt;tex&amp;gt; \sigma &amp;lt;/tex&amp;gt;-аддитивность и линейность интеграла. Достаточно их написать для &amp;lt;tex&amp;gt; f_+, f_- &amp;lt;/tex&amp;gt; и сложить.&lt;br /&gt;
&lt;br /&gt;
=32. Теорема Лебега о мажорируемой сходимости=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=&lt;br /&gt;
Лебег&lt;br /&gt;
|about=&lt;br /&gt;
о мажорируемой сходимости&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть на &amp;lt;tex&amp;gt; E \subset X &amp;lt;/tex&amp;gt; задана последовательность измеримых функций &amp;lt;tex&amp;gt; f_n &amp;lt;/tex&amp;gt;, таких, что &amp;lt;tex&amp;gt; |f_n(x)| \le \varphi(x) &amp;lt;/tex&amp;gt; почти всюду, где &amp;lt;tex&amp;gt; \varphi &amp;lt;/tex&amp;gt; — суммируемая.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; f_n \underset{E}{\Rightarrow} f &amp;lt;/tex&amp;gt; (по мере). Тогда допустим предельный переход под знаком интеграла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \lim\limits_{n \rightarrow \infty} \int\limits_E f_n = \int\limits_E f &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=33. Теорема Б.Леви и следствие о ряде из интегралов=&lt;br /&gt;
&lt;br /&gt;
Избавимся от требования наличия суммируемой мажоранты:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=&lt;br /&gt;
Леви&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть на E задана последовательность измеримых функций, каждая из которых почти всюду неотрицательна и &amp;lt;tex&amp;gt; f_n(x) \le f_{n+1}(x) &amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt; f(x) = \lim\limits_{n \to \infty} f_n(x) &amp;lt;/tex&amp;gt; — почти везде конечна на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; \lim \int\limits_E f_n = \int\limits_E f &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
следствие о ряде из интегралов&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; u_n(x) \ge 0 &amp;lt;/tex&amp;gt; на и измеримы на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt; \sum\limits_{n = 1}^{\infty} \int\limits_E u_n &amp;lt;/tex&amp;gt; — сходится. Тогда &amp;lt;tex&amp;gt; \sum\limits_{n = 1}^{\infty} u_n(x) &amp;lt;/tex&amp;gt; сходится почти всюду на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=34. Теорема Фату=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=&lt;br /&gt;
Фату&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть измеримые &amp;lt;tex&amp;gt; f_n &amp;lt;/tex&amp;gt;  неотрицательны на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt; и сходятся на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt; по мере к функции &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; \int\limits_E f \le \sup\limits_{n=1,2,\dots} \int\limits_E f_n &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=35. Неравенства Гельдера и Минковского=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \int\limits_E |f| |g| \le ||f||_p ||g||_q &amp;lt;/tex&amp;gt; — неравенство Гёльдера для интегралов.&lt;br /&gt;
&amp;lt;tex&amp;gt; ||f + g||_p \le ||f||_p + ||g||_p &amp;lt;/tex&amp;gt; — неравенство Минковского для интегралов (полуаддитивность).&lt;br /&gt;
&lt;br /&gt;
=36. Пространства, полнота=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; L_p(E) = \{f &amp;lt;/tex&amp;gt; - измерима на &amp;lt;tex&amp;gt; E, \int\limits_E  {|f|}^p d \mu &amp;lt; + \infty \} &amp;lt;/tex&amp;gt;, то есть пространство функций, суммируемых с &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt;-ой степенью на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;. Измеримость &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt; принципиальна, так как в общем случае из измеримости &amp;lt;tex&amp;gt; |f|^p &amp;lt;/tex&amp;gt; не вытекает измеримость &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; L_p(E) &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; L_p(E) &amp;lt;/tex&amp;gt; с нормой, определенной как &amp;lt;tex&amp;gt; ||f||_p = \left( \int\limits_E |f|^p \right)^{1/p} &amp;lt;/tex&amp;gt; — нормированное пространство.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
о полноте&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; L_p(E) &amp;lt;/tex&amp;gt; — полное.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=37. Всюду плотность множества С в пространствах=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Измеримые ограниченные функции образуют всюду плотное множество в &amp;lt;tex&amp;gt;L_p&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Непрерывные функции образуют всюду плотное множество в &amp;lt;tex&amp;gt;L_p&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=38. Мера цилиндра=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E \subset \mathbb R^n, f : E \to \mathbb R_+, f &amp;lt;/tex&amp;gt; — измерима.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; G(f) = G = \{ (x_1 \ldots x_{n + 1}) \in \mathbb R^{n+1} : (x_1 \ldots x_n) \in E, 0 \le x_{n + 1} \le f(x_1 \ldots x_n) \} &amp;lt;/tex&amp;gt; — '''подграфик функции'''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; f(x_1 \ldots x_n) = c \ge 0 &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; E &amp;lt;/tex&amp;gt;, то подграфик называется цилиндром в &amp;lt;tex&amp;gt; \mathbb R^{n + 1} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; - цилиндр высоты &amp;lt;tex&amp;gt;c \ge 0 &amp;lt;/tex&amp;gt;, измеримое &amp;lt;tex&amp;gt; E \subset \mathbb R^n &amp;lt;/tex&amp;gt; — основание. Тогда он измерим и при &amp;lt;tex&amp;gt; c &amp;gt; 0: \lambda_{n+1} G = c \lambda_n E &amp;lt;/tex&amp;gt;, при &amp;lt;tex&amp;gt; c = 0: \lambda_{n+1} G = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=39. Мера подграфика=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
о мере подграфика&lt;br /&gt;
|statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt; f(x) \ge 0 &amp;lt;/tex&amp;gt; и измерима на множестве &amp;lt;tex&amp;gt; E \in \mathbb R^n &amp;lt;/tex&amp;gt;, то её подграфик &amp;lt;tex&amp;gt; G(f) &amp;lt;/tex&amp;gt; — измерим, а &amp;lt;tex&amp;gt; \lambda_{n+1}(G) = \int\limits_E f d \lambda_n &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=40. Вычисление меры множества посредством его сечений=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E \subset \mathbb R^2, \lambda_2 E &amp;lt; + \infty &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда:&lt;br /&gt;
# &amp;lt;tex&amp;gt; \forall x_1 \in \mathbb R : E(x_1) &amp;lt;/tex&amp;gt; — измеримое множество.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \lambda_1(E(x_1)) &amp;lt;/tex&amp;gt; — измеримая на &amp;lt;tex&amp;gt; \mathbb R &amp;lt;/tex&amp;gt; функция.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \lambda_2(E) = \int\limits_{\mathbb R} \lambda_1 (E(x_1)) d x_1  &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=41. Теорема Фубини=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=&lt;br /&gt;
Фубини&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; E \subset \mathbb R^2, f: E \to \mathbb R &amp;lt;/tex&amp;gt; — измерима.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \int\limits_E |f| d \lambda_2 &amp;lt; + \infty &amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; — суммируема).&lt;br /&gt;
&lt;br /&gt;
Тогда для почти всех &amp;lt;tex&amp;gt; x_1 \in \mathbb R, f(x_1, \cdot) &amp;lt;/tex&amp;gt; будет суммируемой на &amp;lt;tex&amp;gt; E(x_1) &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \int\limits_E f d \lambda_2 = \int\limits_{\mathbb R} \left( \int\limits_{E(x_1)} f(x_1, x_2) d x_2 \right) d x_1 &amp;lt;/tex&amp;gt; (формула повторного интегрирования)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=42. Восстановление первообразной по ограниченной производной=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&lt;br /&gt;
Пусть задана дифференциируемая функция &amp;lt;tex&amp;gt;F(x)&amp;lt;/tex&amp;gt; на интервале &amp;lt;tex&amp;gt;[a,b)&amp;lt;/tex&amp;gt;, производная которой ограничена на этом интервале. Тогда эта производная &amp;lt;tex&amp;gt;f(x) = F'(x)&amp;lt;/tex&amp;gt; - измерима на &amp;lt;tex&amp;gt;[a;b)&amp;lt;/tex&amp;gt; и выполняется равенство &amp;lt;tex&amp;gt;F(x) = F(a) + \int \limits_{[a,x]} f(t) dt&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=43. Критерий Лебега интегрируемости по Риману=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=&lt;br /&gt;
Лебег&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;f\in \mathfrak{R}(a,b) \Leftrightarrow f &amp;lt;/tex&amp;gt; почти всюду непрерывна на &amp;lt;tex&amp;gt;(a,b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=Y2010._5_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80._%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F.&amp;diff=83315</id>
		<title>Y2010. 5 семестр. Домашние задания.</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=Y2010._5_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80._%D0%94%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F.&amp;diff=83315"/>
				<updated>2022-09-01T04:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;wikitex&amp;gt;&lt;br /&gt;
30. Рассмотрим язык &lt;br /&gt;
$\{x_0 y_0 z_0 x_1 y_1 z_1 \dots x_{n-1} y_{n-1} z_{n-1} \mid x_i, y_i, z_i \in \{0, 1\}\}$, где $ X = x_{n-1}x_{n-2}\dots x_0$ и аналогично представляется $Y$ и $Z$, причем $ X + Y = Z $.&lt;br /&gt;
Докажите, что этот язык регулярный.&lt;br /&gt;
&lt;br /&gt;
31. То же, что и 36, только $\{x_{n-1} y_{n-1} z_{n-1} \dots x_1 y_1 z_1 x_0 y_0 z_0 \mid \dots \}$.&lt;br /&gt;
&lt;br /&gt;
32. Рассмотрим язык &lt;br /&gt;
$\{x_0 y_0 z_0 x_1 y_1 z_1 \dots x_{n-1} y_{n-1} z_{n-1} \mid x_i, y_i, z_i \in \{0, 1\}\}$, где $X = x_{n-1}x_{n-2}\dots x_0$ и аналогично представляется $Y$ и $Z$, причем $X \times Y = Z$.&lt;br /&gt;
Докажите, что этот язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
33. Рассмотрим отношение на словах $L$:  $x \equiv y$, если для любых $u$, $v$ выполнено $uxv \in L \Leftrightarrow uyv \in L$. Классы эквивалентности этого отношения называются синтаксическим моноидом языка $L$. Докажите, что L регулярный тогда и только тогда, когда синтаксический моноид L конечен.&lt;br /&gt;
&lt;br /&gt;
34. Придумайте семейство регулярных языков $L_i$, у которых ДКА для $L_i$ содержит $O(i)$ состояний, а синтаксический моноид $L_i$ имеет неполиномиальный размер.&lt;br /&gt;
&amp;lt;/wikitex&amp;gt;&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D0%B1%D0%B5%D0%BB%D1%8B%D1%85_%D0%BF%D1%83%D1%82%D1%8F%D1%85&amp;diff=83314</id>
		<title>Лемма о белых путях</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE_%D0%B1%D0%B5%D0%BB%D1%8B%D1%85_%D0%BF%D1%83%D1%82%D1%8F%D1%85&amp;diff=83314"/>
				<updated>2022-09-01T04:41:42Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Не существует такого момента выполнения [[Обход в глубину, цвета вершин|поиска в глубину]], в который бы существовало ребро из черной вершины в белую.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть в процессе выполнения процедуры &amp;lt;tex&amp;gt;dfs&amp;lt;/tex&amp;gt; нашлось ребро из черной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в белую вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Рассмотрим момент времени, когда мы запустили &amp;lt;tex&amp;gt;dfs(v)&amp;lt;/tex&amp;gt;. В этот момент вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; была перекрашена из белого в серый, а вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; была белая. Далее в ходе выполнения алгоритма будет запущен &amp;lt;tex&amp;gt;dfs(u)&amp;lt;/tex&amp;gt;, поскольку обход в глубину обязан посетить все белые вершины, в которые есть ребро из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. По алгоритму вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будет покрашена в черный цвет тогда, когда завершится обход всех вершин, достижимых из нее по одному ребру,  кроме тех, что были рассмотрены раньше нее. Таким образом, вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; может стать черной только тогда, когда &amp;lt;tex&amp;gt;dfs&amp;lt;/tex&amp;gt; выйдет из вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, и она будет покрашена в черный цвет. Получаем противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Лемма о белых путях ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Запустим &amp;lt;tex&amp;gt;dfs(G)&amp;lt;/tex&amp;gt;. Остановим выполнение процедуры &amp;lt;tex&amp;gt;dfs&amp;lt;/tex&amp;gt; от какой-то вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в тот момент, когда вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; была выкрашена в серый цвет (назовем его первым моментом времени). Заметим, что в данный момент в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; есть как белые, так и черные, и серые вершины. Продолжим выполнение процедуры &amp;lt;tex&amp;gt;dfs(u)&amp;lt;/tex&amp;gt; до того момента, когда вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; станет черной (второй момент времени).&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда вершины графа &amp;lt;tex&amp;gt;G\setminus u&amp;lt;/tex&amp;gt;, бывшие черными и серыми в первый момент времени, не поменяют свой цвет ко второму моменту времени, а белые вершины либо останутся белыми, либо станут черными, причем черными станут те, что были достижимы от вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; по белым путям.&lt;br /&gt;
|proof =&lt;br /&gt;
Черные вершины останутся черными, потому что цвет может меняться только по схеме белый  &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; серый  &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; черный. Серые останутся серыми, потому что они лежат в стеке рекурсии и там и останутся. &lt;br /&gt;
&amp;lt;br&amp;gt;Далее докажем два факта:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Если вершина была достижима по белому пути в первый момент времени, то она стала черной ко второму моменту времени.&lt;br /&gt;
|proof =&lt;br /&gt;
Если вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; была достижима по белому пути из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, но осталась белой, это значит, что во второй момент времени на пути из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; встретится ребро из черной вершины в белую, чего не может быть по лемме, доказанной выше.&lt;br /&gt;
}}&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Если вершина стала черной ко второму моменту времени, то она была достижима по белому пути в первый момент времени.&lt;br /&gt;
|proof =&lt;br /&gt;
Рассмотрим момент, когда вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; стала черной: в этот момент существует cерый путь из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, а это значит, что в первый момент времени сущестовал белый путь из &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
Отсюда следует, что если вершина была перекрашена из белой в черную, то она была достижима по белому пути, и что если вершина как была, так и осталась белой, она не была достижима по белому пути, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Обход в глубину]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D0%B2%D0%B0%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=83313</id>
		<title>Предварительная обработка данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D0%B2%D0%B0%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=83313"/>
				<updated>2022-09-01T04:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&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;
* Преобразование в категориальный признак. ('''НО''' теряется информация о порядке)&lt;br /&gt;
&lt;br /&gt;
== Преобразование порядкового типа ==&lt;br /&gt;
[[File:Преобразование_порядкового_типа_в_k_категорий.png|250px|thumb|рис.1 Преобразование порядкового типа в 3 категории A, B, C : (A&amp;lt;B&amp;lt;C)]]&lt;br /&gt;
&lt;br /&gt;
* Преобразование в число(берём его порядковый номер)&lt;br /&gt;
* Преобразование в k бинарных категорий(если число значений конечно и равно k):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;c_i(ord) := (ord &amp;lt; ord_i), где &amp;lt;/tex&amp;gt;{&amp;lt;tex&amp;gt;ord_1, ..., ord_k&amp;lt;/tex&amp;gt;} - множество значений порядкового признака.(см. рис.1)&lt;br /&gt;
&lt;br /&gt;
== Преобразование категории ==&lt;br /&gt;
[[File:Преобразование_небинарной_категории_в_бинарную.png|250px|thumb|рис.2 Преобразование небинарной категории в бинарную (A&amp;lt;B&amp;lt;C)]]&lt;br /&gt;
&lt;br /&gt;
* Бинарную категорию можно преобразовать в число: &amp;lt;tex&amp;gt;c_1 \Rightarrow 0, c_2 \Rightarrow 1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;c_1 \Rightarrow -1, c_2 \Rightarrow +1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Категорию из k значений {&amp;lt;tex&amp;gt;c_1, ..., c_k&amp;lt;/tex&amp;gt;} можно '''бинаризовать''' получив k бинарных категорий:&amp;lt;tex&amp;gt;b_i(c) := (c = c_i)&amp;lt;/tex&amp;gt;(см. рис.2)('''НО''' обратное преобразование иногда невозможно(получим много true и не понятно, к какой категории относить))&lt;br /&gt;
* One-hot encoding - преобразование категорий в числа (0, 1): one-hot&amp;lt;tex&amp;gt;_i(c) = [c = c_i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Нормализация данных =&lt;br /&gt;
&lt;br /&gt;
Набор данных содержит в себе единицы измерения, которые отбрасываются, чтобы набор данных был просто числами. Но чтобы далее работать, нам нужно, чтобы все объекты были приведены к единому формату. Подробнее читай [http://neerc.ifmo.ru/wiki/index.php?title=Нормализация_набора_данных тут]&lt;br /&gt;
&lt;br /&gt;
= Аномалии в наборе данных =&lt;br /&gt;
&lt;br /&gt;
Аномалии - плохие объекты для построения нашей модели.&lt;br /&gt;
&lt;br /&gt;
Задача поиска аномалий является отдельной задачей машинного обучения, про которую можно почитать [http://neerc.ifmo.ru/wiki/index.php?title=поиск_аномалий здесь] &lt;br /&gt;
&lt;br /&gt;
= Пропуски в наборе данных =&lt;br /&gt;
&lt;br /&gt;
Иногда в таблице с данными существую пустоты(они же пропуски), про работу с пропусками можно почитать [http://neerc.ifmo.ru/wiki/index.php?title=Работа_с_пропусками_в_наборе_данных тут]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%A4%D0%B8%D0%B1%D0%BE%D0%BD%D0%B0%D1%87%D1%87%D0%B8&amp;diff=83312</id>
		<title>Метод Фибоначчи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%A4%D0%B8%D0%B1%D0%BE%D0%BD%D0%B0%D1%87%D1%87%D0%B8&amp;diff=83312"/>
				<updated>2022-09-01T04:41:29Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Метод Фибоначчи==&lt;br /&gt;
'''Метод Фибоначчи''' (англ. ''Fibonacci method'') {{---}} это улучшение реализации [[Поиск с помощью золотого сечения|поиска с помощью золотого сечения]], служащего для нахождения минимума/максимума функции. Подобно методу золотого сечения, он требует двух вычислений функции на первой итерации, а  на каждой последующей только по одному. Однако этот метод отличается от метода золотого сечения тем, что коэффициент сокращения интервала неопределенности меняется от итерации к итерации.&lt;br /&gt;
&lt;br /&gt;
==Описание==&lt;br /&gt;
Метод основан на последовательности чисел Фибоначчи &amp;lt;tex&amp;gt; {F_v} &amp;lt;/tex&amp;gt;, которая определяется следующим образом :&lt;br /&gt;
       &lt;br /&gt;
&amp;lt;tex&amp;gt; F_v = F_{v-1} + F_{v-2}, v = 1, 2, 3,\dots, F_0 = F_1 = 1 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, последовательность Фибоначчи имеет вид &amp;lt;tex&amp;gt; 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …&amp;lt;/tex&amp;gt;&lt;br /&gt;
Предположим, что на &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-й итерации интервал неопределенности равен &amp;lt;tex&amp;gt;[a_k, b_k]&amp;lt;/tex&amp;gt;.  Рассмотрим две точки &amp;lt;tex&amp;gt;{\lambda}_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;{\mu}_k&amp;lt;/tex&amp;gt;, определяемые следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;{\lambda}_k = a_k + \dfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;{\mu}_k = a_k + \dfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)&amp;lt;/tex&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt; k = 1, 2, \dots, n-1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} заданное общее число вычислений функции.&lt;br /&gt;
&lt;br /&gt;
Новый интервал неопределенности &amp;lt;tex&amp;gt;[a_{k+1}, b_{k+1}]&amp;lt;/tex&amp;gt; будет равен &amp;lt;tex&amp;gt; [{\lambda}_k, b_k]&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt; f\left({\lambda}_k\right) &amp;gt; f\left({\mu}_k\right)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[a_k, {\mu}_k]&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt; f\left({\lambda}_k\right) \le f\left({\mu}_k\right)&amp;lt;/tex&amp;gt;. В первом случае, учитывая &amp;lt;tex&amp;gt;{\lambda}_k &amp;lt;/tex&amp;gt; и полагая &amp;lt;tex&amp;gt;v = n - k&amp;lt;/tex&amp;gt;, получим&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;b_{k+1} - a_{k+1} = b_k - {\lambda}_k = b_k - a_k - \dfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right) = \dfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Во втором случае, учитывая &amp;lt;tex&amp;gt; {\mu}_k&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; b_{k+1} - a_{k+1} = {\mu}_k - a_k = \dfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в обоих случаях длина интервала неопределенности сжимается с коэффициентом &amp;lt;tex&amp;gt;\dfrac{F_{n-k}}{F_{n-k+1}}&amp;lt;/tex&amp;gt;. Покажем, что на &amp;lt;tex&amp;gt;k-&amp;lt;/tex&amp;gt;той итерации либо &amp;lt;tex&amp;gt;{\lambda}_k = {\mu}_k&amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;{\mu}_{k+1} = {\lambda}_k&amp;lt;/tex&amp;gt;, так что требуется только одно новое вычисление функции. Предположим, что &amp;lt;tex&amp;gt; f\left({\lambda}_k\right) &amp;gt; f\left({\mu}_k\right)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;a_{k+1} = {\lambda}_k, b_{k+1} = b_k&amp;lt;/tex&amp;gt;. Таким образом, используя &amp;lt;tex&amp;gt; F_v = F_{v-1} + F_{v-2}, v = 1, 2, 3,\dots, F_0 = F_1 = 1 &amp;lt;/tex&amp;gt; и заменив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;k+1&amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt;{\lambda}_{k+1} = a_{k+1} + \dfrac{F_{n-k-1}}{F_{n-k}}*\left(b_{k+1} - a_{k+1}\right) = {\lambda}_k + \dfrac{F_{n-k-1}}{F_{n-k}}*\left(b_k - {\lambda}_k\right)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Подставив выражение для &amp;lt;tex&amp;gt;{\lambda}_k&amp;lt;/tex&amp;gt; и заменив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;k + 1&amp;lt;/tex&amp;gt;, получим &amp;lt;tex&amp;gt;{\lambda}_{k+1} = a_k + \dfrac{F_{n-k-1}}{F_{n-k+1}}*\left(b_k - a_k\right) + \dfrac{F_{n-k-2}}{F_{n-k}}*\left(1 - \dfrac{F_{n-k-1}}{F_{n-k+1}}\right)*\left(b_k - a_k\right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; 1 - \dfrac{F_{n-k-1}}{F_{n-k+1}} = \dfrac{F_{n-k}}{F_{n-k+1}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;{\lambda}_{k+1} = a_k + \dfrac{F_{n-k-1} + F_{n-k-2}}{F_{n-k+1}}*\left(b_k - a_k\right) = a_k + \dfrac{F_{n-k}}{F_{n-k+1}}*\left(b_k - a_k\right) = {\mu}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;f\left({\lambda}_k\right) \le f\left({\mu}_k\right)&amp;lt;/tex&amp;gt;, то выполнив аналогичные преобразования, получим &amp;lt;tex&amp;gt;{\lambda}_{k+1} = {\lambda}_k&amp;lt;/tex&amp;gt;. Таким образом, в обоих случаях на &amp;lt;tex&amp;gt;k + 1&amp;lt;/tex&amp;gt;-й итерации требуется только одно вычисление функции.&lt;br /&gt;
В отличие от метода [[Поиск с помощью золотого сечения|золотого сечения]] в методе Фибоначчи требуется, чтобы общее число вычислений &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; (или коэффициент сокращения исходного интервала) было задано заранее. Это объясняется тем, что точки, в которых производятся вычисления, зависят от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Длина интервала неопределенности на &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-той итерации сжимается с коэффициентом &amp;lt;tex&amp;gt;\dfrac{F_{n-k}}{F_{n-k+1}}&amp;lt;/tex&amp;gt;. Следовательно, после &amp;lt;tex&amp;gt; \left(n-1\right)&amp;lt;/tex&amp;gt; итерации, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} заданное общее число вычислений функции &amp;lt;tex&amp;gt;f\left(x\right)&amp;lt;/tex&amp;gt;, длина интервала неопределенности сократится от &amp;lt;tex&amp;gt;\left(b_1 - a_1\right)&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;\dfrac{b_1 - a_1}{F_n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
'''Предварительный этап.'''&lt;br /&gt;
Выбрать допустимую конечную длину интервала неопределенности &amp;lt;tex&amp;gt;l &amp;gt; 0&amp;lt;/tex&amp;gt; и константу различимости &amp;lt;tex&amp;gt;{\epsilon}&amp;lt;/tex&amp;gt;. Пусть задан начальный интервал неопределенности &amp;lt;tex&amp;gt;\left(b_1 - a_1\right)&amp;lt;/tex&amp;gt;. Выбрать общее число вычислений функции &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; так, чтобы &amp;lt;tex&amp;gt;F_n &amp;gt; \dfrac{b_1 - a_1}{l}&amp;lt;/tex&amp;gt;. Положить &amp;lt;tex&amp;gt;{\lambda}_1 = a_1 + \dfrac{F_{n-2}}{F_n}*\left(b_1 - a_1\right)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;{\mu}_1 = a_1 + \dfrac{F_{n-1}}{F_n}*\left(b_1 - a_1\right)&amp;lt;/tex&amp;gt;.Вычислить &amp;lt;tex&amp;gt;f\left({\lambda}_1\right)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;f\left({\mu}_1\right)&amp;lt;/tex&amp;gt;, положить &amp;lt;tex&amp;gt;k = 1&amp;lt;/tex&amp;gt; и перейти к основному этапу. &lt;br /&gt;
&lt;br /&gt;
'''Основной этап.''' &lt;br /&gt;
&lt;br /&gt;
''Первый шаг.'' Если &amp;lt;tex&amp;gt;f\left({\lambda}_k\right) &amp;gt; f\left({\mu}_k\right)&amp;lt;/tex&amp;gt;, то перейти ко второму шагу, в противном случае – к третьему шагу.&lt;br /&gt;
&lt;br /&gt;
''Второй шаг.''Положить &amp;lt;tex&amp;gt;a_{k+1} = {\lambda}_k, b_{k+1} = b_k&amp;lt;/tex&amp;gt;. Затем положить &amp;lt;tex&amp;gt;{\lambda}_{k+1} = {\mu}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;{\mu}_{k+1} = a_{k+1} + \dfrac{F_{n-k-1}}{F_{n-k}}*\left(b_{k+1} - a_{k+1}\right)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;k = n - 2&amp;lt;/tex&amp;gt;, то перейти к пятому шагу, в противном случае вычислить &amp;lt;tex&amp;gt;f\left({\mu}_{k+1}\right)&amp;lt;/tex&amp;gt; и перейти к четвертому шагу.&lt;br /&gt;
&lt;br /&gt;
''Третий шаг.'' Положить &amp;lt;tex&amp;gt;a_{k+1} = a_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b_{k+1} = {\mu}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;{\mu}_{k+1} = {\lambda}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;{\lambda}_{k+1} = a_{k+1} + \dfrac{F_{n-k-2}}{F_{n-k}}*\left(b_{k+1} - a_{k+1}\right)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;k = n - 2&amp;lt;/tex&amp;gt;, то перейти к пятому шагу, в противном случае &amp;lt;tex&amp;gt;f\left({\lambda}_{k+1}\right)&amp;lt;/tex&amp;gt; и перейти к четвертому шагу.&lt;br /&gt;
&lt;br /&gt;
''Четвертый шаг.'' Заменить &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;k + 1&amp;lt;/tex&amp;gt; и перейти к первому шагу.&lt;br /&gt;
&lt;br /&gt;
''Пятый шаг.'' Положить &amp;lt;tex&amp;gt;{\lambda}_n = {\lambda}_{n-1}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;{\mu}_n = {\lambda}_n + {\epsilon}&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;f\left({\lambda}_n\right) = f\left({\mu}_n\right)&amp;lt;/tex&amp;gt;, то положить &amp;lt;tex&amp;gt;a_n = {\lambda}_n, b_n = b_{n-1}&amp;lt;/tex&amp;gt;. В противном случае (если &amp;lt;tex&amp;gt;f\left({\lambda}_n\right) &amp;lt; f\left({\mu}_n\right)&amp;lt;/tex&amp;gt;), положить &amp;lt;tex&amp;gt;a_n = a_{n-1}, b_n = {\mu}_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Конец''': оптимальное решение содержится в интервале &amp;lt;tex&amp;gt;[a_n, b_n]&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%80%D1%8F%D0%B4%D1%8B&amp;diff=83311</id>
		<title>Степенные ряды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%80%D1%8F%D0%B4%D1%8B&amp;diff=83311"/>
				<updated>2022-09-01T04:41:23Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Операции анализа с функциональными рядами|&amp;lt;&amp;lt;]] [[Разложение функций в степенные ряды|&amp;gt;&amp;gt;]]&lt;br /&gt;
== Определение ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition= &lt;br /&gt;
Ряд &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n(x - x_0)^n&amp;lt;/tex&amp;gt; {{---}} степенной ряд.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Сделаем замену &amp;lt;tex&amp;gt;y = x - x_0&amp;lt;/tex&amp;gt;. Тогда этот ряд превращается в &lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n y^n&amp;lt;/tex&amp;gt;. Поэтому, далее будем рассматривать только ряды с &amp;lt;tex&amp;gt;x_0 = 0&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;
|author=Абель&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть для некоторого &amp;lt;tex&amp;gt;x_0&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^{\infty} a_n x_0^n&amp;lt;/tex&amp;gt; {{---}} сходится. &lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\forall x_1 : |x_1| &amp;lt; |x_0|&amp;lt;/tex&amp;gt; ряд &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty |a_n x_1^n|&amp;lt;/tex&amp;gt; сходится. &lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;|a_n x_1^n| = |a_n x_0^n| \left(\frac{|x_1|}{|x_0|}\right)^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n x_0^n &amp;lt;/tex&amp;gt; - сходится, то &amp;lt;tex&amp;gt; a_n x^n \to 0&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists N\ \forall n &amp;gt; N\ |a_n x_0^n| &amp;lt; 1&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;|a_n x_1^n| &amp;lt; \left(\frac{|x_1|}{|x_0|}\right)^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q = \frac{|x_1|}{|x_0|} &amp;lt; 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty q^n&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;
|id=rad&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;R = \sup \{|x| : \sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt; {{---}} сходится &amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;. Заметим, что возможны случаи &amp;lt;tex&amp;gt;R = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;R = \infty&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;\sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} его радиус сходимости. Тогда&lt;br /&gt;
1) &amp;lt;tex&amp;gt;|x| &amp;lt; R&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; ряд абсолютно сходится.&lt;br /&gt;
&lt;br /&gt;
2) &amp;lt;tex&amp;gt;\forall [a; b] \in (-R; R)&amp;lt;/tex&amp;gt; ряд сходится абсолютно и равномерно.&lt;br /&gt;
 &lt;br /&gt;
3) &amp;lt;tex&amp;gt;|x| &amp;gt; R&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; ряд расходится. &lt;br /&gt;
&lt;br /&gt;
4) &amp;lt;tex&amp;gt;|x| = R&amp;lt;/tex&amp;gt; {{---}} неопределённость. &lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
1) &amp;lt;tex&amp;gt;|x| &amp;lt; R&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; по определению точной верхней грани, &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists x_0 : |x| &amp;lt; x_0 &amp;lt; R&amp;lt;/tex&amp;gt;, и ряд &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n x_0^n&amp;lt;/tex&amp;gt; сходится. Тогда по лемме Абеля получаем требуемое. &lt;br /&gt;
&lt;br /&gt;
2) &amp;lt;tex&amp;gt;\exists \delta &amp;gt; 0 : [a; b] \subset [-\delta; \delta] \subset (-R; R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\forall x \in [a; b] : |x| &amp;lt; \delta&amp;lt;/tex&amp;gt;. По пункту 1, &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n \delta^n&amp;lt;/tex&amp;gt; {{---}} абсолютно сходится, значит, к &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;[a; b]&amp;lt;/tex&amp;gt; применим признак Вейерштрасса равномерной сходимости рядов, откуда всё следует. &lt;br /&gt;
&lt;br /&gt;
3) Следствие определения радиуса сходимости.&lt;br /&gt;
&lt;br /&gt;
4) Ну неопределённость &amp;lt;tex&amp;gt;:)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возникает вопрос: &amp;quot;Как найти &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;?&amp;quot;. В большинстве случаев достаточно следующей теоремы:&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть есть &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} его радиус сходимости. Тогда:&lt;br /&gt;
&lt;br /&gt;
1) Если &amp;lt;tex&amp;gt;\exists q = \lim\limits_{n \to \infty} \left|\frac{a_n}{a_{n + 1}}\right|&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;R = q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2) Если &amp;lt;tex&amp;gt;\exists q = \lim\limits_{n \to \infty} \sqrt[n]{|a_n|}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;R = \frac1q&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: на самом деле, есть формула Коши-Адамара, применимая в любом случае: &amp;lt;tex&amp;gt;R = \frac1{\overline{\lim} \sqrt[n]{|a_n|}}&amp;lt;/tex&amp;gt;. &amp;lt;s&amp;gt; Но она сложная и никому не нужна. &amp;lt;/s&amp;gt; Формула теоретическая, верхний предел вычислить часто невозможно.&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Докажем первый пункт. Второй доказывается аналогично.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty |a_n x^n|&amp;lt;/tex&amp;gt; и применим к нему признак Даламбера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{|a_{n + 1} x^{n + 1}|}{a_n x^n} = \left|\frac{a_{n + 1}}{a_n}\right| |x| \to q^{-1} |x|&amp;lt;/tex&amp;gt;. Тогда, по признаку Даламбера, при &amp;lt;tex&amp;gt;q^{-1} |x| &amp;lt; 1&amp;lt;/tex&amp;gt; ряд сходится, при &amp;lt;tex&amp;gt;q^{-1} |x| &amp;gt; 1&amp;lt;/tex&amp;gt; ряд расходится.&lt;br /&gt;
&lt;br /&gt;
Итого: &amp;lt;tex&amp;gt;|x| &amp;lt; q&amp;lt;/tex&amp;gt; {{---}} ряд сходится, &amp;lt;tex&amp;gt;|x| &amp;gt; q&amp;lt;/tex&amp;gt; {{---}} ряд расходится.&lt;br /&gt;
&lt;br /&gt;
Сопоставим с определением &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и получим &amp;lt;tex&amp;gt;R = q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Второй пункт доказывается аналогично радикальным признаком Коши. &lt;br /&gt;
При &amp;lt;tex&amp;gt;\sqrt[n]{| a_n x^n |} = \sqrt[n]{|a_n|} |x| \to q |x| &amp;lt;/tex&amp;gt;. При &amp;lt;tex&amp;gt; q |x| &amp;lt; 1&amp;lt;/tex&amp;gt; - ряд сходится, значит &amp;lt;tex&amp;gt;|x| &amp;lt; \frac1q &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры == &lt;br /&gt;
&lt;br /&gt;
Примеры. &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty x^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a_n = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{|a_n|}{|a_{n + 1}| } = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty n^n x^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\sqrt[n]{|a_n|} = n \to +\infty&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;R = \frac1{+\infty} = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty n^{-n}x^n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\sqrt[n]{|a_n|} = n^{-1} \to 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;R = \frac1{+0} = +\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может принимать все значения &amp;lt;tex&amp;gt;[0; +\infty]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возникает вопрос. Подставим в &amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty x^n&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt; (-x^2) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty (-1)^n x^{2n} = \frac1{1 + x^2} : |x| &amp;lt; 1&amp;lt;/tex&amp;gt;. Однако, сумма как функция определена для всех &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Как это объяснить? Ответ: &amp;quot;В &amp;lt;tex&amp;gt;\mathbb{R}&amp;lt;/tex&amp;gt; это объяснить нельзя. Нужно использовать &amp;lt;tex&amp;gt;\mathbb{C}&amp;lt;/tex&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 0}^\infty (-1)^n z^{2n} = \frac1{1 + z^2}&amp;lt;/tex&amp;gt;. Тут есть корни знаменателя. Этим фактом объясняется усечённый характер этого равенства.&lt;br /&gt;
&lt;br /&gt;
== Произведение степенных рядов == &lt;br /&gt;
&lt;br /&gt;
По теореме о радиусе сходимости, на промежутке сходимости ряд сходится абсолютно. Если взять два степенных ряда, то на общей части их промежутка сходимости, ряды будут абсолютно сходиться, и, значит, с ними можно делать любые арифметические действия. В частности, их можно умножать по Коши:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x) = \sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt;, &lt;br /&gt;
&amp;lt;tex&amp;gt;g(x) = \sum\limits_{n = 0}^\infty b_n x^n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{k = 0}^n a_k x^k b_{n - k} x^{n - k} = \left(\sum\limits_{k = 0}^n a_k b_{n - k} \right) x^n = c_n x^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(x) g(x) = \sum\limits_{n = 0}^\infty c_n x^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вывод: произведение двух степенных рядов по правилу Коши {{---}} степенной ряд с суммой, равной произведению сумм исходных рядов.&lt;br /&gt;
&lt;br /&gt;
По теореме о радиусе сходимости, на любом отрезке из &amp;lt;tex&amp;gt;(-R; R)&amp;lt;/tex&amp;gt; степенной ряд сходится равномерно.&lt;br /&gt;
&lt;br /&gt;
Значит, по теоремам о почленном дифференцировании и интегрировании рядов, их можно дифференцировать и интегрировать, и опять будет получаться сходящийся степенной ряд. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вопрос: &amp;quot;Каковы будут радиусы сходимости почленно проинегрированных или продифференцированных рядов?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ответ: &amp;quot;Почленное интегрирование или дифференцирование не меняет радиуса сходимости ряда&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Промежуток сходимости степенного ряда совпадает с промежутком сходимости продифференцированного степенного ряда&lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;f(x) = \sum\limits_{n = 0}^\infty a_n x^n&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;f'(x) = \sum\limits_{n = 1}^\infty a_nnx^{n - 1}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\int f(x)dx = \sum\limits_{n = 0}^\infty \frac1{n + 1}a_n x^{n + 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выясним, что для &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;f'(x)&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;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{n = 1}^\infty na_nx^{n - 1} \to \sum\limits_{n = 1}^\infty na_nx^n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;|a_nx^n| \leq |na_nx^n|&amp;lt;/tex&amp;gt;. То есть, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, для которого сходится &amp;lt;tex&amp;gt;\sum f'&amp;lt;/tex&amp;gt;, будет сходиться и &amp;lt;tex&amp;gt;\sum f&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Поэтому, промежуток сходимости продифференцированного ряда &amp;lt;tex&amp;gt;\subset&amp;lt;/tex&amp;gt; промежутку сходимости исходного ряда. &lt;br /&gt;
&lt;br /&gt;
Обратное &amp;lt;s&amp;gt;очевидно&amp;lt;/s&amp;gt; в силу того, что в пределах промежутка сходимости ряда его можно дифференцировать. Значит, эти промежутки совпадают.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Операции анализа с функциональными рядами|&amp;lt;&amp;lt;]] [[Разложение функций в степенные ряды|&amp;gt;&amp;gt;]]&lt;br /&gt;
[[Категория:Математический анализ 1 курс]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%9A%D0%9D%D0%A4&amp;diff=83310</id>
		<title>NP-полнота задачи о выполнимости булевой формулы в форме КНФ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%9A%D0%9D%D0%A4&amp;diff=83310"/>
				<updated>2022-09-01T04:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Определения ====&lt;br /&gt;
* ''Литералом'' является переменная или отрицание переменной. Например, &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; \neg y &amp;lt;/tex&amp;gt;.&lt;br /&gt;
* ''Дизъюнктом'' называется логическое '''ИЛИ''' одного или нескольких литералов. Например, &amp;lt;tex&amp;gt; x \vee \neg y \vee z &amp;lt;/tex&amp;gt;&lt;br /&gt;
* Говорят, что формула записана в ''конъюнктивной нормальной форме'' (КНФ), если представляет собой логическое '''И''' дизъюнктов.&lt;br /&gt;
==== Определение ====&lt;br /&gt;
&amp;lt;tex&amp;gt; CNFSAT = \{\phi \ |\ \phi &amp;lt;/tex&amp;gt; ''в КНФ,'' &amp;lt;tex&amp;gt; \phi \in &amp;lt;/tex&amp;gt; [[SAT]] &amp;lt;tex&amp;gt; \} &amp;lt;/tex&amp;gt; &amp;amp;mdash; задача о выполнимости булевой формулы в форме КНФ.&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
&amp;lt;tex&amp;gt; CNFSAT \in NPC &amp;lt;/tex&amp;gt;, то есть задача [[NP-полнота|NP-полная]].&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
Для доказательства теоремы необходимо установить два факта:&lt;br /&gt;
* &amp;lt;tex&amp;gt; CNFSAT \in NP &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; CNFSAT \in NPH &amp;lt;/tex&amp;gt;&lt;br /&gt;
==== Доказательство принадлежности классу NP ====&lt;br /&gt;
В качестве сертификата выберем множество &amp;lt;tex&amp;gt; \{y_1, ...,y_n\} &amp;lt;/tex&amp;gt;, представляющее собой набор из нулей и единиц. Верификатору останется подставить эти значения в качестве аргументов в формулу &amp;lt;tex&amp;gt; \phi(x_1, ..., x_n) &amp;lt;/tex&amp;gt; и проверить, выдает ли она единицу. Длина сертификата и время работы верификатора, очевидно, удовлетворяют условиям полиномиальности. Таким образом, &amp;lt;tex&amp;gt; CNFSAT \in NP &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Доказательство принадлежности классу NPH ====&lt;br /&gt;
Выполним [[сведение по Карпу]] задачи &amp;lt;tex&amp;gt; SAT &amp;lt;/tex&amp;gt; к задаче &amp;lt;tex&amp;gt; CNFSAT &amp;lt;/tex&amp;gt;. Для этого необходимо построить функцию &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;, вычислимую за полиномиальное время от длины входа, которая выполняла бы преобразование &amp;lt;tex&amp;gt; \phi \to \omega &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt; в КНФ. Заметим, что в общем случае время построения эквивалентной формулы в форме КНФ может оказаться больше полиномиального. В частности, длина формулы может вырасти экспоненциально, и тогда время порождения тоже экспоненциально вырастет. Однако нам достаточно предъявить формулу &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;, которая будет выполнима тогда и только тогда, когда выполнима исходная формула &amp;lt;tex&amp;gt; \phi &amp;lt;/tex&amp;gt;. При этом формулы могут оказаться не эквивалентными, ввиду, например, добавления новых переменных.&lt;br /&gt;
&lt;br /&gt;
Итак, опишем действия функции &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;.&lt;br /&gt;
* На первом этапе все отрицания &amp;lt;tex&amp;gt; \neg &amp;lt;/tex&amp;gt; спускаются вниз по дереву выражения, так что в формуле остаются только отрицания переменных. Булева формула превращается в логические '''И''' и '''ИЛИ''' литералов. Это преобразование дает формулу, эквивалентную исходной, и занимает время, как максимум, квадратичное относительно длины этой формулы. Для этого используются ''законы Де Моргана'' и ''закон двойного отрицания''.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \neg(x \wedge y) = \neg x \vee \neg y &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \neg(x \vee y) = \neg x \wedge \neg y &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \neg(\neg x) = x &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Второй этап - переписать формулу, которая представляет собой логическое '''И''' и '''ИЛИ''' литералов, в виде произведения дизъюнктов, т.е. привести ее к КНФ. Введение новых переменных позволяет провести это преобразование за время, полиномиально зависящее от размера исходной формулы. Рассмотрим дерево разбора произвольной формулы. Листья этого дерева будут соответствовать литералам, а узлы - логической операции '''И''' или '''ИЛИ''' над двумя его потомками. &lt;br /&gt;
# Для узла с меткой '''И''' соответствующая КНФ получается как конъюнкция ('''И''') всех дизъюнктов двух подформул &amp;lt;tex&amp;gt; \alpha &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \beta &amp;lt;/tex&amp;gt;, уже находящихся в КНФ.&lt;br /&gt;
# Для узла с меткой '''ИЛИ''' нужно ввести новую переменную. Добавляем ее во все дизъюнкты левого операнда &amp;lt;tex&amp;gt; \alpha &amp;lt;/tex&amp;gt; и ее отрицание во все дизъюнкты правого операнда &amp;lt;tex&amp;gt; \beta &amp;lt;/tex&amp;gt;. Заметим, что формула &amp;lt;tex&amp;gt; \alpha \vee \beta &amp;lt;/tex&amp;gt; выполнима тогда и только тогда, когда выполнима &amp;lt;tex&amp;gt; (\alpha \vee y) \wedge (\beta \vee \neg y), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; - новая переменная. После чего, воспользовавшись законами преобразования в каждой формуле в скобках, получим формулы в КНФ: &amp;lt;tex&amp;gt; \alpha \vee y = ((...)\wedge(...)\wedge ... \wedge(...)) \vee y = (...\vee y)\wedge(...\vee y)\wedge...\wedge(...\vee y). &amp;lt;/tex&amp;gt; Аналогично преобразуем &amp;lt;tex&amp;gt; \beta \vee \neg y &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Каждый раз новая формула увеличивается не более, чем на количество листьев в поддереве, а значит максимальный размер формулы &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt; можно представить как ''(число листьев) * (число вершин)'', что соответствует оценке работы алгоритма &amp;lt;tex&amp;gt; O(|\phi|^2) &amp;lt;/tex&amp;gt;. Таким образом, условия сведения выполнены, и действительно &amp;lt;tex&amp;gt; CNFSAT \in NPH &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
[[Категория:NP]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D1%81%D1%82_%D0%A4%D0%B5%D1%80%D0%BC%D0%B0_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D1%82%D1%83,_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%9A%D0%B0%D1%80%D0%BC%D0%B0%D0%B9%D0%BA%D0%BB%D0%B0&amp;diff=83309</id>
		<title>Тест Ферма проверки чисел на простоту, числа Кармайкла</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D1%81%D1%82_%D0%A4%D0%B5%D1%80%D0%BC%D0%B0_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8_%D1%87%D0%B8%D1%81%D0%B5%D0%BB_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D1%82%D1%83,_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%9A%D0%B0%D1%80%D0%BC%D0%B0%D0%B9%D0%BA%D0%BB%D0%B0&amp;diff=83309"/>
				<updated>2022-09-01T04:41:11Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{В разработке}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th1&lt;br /&gt;
|about=Малая теорема Ферма&lt;br /&gt;
|statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; простое и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; не делится на &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;a^{p-1}\equiv 1\pmod p&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
На основании этой теоремы можно построить достаточно мощный тест на простоту:&lt;br /&gt;
&lt;br /&gt;
===Тест Ферма===&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;n&amp;gt;1&amp;lt;/tex&amp;gt; выбираем &amp;lt;tex&amp;gt; a&amp;gt;1&amp;lt;/tex&amp;gt;, вычисляем &amp;lt;tex&amp;gt;a^{n-1}(mod n) &amp;lt;/tex&amp;gt;, если результат не &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; составное, если &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;n&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;a&amp;lt;/tex&amp;gt;. Мы можем сделать тест более точным, проведя его несколько раз для одного и того же числа, но с разными основаниями. Но даже в этом случае существуют числа Кармайкла, проходящие тест для всех чисел, не являющихся их делителями.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория чисел]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B&amp;diff=83308</id>
		<title>Решение RMQ с помощью разреженной таблицы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B&amp;diff=83308"/>
				<updated>2022-09-01T04:41:05Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Разреженная таблица''' (англ. ''sparse table'') позволяет решать задачу online static RMQ (получение минимума или максимума на отрезке, когда элементы массива не могут изменяться, а запросы поступают последовательно) за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; на запрос, с предподсчётом за &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt; и использованием &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Дан массив &amp;lt;tex&amp;gt;A[1 \ldots N]&amp;lt;/tex&amp;gt; целых чисел. Поступают запросы вида &amp;lt;tex&amp;gt;(l, r)&amp;lt;/tex&amp;gt;, для каждого из которых требуется найти минимум среди элементов &amp;lt;tex&amp;gt;A[l], A[l + 1], \ldots, A[r] &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Разреженная таблица ==&lt;br /&gt;
Разреженная таблица — двумерная структура данных &amp;lt;tex&amp;gt;ST[i][j]&amp;lt;/tex&amp;gt;, для которой выполнено следующее: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;ST[i][j]=\min\left(A[i], A[i+1], \ldots, A[i+2^{j}-1]\right),\quad j \in [0 \ldots \log N]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Иначе говоря, в этой таблице хранятся минимумы на всех отрезках, длины которых равны степеням двойки. Объём памяти, занимаемый таблицей, равен &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt;, и заполненными являются только те элементы, для которых &amp;lt;tex&amp;gt;i+2^j \leqslant N &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Простой метод построения таблицы заключён в следующем рекуррентном соотношении:&lt;br /&gt;
$$&lt;br /&gt;
ST[i][j]=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\min\left(ST[i][j-1], ST[i+2^{j-1}][j-1]\right),&amp;amp;\text{если $j &amp;gt; 0$;}\\&lt;br /&gt;
A[i], &amp;amp;\text{если $j = 0$;}&lt;br /&gt;
\end{cases}&lt;br /&gt;
$$&lt;br /&gt;
&lt;br /&gt;
== Идемпотентность ==&lt;br /&gt;
Такая простота достигается за счет идемпотентности операции минимум: &amp;lt;tex&amp;gt;\min(a, a)=a&amp;lt;/tex&amp;gt;. Это один из ключевых моментов этого метода, так как она позволяет нам корректно считать минимум в области пересечения отрезков. &lt;br /&gt;
&lt;br /&gt;
Пусть $\circ$ — произвольная бинарная операция, которая удовлетворяет свойствам:&lt;br /&gt;
* ассоциативности: $a \circ (b \circ c) = (a \circ b) \circ c $,&lt;br /&gt;
* коммутативности: $a \circ b = b \circ a$, &lt;br /&gt;
* идемпотентности: $a \circ a = a $.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
$a_l \circ a_{l+1} \circ \ldots \circ a_r = (a_l \circ a_{l+1} \circ \ldots \circ a_{l + k}) \circ (a_{r - k} \circ a_{r - k + 1} \circ \ldots \circ a_r)$, где $\frac{r - l}{2} \leqslant k \leqslant  r - l$.&lt;br /&gt;
|proof=&lt;br /&gt;
Отрезок $(a_{r-k}, a_{l + k})$ содержится в обоих операндах правой части. Значит, каждый элемент из него входит два раза. По коммутативности мы можем располагать элементы в любом порядке, по ассоциативности мы можем выполнять операции в произвольном порядке, поэтому повторяющие в правой части элементы мы можем расположить рядом друг с другом и затем по идемпотентности один из них убрать. Переставляя оставшиеся элементы в правой затем легко получаем выражение в левой части.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение к задаче RMQ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt; Предпосчитаем для длины отрезка &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; величину &amp;lt;tex&amp;gt;\lfloor \log_2l \rfloor&amp;lt;/tex&amp;gt;. Для этого введем функцию &amp;lt;tex&amp;gt;fl&amp;lt;/tex&amp;gt; (от ''floor'', т.к. логарифм округляется вниз):&lt;br /&gt;
&lt;br /&gt;
 '''int''' '''fl'''('''int''' len):&lt;br /&gt;
     '''if''' len &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; 1&lt;br /&gt;
         '''return''' 0&lt;br /&gt;
     '''else'''&lt;br /&gt;
         '''return''' fl(&amp;lt;tex&amp;gt;\lfloor \cfrac{len}{2}\rfloor&amp;lt;/tex&amp;gt;) + 1&lt;br /&gt;
&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;fl[l]&amp;lt;/tex&amp;gt; происходит за &amp;lt;tex&amp;gt;O(\log (l))&amp;lt;/tex&amp;gt;. А так как длина может принимать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; различных значений, то суммарное время предпосчета составляет &amp;lt;tex&amp;gt;O(N\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть теперь дан запрос &amp;lt;tex&amp;gt;(l, r)&amp;lt;/tex&amp;gt;.  Заметим, что &amp;lt;tex&amp;gt;\min(A[l], A[l+1], \ldots, A[r]) = \min\left(ST[l][j], ST[r-2^j+1][j]\right)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j = \max \{k \mid 2^k \leqslant r - l + 1\}&amp;lt;/tex&amp;gt;, то есть логарифм длины запрашиваемого отрезка, округленный вниз. Но эту величину мы уже предпосчитали, поэтому запрос выполняется за &amp;lt;tex&amp;gt;O (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:SparseTableRMQ.png|right|Решение задачи RMQ на разреженной таблице]]&lt;br /&gt;
&lt;br /&gt;
Из выше доказанной теоремы следует, что этот метод работает не только с операцией минимум, но и с любой идемпотентной, ассоциативной и коммутативной операцией. Таким образом мы получаем целый класс задач, решаемых разреженной таблицей.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ | Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера | Алгоритм Фарака-Колтона и Бендера]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA | Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
* [[ Heavy-light декомпозиция |  Heavy-light декомпозиция]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
* ''Bender, M.A., Farach-Colton, M. et al.'' — '''Lowest common ancestors in trees and directed acyclic graphs'''. — J. Algorithms 57(2) (2005) —  с. 75–94.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о наименьшем общем предке]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B0%D1%83%D1%82%D0%B5%D0%BC%D0%B0%D0%BD%D0%B0&amp;diff=83307</id>
		<title>Теорема Лаутемана</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B0%D1%83%D1%82%D0%B5%D0%BC%D0%B0%D0%BD%D0%B0&amp;diff=83307"/>
				<updated>2022-09-01T04:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{BPP} = \mathrm{coBPP}&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof =&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;L \in \mathrm{BPP}&amp;lt;/tex&amp;gt;. Существует такая программа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P(p(x) = [x \in L]) \geqslant \frac{2}{3}&amp;lt;/tex&amp;gt;. Покажем, что &amp;lt;tex&amp;gt;\overline{L} \in \mathrm{BPP}&amp;lt;/tex&amp;gt;. Для этого рассмотрим следующую программу:&lt;br /&gt;
 &amp;lt;tex&amp;gt;p'(x):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;return (1 - p(x));&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P(p'(x) = [x \in \overline{L}]) = P(p(x) = [x \in L]) \geqslant \frac{2}{3}&amp;lt;/tex&amp;gt;. Таким образом &amp;lt;tex&amp;gt;\overline{L} \in \mathrm{BPP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;L \in \mathrm{BPP} \Rightarrow \overline{L} \in \mathrm{BPP} \Rightarrow L = \overline{\overline{L}} \in \mathrm{coBPP}&amp;lt;/tex&amp;gt;. Получаем &amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{coBPP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;L \in \mathrm{coBPP} \Rightarrow \overline{L} \in \mathrm{BPP} \Rightarrow L = \overline{\overline{L}} \in \mathrm{BPP}&amp;lt;/tex&amp;gt;. Получаем &amp;lt;tex&amp;gt;\mathrm{coBPP} \subset \mathrm{BPP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теорема==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| about = Лаутеман&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{\Sigma_2} \cap \mathrm{\Pi_2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
&lt;br /&gt;
Из того, что класс &amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; замкнут относительно дополнения и &amp;lt;tex&amp;gt;\mathrm{co\Sigma_2} = \mathrm{\Pi_2}&amp;lt;/tex&amp;gt;, следует, что достаточно доказать включение &amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{\Sigma_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{BPP}&amp;lt;/tex&amp;gt; можно определить как множество таких языков &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует «много» таких вероятностных лент &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;M(x,y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; — [[Вероятностные вычисления. Вероятностная машина Тьюринга | вероятностная машина Тьюринга]] для &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\mathrm{\Sigma_2}&amp;lt;/tex&amp;gt; — множество таких языков &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такой &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, что для любого &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;R(x, y, z)&amp;lt;/tex&amp;gt;. Таким образом, необходимо уметь записывать «существует много» с помощью кванторов &amp;lt;tex&amp;gt;\exists&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;G = \{0, 1\}^t&amp;lt;/tex&amp;gt; для некоторого &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Определим операцию &amp;lt;tex&amp;gt;\oplus&amp;lt;/tex&amp;gt; над словами из этого языка как побитовое исключающее или.&lt;br /&gt;
&lt;br /&gt;
Назовем &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, содержащееся в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большим, если существует такой набор &amp;lt;tex&amp;gt;\{g_i\}_{i=1}^{k} \subset G&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\bigcup\limits_{i=1}^{k} g_i \oplus X = U&amp;lt;/tex&amp;gt;. Иначе будем называть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-маленьким.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;|X| &amp;lt; \frac{2^t}{k}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-маленьким (так как &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; копий &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; не смогут покрыть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;). Найдем достаточное условие, при котором &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большим.&lt;br /&gt;
&lt;br /&gt;
Воспользуемся утверждением, что если вероятность &amp;lt;tex&amp;gt;P(x \in A) &amp;gt; 0&amp;lt;/tex&amp;gt;, то существует &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Для этого &lt;br /&gt;
выберем случайно набор &amp;lt;tex&amp;gt;\{g_i\}_{i=1}^{k} \subset G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;P(\bigcup\limits_{i=1}^{k} g_i \oplus X \not = G) = P(\exists y \not \in \bigcup\limits_{i=1}^{k} g_i \oplus X) = P(\bigvee\limits_{i=1}^{2^t} y_i \not \in \bigcup\limits_{j=1}^{k} g_j \oplus X)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leqslant 2^t P(y \not \in \bigcup\limits_{i=1}^{k} g_i \oplus X) = 2^t P(\bigwedge\limits_{i=1}^{k} y \oplus g_i \not \in X) = 2^t \left(P(y \not \in X)\right)^k = 2^t \left(1 - \frac{|X|}{2^t}\right)^k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;2^t\left(1 - \frac{|X|}{2^t}\right)^k &amp;lt; 1&amp;lt;/tex&amp;gt;, то существует такой набор &amp;lt;tex&amp;gt;\{g_i\}_{i=1}^{k} \subset G&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\bigcup\limits_{i=1}^{k} g_i \oplus X = G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большое. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \mathrm{BPP}&amp;lt;/tex&amp;gt;. Тогда существует вероятностная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, такая что &amp;lt;tex&amp;gt;P(m(x) = [x \in L]) \geqslant \frac{2}{3}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; использует &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; бит случайной ленты. По аналогии c [[Классы BPP и PP|доказательством]] &amp;lt;tex&amp;gt;\mathrm{BPP} = \mathrm{BPP_{strong}}&amp;lt;/tex&amp;gt;, построим машину &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которая запускает &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; достаточное число раз, чтобы получить вероятность ошибки &amp;lt;tex&amp;gt;\frac{1}{2^{p(n)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p(n)&amp;lt;/tex&amp;gt; это некоторый полином, который будет определён позднее. Будет достаточно &amp;lt;tex&amp;gt;c p(n)^2&amp;lt;/tex&amp;gt; запусков. Соответственно, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; использует &amp;lt;tex&amp;gt;t(n) = c r(n) p(n)^2&amp;lt;/tex&amp;gt; бит случайной ленты, &amp;lt;tex&amp;gt;P(M(x) = [x \in L]) \geqslant 1 - \frac{1}{2^{p(n)}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зафиксируем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Возьмем &amp;lt;tex&amp;gt;G = \{0, 1\}^{t(n)}&amp;lt;/tex&amp;gt;. Рассмотрим множество &amp;lt;tex&amp;gt;A_x = \{r \in G \bigm| M(x,r) = 1\}&amp;lt;/tex&amp;gt;. Подберем теперь &amp;lt;tex&amp;gt;p(n)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; так, чтобы &amp;lt;tex&amp;gt;x \in L \Leftrightarrow A_x&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большое.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;x \in L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;P(M(x) = 1) = \frac{|A_x|}{2^{t(n)}} \geqslant 1 - \frac{1}{2^{p(n)}} \Rightarrow |A_x| \geqslant 2^{t(n)} \left( 1 - \frac{1}{2^{p(n)}} \right)&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;2^{t(n)} \left( 1 - \frac{|A_x|}{2^{t(n)}} \right)^k \leqslant 2^{t(n) - kp(n)}&amp;lt;/tex&amp;gt;. Чтобы в этом случае &amp;lt;tex&amp;gt;A_x&amp;lt;/tex&amp;gt; было бы &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большим потребуем &amp;lt;tex&amp;gt;2^{t(n) - kp(n)} &amp;lt; 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;x \not \in L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;P(M(x) = 1) = \frac{|A_x|}{2^{t(n)}} \leqslant \frac{1}{2^{p(n)}} \Rightarrow |A_x| \leqslant 2^{t(n) - p(n)}&amp;lt;/tex&amp;gt;. Чтобы в этом случае &amp;lt;tex&amp;gt;A_x&amp;lt;/tex&amp;gt; было бы &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-маленьким потребуем &amp;lt;tex&amp;gt;2^{t(n) - p(n)} &amp;lt; \frac{2^{t(n)}}{k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выберем &amp;lt;tex&amp;gt;p(n)&amp;lt;/tex&amp;gt; так, чтобы &amp;lt;tex&amp;gt;\frac{t(n)}{p(n)} &amp;lt; 2^{p(n)}&amp;lt;/tex&amp;gt; (то есть &amp;lt;tex&amp;gt;c r(n) p(n) &amp;lt; 2^{p(n)}&amp;lt;/tex&amp;gt;) и &amp;lt;tex&amp;gt;k = \lceil \frac{t(n)}{p(n)} \rceil + 1 = c r(n) p(n) + 1&amp;lt;/tex&amp;gt;. Получаем &amp;lt;tex&amp;gt;\frac{t(n)}{p(n)} &amp;lt; k &amp;lt; 2^{p(n)}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;x \in L \Leftrightarrow A_x&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-большое.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;x \in L \Leftrightarrow \exists \{g_i\}_{i=1}^{k} \subset G&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;\forall y \in G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\left( \bigvee\limits_{i=1}^{k} y \in g_i \oplus A_x \right) &amp;lt;/tex&amp;gt;. Заметив, что &amp;lt;tex&amp;gt;y \in g_i \oplus A_x \Leftrightarrow y \oplus g_i \in A_x \Leftrightarrow M(x, y \oplus g_i)&amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt;L \in \Sigma_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{\Sigma_2}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{BPP} \subset \mathrm{\Sigma_2} \cap \mathrm{\Pi_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы PH, Σ и Π]]&lt;br /&gt;
*[[Классы BPPweak и BPPstrong]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* ''Sanjeev Arora, Boaz Barak''. [http://www.cs.princeton.edu/theory/complexity Computational Complexity: A Modern Approach]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC&amp;diff=83306</id>
		<title>Формализм распределённых систем</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC&amp;diff=83306"/>
				<updated>2022-09-01T04:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Параллельное программирование]]&lt;br /&gt;
== Модель ==&lt;br /&gt;
&lt;br /&gt;
Имеется несколько независимых '''процессов''', обычно обозначаются большими латинскими буквами: $P, Q, R, \dots \in \mathbb P$.&lt;br /&gt;
Происходящее внутри процесса нас не интересует: там может быть сложная многопоточная система или простой цикл; может быть детерминированным, а может кидать монетку.&lt;br /&gt;
&lt;br /&gt;
Процессы могут посылать друг другу '''сообщения''', обычно обозначаются $m \in \mathbb M$ (с индексами).&lt;br /&gt;
Нас интересует взаимодействие между процессами, оно бывает ровно одного вида: посылки сообщений друг другу.&lt;br /&gt;
С точки зрения внешнего мира процесс считается однопоточным: все отправки/получения сообщений одним процессом линейно упорядочены.&lt;br /&gt;
Обычно каждый процесс может послать сообщение каждому, но иногда это ограничивается.&lt;br /&gt;
В реальном мире может быть такое, что кому-то отослать сообщение быстрее, чем другому.&lt;br /&gt;
&lt;br /&gt;
В каждом процессе могут происходить '''события''', обычно обозначаются маленькими латинскими буквами: $a, b, c, d, \dots \in \mathbb E$.&lt;br /&gt;
Можно узнать процесс, в котором произошло событие: $proc(e) \in \mathbb P$ (такая нотация встречается редко).&lt;br /&gt;
Если $e$ и $f$ произошли в одном процессе, то одно из двух произошло первым, обозначается $e &amp;lt; f$.&lt;br /&gt;
&lt;br /&gt;
Каждому сообщению соответствуют ровно два события: отправка сообщения $snd(m) \in \mathbb E$ и его получение $rcv(m) \in \mathbb E$.&lt;br /&gt;
Другие события нас не интересуют.&lt;br /&gt;
&lt;br /&gt;
=== Happens-before (произошло-до) ===&lt;br /&gt;
Транзитивное замыкание:&lt;br /&gt;
&lt;br /&gt;
* Если $e &amp;lt; f$, то $e \to f$&lt;br /&gt;
* Для любого сообщения $m$: $snd(m) \to rcv(m)$&lt;br /&gt;
&lt;br /&gt;
События $a$ и $c$, не связанные отношением произошло-до, называются '''параллельными'''.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Времени&amp;quot; или &amp;quot;глобального времени&amp;quot; в распределённых системах '''не существует'''. Следствие: слова &amp;quot;одновременно&amp;quot; и &amp;quot;текущий момент&amp;quot; запрещены, если только не подкрепляются определением на основе &amp;quot;произошло-до&amp;quot;. Можно почитать [https://queue.acm.org/detail.cfm?id=2745385 Justin Sheehy. 2015. There is No Now. Queue 13, 3, Pages 20 (March 2015), 8 pages. DOI: https://doi.org/10.1145/2742694.2745385]&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;
Из-за сети сообщения могут идти непонятно сколько времени (в том числе на практике).&lt;br /&gt;
В '''синхронных''' системах гарантируется, что каждое сообщение либо доходит за некоторое константное время $C$, либо теряется.&lt;br /&gt;
В '''асинхронных''' системах сообщения могут идти сколь угодно долго. До билетов про синхронные системы мы считаем всё асинхронным.&lt;br /&gt;
На практике же везде ставят таймаут, превращая систему в синхронную.&lt;br /&gt;
&lt;br /&gt;
Дополнительные сложности возникает с порядком сообщений: как между процессами (отсутствует, FIFO), так и глобально во всей системе (отсутствует, casual ordering, synchronous ordering), глобально во всей системе с учётом multicast-broadcast (отсутствует, casual total order).&lt;br /&gt;
&lt;br /&gt;
== Задачи ==&lt;br /&gt;
=== Взаимное исключение ===&lt;br /&gt;
&lt;br /&gt;
Почти как в [[Алгоритмы взаимного исключения|параллельных системах]]:&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Критическая секция $CS_i$ — это пара из двух событий: $Enter(CS_i), Exit(CS_i) \in E$ (вход и выход из критической секции), при этом $Enter(CS_i) &amp;lt; Exit(CS_i)$ (в частности, они выполняются в одном процессе) и для всех $i$ верно: $Exit(CS_i) \to Enter(CS_{i+1})$ (т.е. критические секции линейно упорядочены).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Это требование ''корректности'' — что алгоритм ''не может допустить''.&lt;br /&gt;
Мы здесь нигде не пользовались словом &amp;quot;одновременно&amp;quot;.&lt;br /&gt;
Более того, нам даже не требуется вводить отдельные события входа/выхода, достаточно уже имеющихся событий отправки/получения сообщений (т.к. в системе ничего кроме сообщений принципиально происходить не может).&lt;br /&gt;
&lt;br /&gt;
Также можно вводить дополнительные требования прогресса (что алгоритм ''должен делать''), но мы это делаем неформально. Можно требовать (от более слабых к более строгим):&lt;br /&gt;
&lt;br /&gt;
# Если &amp;quot;сейчас&amp;quot; ни один процесс в критической секции не находится, но кто-то &amp;quot;хочет&amp;quot; в неё попасть, то хотя бы один процесс рано или поздно туда попадёт.&lt;br /&gt;
# &amp;quot;Честность&amp;quot;: если процесс хочет попасть в критическую секции, то он рано или поздно туда попадёт независимо от действий остальных (если они, конечно, секцию будут освобождать).&lt;br /&gt;
&lt;br /&gt;
=== Запуск нескольких алгоритмов и перезапуск ===&lt;br /&gt;
Некоторые алгоритмы в курсе алгоритмы &amp;quot;одноразовые&amp;quot; (например, достижение консенсуса или снятие согласованного среза).&lt;br /&gt;
Чтобы запустить их несколько раз, на практике можно запустить несколько копий алгоритма и к каждому сообщению прикреплять номер копии.&lt;br /&gt;
Тогда они будут работать независимо друг от друга и работать корректно, хотя нет никаких гарантий про то, как они будут соотноситься между собой (например, алгоритм, запущенный позже, может завершиться раньше).&lt;br /&gt;
&lt;br /&gt;
Также могут быть тонкости с &amp;quot;запуском&amp;quot; алгоритмов: например, [[алгоритм Чанди-Лампорта]] требует сохранять все отправленные с начала времён сообщения.&lt;br /&gt;
&lt;br /&gt;
Ещё бывают тонкости с конфигурацией и переконфигурацией алгоритмов, особенно актуально для алгоритмов консенсуса, но это всё разбиралось лишь на семинарах.&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B5%D0%BD%D0%B7%D0%BE%D1%80&amp;diff=83305</id>
		<title>Метрический тензор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B5%D0%BD%D0%B7%D0%BE%D1%80&amp;diff=83305"/>
				<updated>2022-09-01T04:40:47Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Метрический тензор==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt; \{\tilde{e_i}\}_{i=1}^{n}&amp;lt;/tex&amp;gt; {{---}} не ОРТН базис: &amp;lt;tex&amp;gt;\left\langle x,y\right\rangle=\sum\limits_{i,k=1}^{n} \xi^i \overline{\tilde{\eta}^k}&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\left\langle \tilde{e_i},\tilde{e_k}\right\rangle=g_{ik}=\sum\limits_{i,k=1}^{n} g_{ik}\xi^i \overline{\eta^k}&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;g_{ik}&amp;lt;/tex&amp;gt; называют '''метрическим тензором'''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Естественный изоморфизм евклидова пространства и его сопряжённого==&lt;br /&gt;
Рассмотрим отображение &amp;lt;tex&amp;gt;x \in E \longrightarrow f \in E^*&amp;lt;/tex&amp;gt; по формуле &amp;lt;tex&amp;gt;\left\langle x,y\right\rangle = (f;y); \forall y \in E&amp;lt;/tex&amp;gt;&lt;br /&gt;
Назовём это равенство &amp;lt;tex&amp;gt;(*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about = 1&lt;br /&gt;
|statement = Пусть &amp;lt;tex&amp;gt;x \rightarrow f_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \rightarrow f_2&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;f_1=f_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof = По равенству &amp;lt;tex&amp;gt;(*): \left\langle x,y\right\rangle=(f_1;y)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\langle x,y\right\rangle=(f_2;y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычтя одно из другого, по линейности &amp;lt;tex&amp;gt;E^*&amp;lt;/tex&amp;gt; получим: &amp;lt;tex&amp;gt;0 = (f_1-f_2;y); \forall y \in E \Longrightarrow f_1-f_2= 0_{E^*} \Longrightarrow f_1=f_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
Таким образом, вектору &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; соответствует единственная форма &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about = 2&lt;br /&gt;
|statement = Пусть &amp;lt;tex&amp;gt;f \rightarrow x_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;f \rightarrow x_2&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;x_1=x_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof = По равенству &amp;lt;tex&amp;gt;(*): \left\langle x_1,y\right\rangle=(f;y)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\langle x_2,y\right\rangle=(f;y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычтя одно из другого, по линейности &amp;lt;tex&amp;gt;\left\langle \right\rangle&amp;lt;/tex&amp;gt; получим: &amp;lt;tex&amp;gt;\left\langle x_1-x_2,y\right\rangle = 0; \forall y \in E \Longrightarrow x_1-x_2= 0_E \Longrightarrow x_1=x_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, форме &amp;lt;tex&amp;gt;f&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;
|about = 3, о линейности изоморфизма&lt;br /&gt;
|statement = Если &amp;lt;tex&amp;gt;x_1 \longleftrightarrow f_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; x_2 \longleftrightarrow f_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \Longrightarrow x_1+x_2 \longleftrightarrow f_1+f_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \alpha x_1 \longleftrightarrow \alpha f_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= Линейность изоморфизма напрямую следует из линейности обоих пространств:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left\langle \alpha x_1,y\right\rangle =  \alpha\left\langle x_1,y\right\rangle =  \alpha(f_1,y)= ( \alpha f_1, y);&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Формула &amp;lt;tex&amp;gt;(*): \left\langle x,y\right\rangle = (f;y); \forall y \in E&amp;lt;/tex&amp;gt; определяет обратимый линейный оператор &amp;lt;tex&amp;gt;\mathcal{G}: E \longrightarrow E^*&amp;lt;/tex&amp;gt; т.е. &amp;lt;tex&amp;gt;(\mathcal{G}\cdot x=f); \; \exists \mathcal{G}^{-1}: E^* \longrightarrow E&amp;lt;/tex&amp;gt; т.е. &amp;lt;tex&amp;gt;(\mathcal{G}^{-1}\cdot f=x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Изоморфизм конечномерного Евклидова пространства и его сопряженного является естественным изоморфизмом.&lt;br /&gt;
&lt;br /&gt;
==Пересадка формы из E* в E==&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;{\{e_i\}}_{i=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;{\{f^k\}}_{k=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;E^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(f^k;e_i) = \delta^k_i&amp;lt;/tex&amp;gt;(сопряжённые базисы)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;\mathcal{G}^{-1}f^k = e^k \in E&amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about = 1&lt;br /&gt;
|statement=  &amp;lt;tex&amp;gt;{\{e^k\}}_{k=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;;&lt;br /&gt;
|proof=ЛНЗ набор &amp;lt;tex&amp;gt;\{ f^1, ... , f^n\}&amp;lt;/tex&amp;gt; под действием &amp;lt;tex&amp;gt;\mathcal{G}^{-1}&amp;lt;/tex&amp;gt; переходит в &amp;lt;tex&amp;gt;\{ e^1, ... , e^n\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;{\{e^k\}}_{k=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about = 2&lt;br /&gt;
|statement=  &amp;lt;tex&amp;gt;\left\langle e^k;e_i\right\rangle=\left\langle e_i;e^k\right\rangle = \delta^k_i&amp;lt;/tex&amp;gt;;&lt;br /&gt;
|proof= &amp;lt;tex&amp;gt;\left\langle e^k;y\right\rangle = (f^k;y); \forall y \in E&amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;y=e_i&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\left\langle e^k;e_i\right\rangle=(f^k;e_i)=\delta^k_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;\left\langle e_i;e^k\right\rangle=\overline{\left\langle e^k;e_i\right\rangle}=\overline{\delta^k_i} = \delta^k_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition= Наборы векторов  &amp;lt;tex&amp;gt;{\{e^k\}}_{k=1}^n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;{\{e_i\}}_{i=1}^n&amp;lt;/tex&amp;gt; называются '''биортогональными базисами'''&lt;br /&gt;
}}&lt;br /&gt;
NB:&amp;lt;tex&amp;gt;G(x,y)=\left\langle x,y\right\rangle \longleftrightarrow g_{ik}=\left\langle e_i,e_k\right\rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G = \Vert g_{ik}\Vert; \left\langle x,y\right\rangle = \sum\limits^n_{i,k=1}{\xi^{i}g_{ik}\eta^k}&amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;e^k= \sum\limits^n_{i=1}{g^{ki}e_i} (1)&amp;lt;/tex&amp;gt;;&amp;lt;br&amp;gt;  &amp;lt;tex&amp;gt;e_k= \sum\limits^n_{i=1}{g_{ki}e^i} (2)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Vert g^{ki}\Vert=\Vert g_{ki}\Vert^{-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= &amp;lt;tex&amp;gt;{\{e^i\}}_{i=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;E \Longrightarrow e_k = \sum\limits^n_{i=1}{\alpha_{ki}e^i}&amp;lt;/tex&amp;gt;(разложение единственно)&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;\left\langle e_k;e_j\right\rangle = \left\langle \sum\limits^n_{i=1}{\alpha_{ki}e^i};e_j\right\rangle =  \sum\limits^n_{i=1}{\alpha_{ki}\left\langle e^i;e_j\right\rangle} = \alpha_{kj}&amp;lt;/tex&amp;gt;  (т.к. &amp;lt;tex&amp;gt;\left\langle e^i;e_j\right\rangle = \delta^i_j&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left\langle e_k;e_j\right\rangle = g_{kj}&amp;lt;/tex&amp;gt;, т.е &amp;lt;tex&amp;gt;g_{kj}=\alpha_{kj}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переход от &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; производится путём умножения на обратную матрицу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G^{-1} \vert e_{(k)} = G\cdot e^{(i)}&amp;lt;/tex&amp;gt; - и приходим к равенству &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
[[Категория: Алгебра и геометрия 1 курс]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=J2ni2Cmax&amp;diff=83304</id>
		<title>J2ni2Cmax</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=J2ni2Cmax&amp;diff=83304"/>
				<updated>2022-09-01T04:40:40Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex dpi = 200&amp;gt;J2 \mid n_i \leqslant 2 \mid C_{max}&amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=Рассмотрим задачу:&lt;br /&gt;
*Дано &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ и &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; станка.&lt;br /&gt;
*Для каждой работы известно её время выполнения на каждом станке &amp;lt;tex&amp;gt;p_{ij}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Для каждой работы известна последовательность &amp;lt;tex&amp;gt;O_{i1}, \ O_{i2} \ \ldots \ O_{ik}&amp;lt;/tex&amp;gt; станков {{---}} порядок, в котором нужно выполнить работу. &lt;br /&gt;
*В каждой последовательности &amp;lt;tex&amp;gt;O_{i}&amp;lt;/tex&amp;gt; не более двух элементов.&lt;br /&gt;
Требуется минимизировать время окончания выполнения всех работ. }}&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
&amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt; {{---}} первый станок. &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt; {{---}} второй станок. &lt;br /&gt;
&lt;br /&gt;
Разобьем все работы на четыре множества:&lt;br /&gt;
#&amp;lt;tex&amp;gt;I_{1}&amp;lt;/tex&amp;gt; {{---}} множество всех работ, которые должны выполниться только на &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;I_{2}&amp;lt;/tex&amp;gt; {{---}} множество всех работ, которые должны выполниться только на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
#&amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; {{---}} множество всех работ, которые должны выполниться сначала на &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt; затем на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; {{---}} множество всех работ, которые должны выполниться сначала на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt; затем на &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Решим задачу [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]] для &amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; независимо. Получим расписание &amp;lt;tex&amp;gt;S_{12}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S_{21}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда оптимальное расписание для нашей задачи будет следующим:&lt;br /&gt;
* Расписание &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt;: сначала &amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; в соответсвии с расписанием &amp;lt;tex&amp;gt;S_{12}&amp;lt;/tex&amp;gt;. Затем &amp;lt;tex&amp;gt;I_{1}&amp;lt;/tex&amp;gt; в произвольном порядке. Затем &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; в соответсвии с &amp;lt;tex&amp;gt;S_{21}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
* Расписание &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt;: сначала &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; в соответсвии с расписанием &amp;lt;tex&amp;gt;S_{21}&amp;lt;/tex&amp;gt;. Затем &amp;lt;tex&amp;gt;I_{2}&amp;lt;/tex&amp;gt; в произвольном порядке. Затем &amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; в соответсвии с &amp;lt;tex&amp;gt;S_{12}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Примечание''': во время выполнения &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt; могут возникнуть простои &lt;br /&gt;
из-за того, что работа ещё не выполнилась на предыдущем станке.&lt;br /&gt;
&lt;br /&gt;
==Доказательство корректности алгоритма==&lt;br /&gt;
&amp;lt;tex&amp;gt;T_{j}(x)&amp;lt;/tex&amp;gt; {{---}} время выполнения множества работ &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; на станке &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;G_{j}&amp;lt;/tex&amp;gt; {{---}} множество всех работ, которые нужно сделать хотя бы раз на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м станке, то есть &amp;lt;tex&amp;gt;G_{1} = I_{1} \cup I_{12} \cup I_{21}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma1 &lt;br /&gt;
|statement=&lt;br /&gt;
Расписание, построенное данным алгоритмом, обладает следующим свойством: один из станков работает без простоев.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
#&amp;lt;tex&amp;gt;T_{1}(I_{12}) + T_{1}(I_{1}) \geqslant T_{2}(I_{21}) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;Тогда &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt; работает без прерываний, т.к к моменту завершения выполнения &amp;lt;tex&amp;gt;I_{1}&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; M_{1} &amp;lt;/tex&amp;gt; все работы &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt; выполнены на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
#&amp;lt;tex&amp;gt;T_{1}(I_{12}) + T_{1}(I_{1}) &amp;lt; T_{2}(I_{21}) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;Тогда &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt; работает без прерываний, т.к к моменту завершения выполнения &amp;lt;tex&amp;gt;I_{2}&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; M_{2} &amp;lt;/tex&amp;gt; все работы &amp;lt;tex&amp;gt;I_{12}&amp;lt;/tex&amp;gt; выполнены на &amp;lt;tex&amp;gt;M_{1}&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;
[[Файл: j2ni2cmax.jpg|400px|thumb|right|&lt;br /&gt;
Рис. 1 {{---}} Расположение  работ.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В серой области могут быть прерывания.&lt;br /&gt;
]]&lt;br /&gt;
Корректность алгоритма очевидна.&lt;br /&gt;
Докажем оптимальность.&lt;br /&gt;
&lt;br /&gt;
Пусть, для опеределенности &amp;lt;tex&amp;gt;M_{1}&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;
*Если это &amp;lt;tex&amp;gt;M_{1}&amp;lt;/tex&amp;gt;, то оптимальность очевидна &amp;lt;tex&amp;gt;(C_{max} \geqslant \sum\limits_{i \in G_{1}} p_{i1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Иначе &amp;lt;tex&amp;gt;C_{max}&amp;lt;/tex&amp;gt; достигается на &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;M_{2}&amp;lt;/tex&amp;gt; работает без прерываний и оптимальность очевидна.&lt;br /&gt;
Или есть прерывания.&lt;br /&gt;
Тогда целевая функция равна ответу задачи [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]] для работ &amp;lt;tex&amp;gt;I_{21}&amp;lt;/tex&amp;gt;, который оптимален.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Сложность алгоритма==&lt;br /&gt;
Время работы алгоритма равно времени работы алгоритма  [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]], то есть &amp;lt;tex&amp;gt;O(n\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 179 {{---}} 180 стр. {{---}} ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84%D1%8B-%D1%8D%D0%BA%D1%81%D0%BF%D0%B0%D0%BD%D0%B4%D0%B5%D1%80%D1%8B&amp;diff=83303</id>
		<title>Графы-экспандеры</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84%D1%8B-%D1%8D%D0%BA%D1%81%D0%BF%D0%B0%D0%BD%D0%B4%D0%B5%D1%80%D1%8B&amp;diff=83303"/>
				<updated>2022-09-01T04:40:35Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Граф-экспандер''' (или расширяющийся граф, англ. ''expander graph'') {{---}} в комбинаторике сильно разреженный [[Основные определения теории графов#Ориентированные графы|граф]], при этом связность определяется по вершинам, дугам или спектру. Это конечный ненаправленный ''мультиграф'', в котором любое подмножество вершин, не являясь «слишком большим», имеет «сильную» связность. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Любой связный граф является экспандером, однако различные связные [[Основные определения теории графов#Ориентированные графы|графы]] имеют различные параметры расширителя. [[Основные определения теории графов#Часто используемые графы|Полный граф]] имеет лучшие параметры расширителя, но имеет наибольшую возможную степень. Неформально говоря, граф является хорошим экспандером, если он имеет низкую степень и высокий параметр расширителя.&lt;br /&gt;
== Основные определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Множество соседей''' (англ. ''set of neighbors'') для множества вершин &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; называется &amp;lt;tex&amp;gt;\Gamma(S) = \{v: \exists w \in S:\ (v, w) \in E\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание:''' в графе могут присутствовать кратные ребра и петли. Если у каждой вершины есть петли, то &amp;lt;tex&amp;gt;\forall S: S \supseteq \Gamma(S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Вершинное расширение===&lt;br /&gt;
''Вершинное изопериметрическое число'' &amp;lt;tex&amp;gt;h_{out}(G)&amp;lt;/tex&amp;gt; (также ''вершинное раширение'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; определяется как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;h_{out}(G) = \min\limits_{0 &amp;lt; |S|\leqslant \cfrac{n}{2}} \cfrac{|\Gamma_{\text{out}}(S)|}{|S|}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\Gamma_{\text{out}}(S)&amp;lt;/tex&amp;gt; — ''внешняя граница'' &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то есть множество вершин из &amp;lt;tex&amp;gt;V(G)\setminus S&amp;lt;/tex&amp;gt;, имеющих как минимум одного соседа в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma_{\text{out}}(S) = \{v \in V(G) \diagdown S: \exists w \in S (v, w) \in E\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Вершинное изопериметрическое число'' &amp;lt;tex&amp;gt;h_{in}(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; определяется как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;h_{in}(G) = \min\limits_{0 &amp;lt; |S|\leqslant \cfrac{n}{2}} \cfrac{|\Gamma_{\text{in}}(S)|}{|S|}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\Gamma_{in}(S)&amp;lt;/tex&amp;gt; — ''внутренняя граница'' &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то есть множество вершин &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, имеющих как минимум одного соседа в &amp;lt;tex&amp;gt;V(G)\setminus S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma_{in}(S) = \Gamma(S) \diagdown \Gamma_{in}(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
==== Однородный (комбинаторный) экспандер ====&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Однородный (комбинаторный) экспандер''' (англ. ''combinatorial expander'') называется [[Основные определения теории графов#Ориентированные графы|граф]] &amp;lt;tex&amp;gt;G = (V, E)&amp;lt;/tex&amp;gt; с параметрами &amp;lt;tex&amp;gt;(n, d, \epsilon) \ (n = |V|&amp;lt;/tex&amp;gt;, d {{---}} степень каждой вершины, константа &amp;lt;tex&amp;gt;\epsilon &amp;lt; 1)&amp;lt;/tex&amp;gt;, если выполняется условие: &lt;br /&gt;
для &amp;lt;tex&amp;gt;\ \forall S: S \subseteq V, \ |S| \leqslant \cfrac{n}{2} \ \ \exists \ \Gamma(S)&amp;lt;/tex&amp;gt;, которое достаточно велико, то есть &amp;lt;tex&amp;gt;|\Gamma(S)| &amp;gt; (1 + \epsilon)|S|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание:''' чем больше &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;, тем сильнее свойство расширения. &lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; {{---}} некоторое положительное число меньшее &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Тогда для всех достаточно больших четных &amp;lt;tex&amp;gt;d = d(\epsilon)&amp;lt;/tex&amp;gt; и всех &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; существует однородный (комбинаторный) экспандер с параметрами &amp;lt;tex&amp;gt;(n, d, \epsilon)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Мы выберем граф случайно и покажем, что с положительной (и даже довольно близкой к &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;) вероятностью такой граф оказывается экспандером. Отсюда будет следовать, что экспандеры существуют.&lt;br /&gt;
&lt;br /&gt;
Оценим вероятность того, что полученный в результате граф не является экспандером, если найдется множество вершин &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (состоящее из не более, чем &amp;lt;tex&amp;gt;\cfrac{n}{2}&amp;lt;/tex&amp;gt; вершин), все соседи которого лежат в некотором множестве &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящем из &amp;lt;tex&amp;gt;\lfloor (1 + \epsilon)|S|\rfloor&amp;lt;/tex&amp;gt; вершин.&lt;br /&gt;
&lt;br /&gt;
Зафиксируем некоторые множества вершин &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Зафиксируем номер перестановки &amp;lt;tex&amp;gt;\pi_{i}&amp;lt;/tex&amp;gt;. Вероятность того, что для каждой вершины &amp;lt;tex&amp;gt;v \in S&amp;lt;/tex&amp;gt; второй конец ребра &amp;lt;tex&amp;gt;\{v, pi_{i}(v)\}&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;\cfrac{|T|}{n} \cdot \cfrac{|T| - 1}{n - 1} \cdot \ldots \cdot \cfrac{|T| - |S| + 1}{n - |S| + 1} \leqslant \bigg(\cfrac{|T|}{n}\bigg)^{|S|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку мы выбираем &amp;lt;tex&amp;gt;\cfrac{d}{2}&amp;lt;/tex&amp;gt; перестановок независимо, вероятность того, что данное событие произойдёт для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;\bigg(\cfrac{|T|}{n}\bigg)^{\tfrac{d|S|}{2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, &lt;br /&gt;
&lt;br /&gt;
Вероятность, что свойство экспандерности графа нарушено небольше &amp;lt;tex&amp;gt;\sum\limits_{S, T} \bigg(\cfrac{|T|}{n}\bigg)^{\tfrac{d|S|}{2}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где суммирование происходит по всем множествам вершин &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; размера не более &amp;lt;tex&amp;gt;\cfrac{n}{2}&amp;lt;/tex&amp;gt; и по всем множествам &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;\lfloor(1 + \epsilon)|S|\rfloor&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим сумму:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{S, T} \bigg(\cfrac{|T|}{n}\bigg)^{\tfrac{d|S|}{2}} \leqslant \sum\limits_{s = 1}^{\tfrac{n}{2}} \dbinom{s}{n} \cdot \dbinom{(1 + \epsilon)s}{n} \cdot \bigg(\cfrac{(1 + \epsilon)s}{n}\bigg)^{\tfrac{sd}{2}}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждый биномиальный коэффициент &amp;lt;tex&amp;gt;\dbinom{k}{n}&amp;lt;/tex&amp;gt; можно оценить сверху величиной &amp;lt;tex&amp;gt;\bigg(\cfrac{ne}{k}\bigg)^{k}&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\sum\limits_{s = 1}^{\tfrac{n}{2}}&lt;br /&gt;
  \bigg(\cfrac{ne}{s}\bigg)^{s} \cdot&lt;br /&gt;
  \bigg(\cfrac{ne}{(1 + \epsilon)s}\bigg)^{(1 + \epsilon)s} \cdot &lt;br /&gt;
  \bigg(\cfrac{(1 + \epsilon)s}{n}\bigg)^{\tfrac{sd}{2}} =&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{s = 1}^{\tfrac{n}{2}} \bigg[\bigg(\cfrac{s}{n}\bigg)^{\tfrac{d}{2} - 2 - \epsilon} \cdot (1 + \epsilon)^{\tfrac{d}{2}} \cdot \cfrac{e^{1 + \epsilon} }{(1 + \epsilon)^{1 + \epsilon} }\bigg]^s&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;s \leqslant \cfrac{n}{2}&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;1 + \epsilon &amp;lt; 2&amp;lt;/tex&amp;gt;. Таким образом, можно подобрать такое&lt;br /&gt;
&amp;lt;tex&amp;gt;d = d(\epsilon)&amp;lt;/tex&amp;gt;, чтобы выражение в квадратных скобках в правой части &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt; было меньше &amp;lt;tex&amp;gt;\cfrac{1}{2}&amp;lt;/tex&amp;gt; при всех значениях &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;. Следовательно, сумма &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; меньше единицы. Что означает, что с положительной вероятностью случайный граф является экспандером с параметрами &amp;lt;tex&amp;gt;(n, d, \epsilon)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Двудольный экспандер ====&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двудольный экспандер''' (англ. ''Bipartite expander'') называется [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G = (L,\ R,\ E)\ (L&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} вершины левой и правой доли соответственно, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} ребра графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;) с параметрами &amp;lt;tex&amp;gt;(n,\ m,\ d,\ e)\ (n = |L|,\ m = |R|,\ d&amp;lt;/tex&amp;gt; - степень всех вершин в левой доле), если выполняется условие: для &amp;lt;tex&amp;gt;\forall S: S \subseteq L \ |S| \leqslant k \ \ |\Gamma(S)| &amp;gt; (1 - \epsilon)d|S|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание 1:''' чем меньше значение &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; в данном определении, тем сильнее свойство расширения. &lt;br /&gt;
&lt;br /&gt;
'''Замечание 2:''' в приложениях как правило используют двудольные экспандеры с &amp;lt;tex&amp;gt;\epsilon &amp;lt; \cfrac{1}{2}&amp;lt;/tex&amp;gt;, а для применения в теории кодирования (для построения экспандерных кодов) часто требуются двудольные экспандеры с ещё меньшими значениями &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; {{---}} некоторое положительное число. Тогда для &amp;lt;tex&amp;gt;\forall \ n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;k \leqslant n&amp;lt;/tex&amp;gt; найдется &amp;lt;tex&amp;gt;d = O(\log n)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;m = O(dk)&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;\exists&amp;lt;/tex&amp;gt; двудольный экспандер с параметрами &amp;lt;tex&amp;gt;(n, m, d, k, \epsilon)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Выберем случайный граф, то есть для &amp;lt;tex&amp;gt;\forall \ v \in L&amp;lt;/tex&amp;gt; случайно и независимо выбираем &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; соседей в &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; (разрешаются кратные ребра). Покажем с большой вероятностью такой граф оказывается экспандером. &lt;br /&gt;
&lt;br /&gt;
Граф не является экспандером, если &amp;lt;tex&amp;gt;\exists T \subset R: \ |T| = (1 - \epsilon)d|S|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists S \subset L: \ \Gamma(S) = T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку при случайном выборе графа мы приводим все &amp;lt;tex&amp;gt;nd&amp;lt;/tex&amp;gt; рёбер случайно и независимо, то для &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; ребра вероятность того, что его правый конец окажется в фиксированном множестве &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, равна &amp;lt;tex&amp;gt;\cfrac{|T|}{m}&amp;lt;/tex&amp;gt;. Следовательно, вероятность, что свойство экспандерности графа нарушено &amp;lt;tex&amp;gt; \leqslant \ \sum\limits_{S, T}\bigg(\cfrac{|T|}{m}\bigg)^{sd}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
где суммирование происходит по всем множествам &amp;lt;tex&amp;gt;S \subset L \ |S| \leqslant k \ \forall T: T \subset R \ |T| = (1 - \epsilon)d|S| &amp;lt;/tex&amp;gt;. Оценим данную сумму сверху:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{s = 1}^{k} \dbinom{s}{n} \* \dbinom{(1 - \epsilon)sd}{m} \* \bigg(\cfrac{(1 - \epsilon)sd}{m}\bigg)^{sd}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценивая биномиальные коэффициенты, получаем, что сумма не превосходит&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\sum\limits_{s = 1}^{k} &lt;br /&gt;
\bigg(\cfrac{ne}{s}\bigg)^{s} \cdot &lt;br /&gt;
\bigg(\cfrac{me}{(1 - \epsilon)sd}\bigg)^{(1 - \epsilon)sd} \cdot &lt;br /&gt;
\bigg(\cfrac{(1 - \epsilon)sd}{m}\bigg)^{sd} &lt;br /&gt;
\leqslant &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\sum\limits_{s = 1}^{k} &lt;br /&gt;
\bigg[\cfrac{ne}{s} \cdot &lt;br /&gt;
\bigg(\cfrac{e^{\tfrac{1 - \epsilon}{\epsilon}} \cdot &lt;br /&gt;
(1 - \epsilon)sd}{m}\bigg)^{\epsilon d}\bigg]^{s}&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;m = Const * kd&amp;lt;/tex&amp;gt; (с достаточно большим значением &amp;lt;tex&amp;gt;Const&amp;lt;/tex&amp;gt;), чтобы для всех возможных s выполнялось неравенство &amp;lt;tex&amp;gt;\cfrac{e^{\tfrac{1 - \epsilon}{\epsilon}} \cdot (1 - \epsilon)sd}{m} \leqslant \cfrac{1}{2}&amp;lt;/tex&amp;gt;. Тогда выражение в квадратных скобках не превосходит &amp;lt;tex&amp;gt;\cfrac{ne}{2 ^ {\epsilon d}}&amp;lt;/tex&amp;gt;. Остаётся выбрать &amp;lt;tex&amp;gt;d &amp;gt; \cfrac{1}{\epsilon}\log(2en)&amp;lt;/tex&amp;gt;, и мы получаем &amp;lt;tex&amp;gt;\cfrac{ne}{2^{\epsilon d}} &amp;lt; \cfrac{1}{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для выбранных значений параметров сумм не превосходят &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Это означает, что с положительной вероятностью случайный двудольный граф является экспандером c параметрами &amp;lt;tex&amp;gt;(n, \ m, \ k, \ d, \ \epsilon)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание:''' константы в &amp;lt;tex&amp;gt;O&amp;lt;/tex&amp;gt; зависят от &amp;lt;tex&amp;gt;\epsilon&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;G&amp;lt;/tex&amp;gt; {{---}} [[Двудольные графы|двудольный граф]].&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет совершенное паросочетание тогда и только тогда, когда &amp;lt;tex&amp;gt;\forall S: S \supseteq L \ |S| \leqslant \Gamma(S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Будем доказывать по индукции&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;tex&amp;gt;|L| = 1&amp;lt;/tex&amp;gt; очевидно &lt;br /&gt;
&lt;br /&gt;
Предположим, что верно для &amp;lt;tex&amp;gt;L: |L| &amp;lt; m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
# &amp;lt;tex&amp;gt;\forall S: S \supseteq L, |S| \neq 0&amp;lt;/tex&amp;gt; строго расширяется, то есть &amp;lt;tex&amp;gt;|\Gamma(S)| &amp;gt; |S|&amp;lt;/tex&amp;gt;. Выберем &amp;lt;tex&amp;gt;\forall x: x \supset V(L) : (x, y) \in E&amp;lt;/tex&amp;gt;. Тогда рассмотрим двудольный граф &amp;lt;tex&amp;gt;G^{*}&amp;lt;/tex&amp;gt;, у которого левая доля &amp;lt;tex&amp;gt;L^{*} = L \diagdown {x}&amp;lt;/tex&amp;gt;, а правая &amp;lt;tex&amp;gt;R^{*} = R \diagdown {y}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall S: S \supset L&amp;lt;/tex&amp;gt; удовлетворяет строгому неравенству теоремы, то каждое подмножество &amp;lt;tex&amp;gt;L^{*}&amp;lt;/tex&amp;gt; удовлетворяет неравенству, поскольку только одна вершина &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; была удалена из &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Следовательно, по предположению индукции меньший граф &amp;lt;tex&amp;gt;G^{*}&amp;lt;/tex&amp;gt; имеет паросочетание. К этому паросочетанию добавляем ребро (x, y) что дает совершенное паросочетание.&lt;br /&gt;
# Пусть &amp;lt;tex&amp;gt;\exists\ T \in L, \ |T| \neq 0&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;|\Gamma(T)| = |T|&amp;lt;/tex&amp;gt;. Рассмотрим порожденные графы &amp;lt;tex&amp;gt;G_{1} = T \cup \Gamma(T)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_{2} = L \diagdown T \cup R \diagdown \Gamma(T)&amp;lt;/tex&amp;gt;. По предположению индукции &amp;lt;tex&amp;gt;G_{1}&amp;lt;/tex&amp;gt; имеет совершенное паросочетание (Заметим, что предположение индукции не может использовано непосредственно на &amp;lt;tex&amp;gt;G_{2}&amp;lt;/tex&amp;gt;). Пусть &amp;lt;tex&amp;gt;S \supseteq L \diagdown T&amp;lt;/tex&amp;gt;, тогда: &amp;lt;tex&amp;gt;\Gamma_{G_{2}}(S) = \Gamma_{G}(S \cup T) \diagdown \Gamma_{G}(T) \ \Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;|\Gamma_{G_{2}}| \geqslant |S \cup T| - |T| = |S|&amp;lt;/tex&amp;gt; Неравенство верно, поскольку &amp;lt;tex&amp;gt;S \cup T&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;|\Gamma_{G}(S \cup T)| \geqslant |S \cup T|&amp;lt;/tex&amp;gt; и по предположению &amp;lt;tex&amp;gt;|\Gamma_{G}(T)| = |T|&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;G_{2}&amp;lt;/tex&amp;gt; также удовлетворяет неравенству теоремы и по предположению индукции имеет паросочетание. Объединение совершенных паросочетаний &amp;lt;tex&amp;gt;G_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_{2}&amp;lt;/tex&amp;gt; {{---}} паросочетание для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Реберное расширение===&lt;br /&gt;
''Рёберное расширение'' (также ''изопериметрическое число'' или константа Чигера&amp;lt;ref&amp;gt;[[wikipedia:Cheeger_constant|Wikipedia {{---}} константа Чигера]]&amp;lt;/ref&amp;gt;) &amp;lt;tex&amp;gt;h(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершин определяется как&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;h(G) = \min\limits_{0 &amp;lt; |S|\leqslant \cfrac{n}{2}} \cfrac{|\partial_{\text{out}}(S)|}{|S|}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где минимум берётся по всем непустым множествам &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не более чем &amp;lt;tex&amp;gt;\cfrac{n}{2}&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt;\partial(S)&amp;lt;/tex&amp;gt; — ''граничные дуги'' множества &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то есть, множество дуг с единственной вершиной в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Спектральное расширение===&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является [[Основные определения теории графов#Часто используемые графы|d-регулярным]], возможно определение в терминах [[Алгебра|линейной алгебры]] на основе собственных значений [[Матрица смежности графа|матрицы смежности]] &amp;lt;tex&amp;gt;A = A(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_{ij}&amp;lt;/tex&amp;gt; {{---}} число дуг между вершинами &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; является симметричной, согласно спектральной теореме&amp;lt;ref&amp;gt;[[wikipedia:Spectral theorem|Wikipedia {{---}} спектральная теорема]]&amp;lt;/ref&amp;gt;, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; имеет &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; действительных собственных значений &amp;lt;tex&amp;gt;\lambda_{1} \ge \lambda_{2} \ge \cdots \ge \lambda_{n}&amp;lt;/tex&amp;gt;. Известно, что эти значения лежат в промежутке &amp;lt;tex&amp;gt;[-d, d]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Граф регулярен тогда и только тогда, когда вектор &amp;lt;tex&amp;gt;u\in \mathbb {R} ^{n}&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;u_{i}=1&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt; является собственным вектором матрицы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а его собственное число будет постоянной степенью графа. Таким образом, мы имеем &amp;lt;tex&amp;gt;Au = du&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; — собственный вектор матрицы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; с собственными значениями &amp;lt;tex&amp;gt;\lambda_{1} = d&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; — степень вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Спектральный зазор графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; определяется как &amp;lt;tex&amp;gt;d-\lambda_{2}&amp;lt;/tex&amp;gt; и является мерилом спектрального расширения графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Известно, что &amp;lt;tex&amp;gt;\lambda_{n} = -d&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} [[Двудольные графы|двудольный]]. Во многих случаях, например в [[Графы-экспандеры#Лемма о перемешивании|лемме о перемешивании]], необходимо ограничить снизу не только зазор между &amp;lt;tex&amp;gt;\lambda_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lambda_{2}&amp;lt;/tex&amp;gt;, но и зазор между &amp;lt;tex&amp;gt;\lambda_{1}&amp;lt;/tex&amp;gt; и вторым максимальным по модулю собственным значением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\lambda=\max\{|\lambda_{2}|, |\lambda_{n}|\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку это собственное значение соответствует некоторому собственному вектору, ортогональному &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, его можно определить, используя отношение Рэлея:&lt;br /&gt;
&amp;lt;tex&amp;gt;\lambda=\max\limits_{0\neq v\perp u} \cfrac{\|Av\|_2}{\|v\|_2},&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;\|v\|_2=\left(\sum\limits_{i=1}^{n} v_i^2\right)^{\tfrac{1}{2}}&amp;lt;/tex&amp;gt; {{---}} евклидова норма вектора &amp;lt;tex&amp;gt;v\in \mathbb {R} ^{n}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нормализованная версия этого определения также широко используется и более удобна для получения определённых результатов. В таком случае рассматривается матрица &amp;lt;tex&amp;gt;{\cfrac {1}{d}}A&amp;lt;/tex&amp;gt;, являющаяся матрицей переходов графа G. Все её собственные значения лежат между &amp;lt;tex&amp;gt;(-1, 1)&amp;lt;/tex&amp;gt;. Если граф не регулярен, спектр графа может быть определён аналогичным образом, используя собственные значения [[Матрица Кирхгофа|матрицы Кирхгофа]]. Для направленного графа используются сингулярные значения матрицы сопряжения &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, которые равны квадратным корням из собственных значений симметричной матрицы &amp;lt;tex&amp;gt;A^TA&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Конструирование==&lt;br /&gt;
Существуют три основные стратегии создания семейств графов расширений. Первая стратегия {{---}} алгебраическая и теоретико {{---}} групповая, вторая {{---}} аналитическая, использующая аддитивную комбинаторику, и третья {{---}} комбинаторная, использующая зигзаг-произведение и связанные комбинаторные произведения.&lt;br /&gt;
===Маргулис-Габбер-Галил===&lt;br /&gt;
[[Алгебра|Алгебраическое]] конструирование, основанное на графах Кэли&amp;lt;ref&amp;gt;[[wikipedia:Cayley_graph|Wikipedia {{---}} граф Кэли]]&amp;lt;/ref&amp;gt;, известно для различных вариантов экспандеров. Следующее конструирование принадлежит Маргулису и было проанализировано Габбером и Галилом &amp;lt;ref&amp;gt;Omer Reingold Undirected connectivity in log-space // Journal of the ACM. — 2008. — Т. 55, вып. 4. — DOI:10.1145/1391289.1391291&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В качестве множества вершин графа возьмём &amp;lt;tex&amp;gt;V = \mathbb Z _{n}\times \mathbb {Z} _{n}&amp;lt;/tex&amp;gt; (таким образом, граф будет содержать &amp;lt;tex&amp;gt;n^{2}&amp;lt;/tex&amp;gt; вершин). Каждая вершина &amp;lt;tex&amp;gt;(x, y)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathbb Z _{n}\times \mathbb {Z} _{n}&amp;lt;/tex&amp;gt; соединяется рёбрами со следующими восьмую вершинами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(x \pm 2y,y), (x \pm (2y+1),y), (x,y \pm 2x), (x,y \pm (2x+1)).&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(все арифметические вычисления производятся по модулю &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;). Таким образом, степень каждой вершины графа равна 8. При достаточно больших &amp;lt;tex&amp;gt;n&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;\forall n&amp;lt;/tex&amp;gt; граф &amp;lt;tex&amp;gt;G_{n}&amp;lt;/tex&amp;gt; второе по величине собственное число удовлетворяет неравенству&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\lambda(G)\leqslant 5 \sqrt{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Граф Рамануджана===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов#Часто используемые графы|d-регулярный граф]] называется графом Рамануджана, если его второе по модулю собственное число &amp;lt;tex&amp;gt; \lambda \leqslant 2\sqrt {d-1} - o(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Замечание:''' случайный [[Основные определения теории графов#Часто используемые графы|d-регулярный граф]] с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами почти является графом Рамануджана, так как выполняется неравенство &amp;lt;tex&amp;gt; \lambda \leqslant 2\sqrt {d-1} + \epsilon&amp;lt;/tex&amp;gt; с вероятностью &amp;lt;tex&amp;gt;1 - o(1)&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;n \to \inf&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Примеры применения экспандеров==&lt;br /&gt;
===Коды, исправляющие ошибки===&lt;br /&gt;
С помощью расширяющего графа можно посторить линейный код, позволяющий исправлять ошибки в доле &amp;lt;tex&amp;gt;\delta = \cfrac{1}{2000d}&amp;lt;/tex&amp;gt; битов. Чтобы задать линейный код с длиной кодового слова n, достаточно описать его проверочную матрицу &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt;слово &amp;lt;tex&amp;gt;x \in \{0, 1\}^n&amp;lt;/tex&amp;gt; является кодовым словом если и только если &amp;lt;tex&amp;gt;Hx^t = 0)&amp;lt;/tex&amp;gt;. Другими словами, нужно задать систему линейных уравнений для переменных &amp;lt;tex&amp;gt;x_1, \ldots , x_n&amp;lt;/tex&amp;gt; решения этой системы и будут кодовыми словами.&lt;br /&gt;
&lt;br /&gt;
===Увеличение вероятности успеха в алгоритмах с датчиком случайных чисел===&lt;br /&gt;
Покажем, что для любого &amp;lt;tex&amp;gt;\epsilon &amp;gt; 0&amp;lt;/tex&amp;gt; полиномиальный вероятностный алгоритм A можно модифицировать таким образом, чтобы вероятность ошибки уменьшилась до &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt;, а число используемых случайных битов не изменится.&lt;br /&gt;
&lt;br /&gt;
Пусть исходный алгоритм использует &amp;lt;tex&amp;gt;k = k(n)&amp;lt;/tex&amp;gt; случайных битов для вычислений на входах длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Зафиксируем &amp;lt;tex&amp;gt;(2^k, 2^k, d)&amp;lt;/tex&amp;gt; - экспандер &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d &amp;gt; \cfrac{1}{\epsilon}&amp;lt;/tex&amp;gt;. Новый алгоритм действует следующим образом: выбирается случайная вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; из левой доли графа (для этого требуется &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; случайных битов); затем исходный алгоритм &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; последовательно запускается на всех &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; наборах случайных битов, соответствующих соседям вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Если все полученные ответы равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, новый алгоритм также возвращает единицу; в противном случае возвращается ноль.&lt;br /&gt;
Покажем, что у нового алгоритма вероятность ошибки не превосходит &amp;lt;tex&amp;gt;\cfrac{1}{d}&amp;lt;/tex&amp;gt;. В самом деле, обозначим &amp;lt;tex&amp;gt;B = B(x)&amp;lt;/tex&amp;gt; множество таких вершин &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; из правой доли графа, которые соответствуют неверному ответу старого алгоритма на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;; аналогично, обозначим &amp;lt;tex&amp;gt;S = S(x)&amp;lt;/tex&amp;gt; множество таких вершин v из левой доли графа, которые для которых новый алгоритм даёт неверный ответ на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Очевидно, &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; состоит из вершин, все соседи которых лежат в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Предположим, что &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит не менее &amp;lt;tex&amp;gt;\cfrac{n}{1000d}&amp;lt;/tex&amp;gt; вершин. Выберем среди них ровно &amp;lt;tex&amp;gt;\cfrac{n}{1000d}&amp;lt;/tex&amp;gt; вершин и назовём это множество &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;. По свойству экспандера, имеем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;|\Gamma(S')| \geqslant  \cfrac{7nd}{8 \cdot 1000d} = \cfrac{7n}{8000} &amp;gt; \cfrac{n}{2000}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это противоречит тому, что все соседи &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; лежат в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. В данном случае нам нужна явная в более сильном (чем в первом примере) смысле конструкция экспандера. Размер графа экспоненциално растёт с увеличенем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, и нам необходим алгоритм, который по заданному номеру вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; (из левой доли графа) за время &amp;lt;tex&amp;gt;poly(k)&amp;lt;/tex&amp;gt; находит список номеров всех соседей этой вершины (в правой доле графа).&lt;br /&gt;
&lt;br /&gt;
===Хранение множества со сверхбыстрым запросом элементов===&lt;br /&gt;
Мы организуем хранение m-элементного множества &amp;lt;tex&amp;gt;S \subset \{1, \ldots , n\}&amp;lt;/tex&amp;gt; в виде описания &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, состоящего из &amp;lt;tex&amp;gt;O(m log n)&amp;lt;/tex&amp;gt; битов. При этом проверка принадлежности &amp;lt;tex&amp;gt;a \in S&amp;lt;/tex&amp;gt; будет производиться чрезвычайно быстро. А именно, мы построим такой вероятностный алгоритм, который по любому входу &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; запрашивает из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; один бит; если этот бит оказывается равным единице, то алгоритм отвечает, что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; является элементом &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;; в противном случае алгоритм говорит, что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; множеству не принадлежит. При этом для каждого &amp;lt;tex&amp;gt;a \in \{1, \ldots , n\}&amp;lt;/tex&amp;gt; алгоритм ошибается с вероятностью не более &amp;lt;tex&amp;gt;\cfrac{1}{3}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Чтобы построить нужное нам хранилище &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, мы сначала зафиксируем некоторый экспандер, у которого левая доля &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; состоит из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершин, правая &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k = O(m log n)&amp;lt;/tex&amp;gt; вершин, степень всех вершин левой доли одинакова и равна некоторому &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, и для каждого &amp;lt;tex&amp;gt;A \subset L&amp;lt;/tex&amp;gt; размера не более &amp;lt;tex&amp;gt;2m&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;|\Gamma(A)| \geqslant \cfrac{7d|A|}{8}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; будет состоять в разметке вершин правой доли нулями и единицами. Эту разметку нужно выбрать таким образом, чтобы у каждой вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не менее &amp;lt;tex&amp;gt;\cfrac{2}{3}&amp;lt;/tex&amp;gt; соседей были помечены единицей, а у каждой вершины не из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не менее &amp;lt;tex&amp;gt;\cfrac{2}{3}&amp;lt;/tex&amp;gt; соседей были помечены нулями. &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; будет состоять в разметке вершин правой доли нулями и единицами. Эту разметку нужно выбрать таким образом, чтобы у каждой вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не менее &amp;lt;tex&amp;gt;\cfrac{2}{3}&amp;lt;/tex&amp;gt; соседей были помечены единицей, а у каждой вершины не из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не менее &amp;lt;tex&amp;gt;\cfrac{2}{3}&amp;lt;/tex&amp;gt; соседей были помечены нулями.&lt;br /&gt;
&lt;br /&gt;
Остаётся объяснить, как построить нужную нам разметку правой доли графа. Будем строить её последовательными приближениями. Сначала пометим всех соседей всех вершин из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; единицами, а все остальные вершины – нулями. На данной разметке наш алгоритм с вероятностью &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; возвращает правильный ответ для всех &amp;lt;tex&amp;gt;a \in S&amp;lt;/tex&amp;gt;. Однако для &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; не из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; проверочный алгоритм может работать неверно. Обозначим T множество всех таких вершин вне &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, у которых более &amp;lt;tex&amp;gt;\cfrac{d}{3}&amp;lt;/tex&amp;gt; соседей помечены единицей. Поменяем разметку: пометим всех соседей &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; нулём. Теперь разметка может стать плохой для части вершин из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; множество всех таких вершин из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, у которых более &amp;lt;tex&amp;gt;\cfrac{d}{3}&amp;lt;/tex&amp;gt; соседей помечены нулями. Далее, поменяем разметку у&lt;br /&gt;
всех соседей &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; на единицы. После этого может вновь возникнуть множество ‘неправильных’ вершин вне &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, и т.д.&lt;br /&gt;
&lt;br /&gt;
Чтобы доказать, что данный процесс в конце концов сойдётся, нужно показать, что на каждом шаге число ‘проблемных’ вершин уменьшается в константу раз. Поскольку все шаги аналогичны, достаточно разобрать самый первый: докажем, что &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в константу раз меньше, чем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Мы воспользуемся тем, что для &amp;lt;tex&amp;gt;S \cup T&amp;lt;/tex&amp;gt; выполнено свойство расширения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\cfrac{7d}{8}(|S|+|T|) \leqslant |\Gamma(S \cup T)| \leqslant d|S| + \cfrac{2d|T|}{3}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда получаем &amp;lt;tex&amp;gt;|T| \leqslant \cfrac{3|S|}{5}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Приложения и полезные свойства==&lt;br /&gt;
Первоначально интерес к экспандерам возник с целью построения устойчивой сети (телефонов или компьютеров) — число дуг графов расширения с ограниченным значением регулярности растет линейно по отношению к числу вершин.&lt;br /&gt;
&lt;br /&gt;
Экспандеры нашли широкое применение в теории вычислительных машин и систем, для построения алгоритмов, в корректирующих кодах&amp;lt;ref&amp;gt;[[wikipedia:Expander_code|Wikipedia {{---}} корректирующие коды]]&amp;lt;/ref&amp;gt;, экстракторах, генераторах псевдослучайных чисел&amp;lt;ref&amp;gt;[[wikipedia:Pseudorandom_number_generator|Wikipedia {{---}} генератор псевдослучайных чисел]]&amp;lt;/ref&amp;gt;, сетях сортировки&amp;lt;ref&amp;gt;[[wikipedia:Sorting_network|Wikipedia {{---}} Сеть сортировки]]&amp;lt;/ref&amp;gt; и компьютерных сетях&amp;lt;ref&amp;gt;[[wikipedia:Computer_network|Wikipedia {{---}} компьютерные сети]]&amp;lt;/ref&amp;gt;. Они также используются для доказательства многих важных результатов в теории вычислительной сложности, таких как ''SL''&amp;lt;ref&amp;gt;[[wikipedia:SL_(complexity)|Wikipedia {{---}} SL complexity]]&amp;lt;/ref&amp;gt;=''L''&amp;lt;ref&amp;gt;Omer Reingold Undirected connectivity in log-space // Journal of the ACM. — 2008. — Т. 55, вып. 4. — DOI:10.1145/1391289.1391291&amp;lt;/ref&amp;gt; и [[PCP-теорема|Теорема PCP]]. В криптографии экспандеры используются для создания [[Универсальное семейство хеш-функций|хеш-функций]].&lt;br /&gt;
&lt;br /&gt;
===Лемма о перемешивании===&lt;br /&gt;
Лемма о перемешивании утверждает, что для любых двух подмножеств вершин &amp;lt;tex&amp;gt;S,T\subseteq V&amp;lt;/tex&amp;gt; число рёбер между &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; примерно равно числу рёбер в случайном &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;-регулярном графе. Приближение тем лучше, чем меньше &amp;lt;tex&amp;gt;\lambda =\max\{|\lambda _{2}|&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;|\lambda _{n}|\}&amp;lt;/tex&amp;gt;. В случайном &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;-регулярном графе, также как и в случайном графе Эрдёша — Реньи&amp;lt;ref&amp;gt;[[wikipedia:Erdős–Rényi model|Wikipedia {{---}} Erdős–Rényi model]]&amp;lt;/ref&amp;gt; с вероятностью &amp;lt;tex&amp;gt;{\cfrac {d}{n}}&amp;lt;/tex&amp;gt; выбора ребра, ожидается &amp;lt;tex&amp;gt;{\cfrac {d}{n}}\cdot |S|\cdot |T|&amp;lt;/tex&amp;gt; рёбер между &amp;lt;tex&amp;gt;S&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;E(S, T)&amp;lt;/tex&amp;gt; обозначает число рёбер между &amp;lt;tex&amp;gt;S&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;E(S,T)=2|E(G[S\cap T])|+E(S\setminus T,T)+E(S,T\setminus S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Лемма о перемешивании утверждает, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left|E(S,T)-{\cfrac {d\cdot |S|\cdot |T|}{n}}\right|\leqslant d\lambda {\sqrt {|S|\cdot |T|}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda &amp;lt;/tex&amp;gt; — абсолютное значение нормализованного второго по величине собственного значения.&lt;br /&gt;
&lt;br /&gt;
Недавно Билу и Линайл показали, что обратное тоже верно, то есть, при условии выполнения неравенства из леммы второе по величине собственное значение равно &amp;lt;tex&amp;gt;O(d\lambda \cdot (1+\log(\tfrac{1}{\lambda})))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[http://www.cs.huji.ac.il/~nati/PAPERS/raman_lift.pdf|Lifts, discrepancy and nearly optimal spectral gap]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Блуждания по экспандеру===&lt;br /&gt;
Согласно границе Чернова&amp;lt;ref&amp;gt;[[wikipedia:Chernoff_bound|Wikipedia {{---}} граница Чернова]]&amp;lt;/ref&amp;gt;, если выбирать много независимых случайных значений из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt;, с большой степенью вероятности среднее выбранных значений будет близко к [[Математическое ожидание случайной величины|математическому ожиданию]] случайной переменной. Лемма о блуждании по экспандеру, согласно статьям Аджтари, Комлоша и Семереди&amp;lt;ref&amp;gt;M. Ajtai,J. Komlós,E. Szemerédi Proceedings of the 19th Annual ACM Symposium on Theory of Computing // ACM. — 1987. — С. 132–140. — ISBN 0-89791-221-7. — DOI:10.1145/28395.28410&amp;lt;/ref&amp;gt; и Гилмана&amp;lt;ref&amp;gt;D. Gillman A Chernoff Bound for Random Walks on Expander Graphs // SIAM Journal on Computing. — Society for Industrial and Applied Mathematics, 1998. — Т. 27, вып. 4,. — С. 1203–1220. — DOI:10.1137/S0097539794268765&amp;lt;/ref&amp;gt;, утверждает, что то же самое верно и для блужданий по экспандеру. Это полезно в теории дерандомизации&amp;lt;ref&amp;gt;[[wikipedia:Randomized_algorithm|Wikipedia {{---}} теория дерандомизации]]&amp;lt;/ref&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;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%B0%D0%BD%D0%B4%D0%B5%D1%80_(%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2) Экспандер (теория графов)]&lt;br /&gt;
*[https://compsciclub.ru/courses/expanders/2017-spring/classes/ Экспандеры и их применения (курс CS club)]&lt;br /&gt;
*[https://compsciclub.ru/media/course_class_attachments/expanders-notes-spb-appendix.pdf Приложение к лекциям об экспандерах (CS club)]&lt;br /&gt;
*[https://www.mccme.ru/~anromash/courses/expanders-notes-2014.pdf Экспандеры: конструкции и приложения]&lt;br /&gt;
*[https://www.mccme.ru/~anromash/courses/expanders2009.pdf Определения и несколько примеров применений]&lt;br /&gt;
*[http://www.tcs.tifr.res.in/~prahladh/teaching/05spring/ Expanders in Computer Science]&lt;br /&gt;
*[http://www.cs.huji.ac.il/~nati/PAPERS/expander_survey.pdf S. Hoory, N. Linial, A. Wigderson. Expander graphs and their applications. Bulletin of the AMS, vol. 43, Number 4, Oct. 2006, pp.439 561.]&lt;br /&gt;
*[ H. Buhrman, P.B. Miltersen, J. Radhakrishnan, S. Venkatesh. Are Bitvectors optimal? SIAM J. Comput., 31(6):1723–1744, 2002.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0_%D0%B8_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F_1_%D0%BA%D1%83%D1%80%D1%81:%D0%91%D0%B8%D0%BB%D0%B5%D1%82%D1%8B_2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80%D0%B0&amp;diff=83302</id>
		<title>Алгебра и геометрия 1 курс:Билеты 2 семестра</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0_%D0%B8_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F_1_%D0%BA%D1%83%D1%80%D1%81:%D0%91%D0%B8%D0%BB%D0%B5%D1%82%D1%8B_2_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80%D0%B0&amp;diff=83302"/>
				<updated>2022-09-01T04:40:30Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Господа, я был бы очень рад, если бы вы продолжили мою работу.&lt;br /&gt;
===билет №1===&lt;br /&gt;
# [[Линейный оператор]]&lt;br /&gt;
# [[Собственные векторы и собственные значения]]&lt;br /&gt;
# [[Квадратичные формы]]&lt;br /&gt;
&lt;br /&gt;
===билет №2===&lt;br /&gt;
# [[Пространство линейных операторов]]&lt;br /&gt;
# [[Кратности собственных чисел]]&lt;br /&gt;
# [[Квадратичные формы]]&lt;br /&gt;
&lt;br /&gt;
===билет №3===&lt;br /&gt;
# [[Алгебра]]&lt;br /&gt;
# [[Cпектральный  анализ скалярного оператора]]&lt;br /&gt;
# [[Квадратичные формы]]&lt;br /&gt;
&lt;br /&gt;
===билет №4===&lt;br /&gt;
# [[Алгебра]]&lt;br /&gt;
# [[Нильпотентные операторы]]&lt;br /&gt;
# [[Квадратичные формы]]&lt;br /&gt;
&lt;br /&gt;
===билет №5===&lt;br /&gt;
# [[Обратная матрица]]&lt;br /&gt;
# [[Инвариантные подпространства]]&lt;br /&gt;
# [[Эрмитовски сопряженный и эрмитов оператор]]&lt;br /&gt;
&lt;br /&gt;
===билет №6===&lt;br /&gt;
# [[Обратная матрица]]&lt;br /&gt;
# [[Минимальный полином и инвариантные подпространства]]&lt;br /&gt;
# [[Унитарный и ортогональный операторы]]&lt;br /&gt;
&lt;br /&gt;
===билет №7===&lt;br /&gt;
# [[Ядро и образ линейного  оператора]]&lt;br /&gt;
# [[Собственные векторы и собственные значения]]&lt;br /&gt;
# [[Унитарный и ортогональный операторы]]&lt;br /&gt;
&lt;br /&gt;
===билет №8===&lt;br /&gt;
# [[Обратный оператор]]&lt;br /&gt;
# [[Собственные векторы и собственные значения]]&lt;br /&gt;
# [[Эрмитовски сопряженный и эрмитов оператор]]&lt;br /&gt;
&lt;br /&gt;
===билет №9===&lt;br /&gt;
# [[Замена базиса]]&lt;br /&gt;
# [[Спектральная теорема]]&lt;br /&gt;
# [[Эрмитовски сопряженный и эрмитов оператор]]&lt;br /&gt;
&lt;br /&gt;
===билет №10===&lt;br /&gt;
# [[Замена базиса]]&lt;br /&gt;
# [[Cпектральный  анализ линейного оператора с простым спектром]]&lt;br /&gt;
# [[Ковариантность и контравариантность]]&lt;br /&gt;
&lt;br /&gt;
===билет №11===&lt;br /&gt;
#[[Обратная матрица|Обратная матрица: критерий обратимости, метод Гаусса вычисления обратной матрицы]]&lt;br /&gt;
#[[Cпектральный анализ линейного оператора с простым спектром|Спектральный  анализ линейного оператора с простым спектром: спектр,  диагональный вид матрицы, спектральные проекторы, спектральная теорема]]&lt;br /&gt;
#[[Ковариантность и контравариантность|Ковариантные и контравариантные координаты вектора. Операции поднятия и опускания индексов]]&lt;br /&gt;
&lt;br /&gt;
===билет №12=== &lt;br /&gt;
#[[Независимость определителя оператора от базиса. Теорема умножения определителей]]&lt;br /&gt;
#[[Спектральная теорема|Спектральная теорема и функциональное исчисление для скалярного оператора]]&lt;br /&gt;
#[[Метрический тензор|Метрический тензор. Естественный изоморфизм евклидова и сопряженного ему пространств]]&lt;br /&gt;
&lt;br /&gt;
===билет №13===  &lt;br /&gt;
#[[Тензор|Транспонирование тензора]]&lt;br /&gt;
#[[Разложение линейного пространства в сумму подпространств. 2-я теорема о ядре и образе. Теорема о проекторах]]&lt;br /&gt;
#[[Ортогональные системы векторов|Ортогональные системы векторов: коэффициенты Фурье, неравенства Бесселя и Парсеваля]]&lt;br /&gt;
&lt;br /&gt;
===билет №14=== &lt;br /&gt;
#[[Определитель линейного оператора. Внешняя степень оператора.]]&lt;br /&gt;
#[[Нильпотентные операторы|Cтруктура нильпотентного оператора. Базис Жордана (обзор).]]&lt;br /&gt;
#[[Ортогональная сумма подпространств. Ортогональный проектор. Задача о перпендикуляре|Задача о перпендикуляре.]]&lt;br /&gt;
&lt;br /&gt;
===билет №15=== &lt;br /&gt;
#[[Независимость определителя оператора от базиса. Теорема умножения определителей.]]&lt;br /&gt;
#[[Алгебра операторных полиномов. Минимальный полином линейного оператора.]]&lt;br /&gt;
#[[Ортогональная сумма подпространств. Ортогональный проектор. Задача о перпендикуляре|Ортогональная сумма подпространств. Ортогональный проектор.]]&lt;br /&gt;
&lt;br /&gt;
===билет №16=== &lt;br /&gt;
#[[Тензор|Тензоры (ковариантность, независимое от ПЛФ определение). Пространство тензоров.]]&lt;br /&gt;
#[[Жорданова форма матрицы линейного оператора]].&lt;br /&gt;
#[[Ортогональность|Ортогональность. Ортогональный базис. Процесс ортогонализации Грама-Шмидта.]]&lt;br /&gt;
&lt;br /&gt;
===билет №17=== &lt;br /&gt;
#[[Замена базиса|Преобразование матрицы линейного оператора  А при  замене базиса. Преобразование подобия.]]&lt;br /&gt;
#[[Собственные векторы и собственные значения|Собственные векторы и собственные значения линейного оператора: существование, вычисление.]]&lt;br /&gt;
#[[Комплексное евклидово пространство|Комплексное евклидово пространство. Основные неравенства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №18=== &lt;br /&gt;
#[[Ядро и образ линейного оператора|Ядро и образ линейного  оператора. Теорема о ядре и образе. Функции матриц и операторов.]]&lt;br /&gt;
#[[Cпектральный анализ скалярного оператора|Cпектральный  анализ скалярного оператора: спектр,  диагональный вид матрицы, спектральные проекторы, спектральная теорема.]]&lt;br /&gt;
#[[Вещественное евклидово и псевдоевклидово пространство|Вещественное евклидово и псевдоевклидово пространство. Основные неравенства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №19=== &lt;br /&gt;
#[[Тензор|Транспонирование тензора.]]&lt;br /&gt;
#[[Алгебра скалярных полиномов|Алгебра скалярных полиномов. Идеал.  Минимальный полином.]]&lt;br /&gt;
#[[Метрические, нормированные и евклидовы пространства]]&lt;br /&gt;
&lt;br /&gt;
===билет №20=== &lt;br /&gt;
#[[Тензор|Свертка   тензора.]]&lt;br /&gt;
#[[Кратности собственных чисел|Кратности собственных чисел (алгебраическая, геометрическая, полная). Теорема Гамильтона-Кэли.]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: закон инерции квадратичной формы.]]&lt;br /&gt;
&lt;br /&gt;
===билет №21=== &lt;br /&gt;
#[[Линейный оператор|Линейные операторы и их матричная запись. Примеры.]]&lt;br /&gt;
#[[Собственные векторы и собственные значения|Собственные векторы и собственные значения линейного оператора: существование, вычисление.]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: одновременное приведение пары квадратичных форм к сумме квадратов.]]&lt;br /&gt;
&lt;br /&gt;
===билет №22=== &lt;br /&gt;
#[[Пространство линейных операторов]]&lt;br /&gt;
#[[Кратности собственных чисел|Кратности собственных чисел (алгебраическая, геометрическая, полная). Теорема Гамильтона-Кэли]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: закон инерции квадратичной формы.]]&lt;br /&gt;
&lt;br /&gt;
===билет №23=== &lt;br /&gt;
#[[Алгебра|Алгебра. Примеры. Изоморфизм алгебр.]]&lt;br /&gt;
#[[Cпектральный анализ скалярного оператора|Cпектральный  анализ скалярного оператора: спектр,  диагональный вид матрицы, спектральные проекторы, спектральная теорема.]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: приведение к каноническому виду унитарным преобразованием.]]&lt;br /&gt;
&lt;br /&gt;
===билет №24=== &lt;br /&gt;
#[[Алгебра|Алгебра операторов  и матриц.]]&lt;br /&gt;
#[[Нильпотентные операторы|Нильпотентные операторы (определение, простейшие свойства). Жорданова клетка.]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: основные определения, приведение к каноническому виду методом Лагранжа.]]&lt;br /&gt;
&lt;br /&gt;
===билет №25=== &lt;br /&gt;
#[[Обратная матрица|Обратная матрица: критерий обратимости, метод Гаусса вычисления обратной матрицы.]]&lt;br /&gt;
#[[Инвариантные подпространства|Инварианты линейного оператора. Инвариантные подпространства.]]&lt;br /&gt;
#[[Эрмитовски сопряженный и эрмитов оператор|Приведение эрмитовой матрицы к диагональному виду унитарным преобразованием.]]&lt;br /&gt;
&lt;br /&gt;
===билет №26=== &lt;br /&gt;
#[[Обратная матрица|Обратная матрица: критерий обратимости,  вычисление обратной матрицы методом присоединенной матрицы.]]&lt;br /&gt;
#[[Минимальный полином и инвариантные подпространства|Минимальный полином и инвариантные подпространства. Спектральная теорема для линейного оператора произвольного вида.]]&lt;br /&gt;
#[[Унитарный и ортогональный операторы|Унитарный оператор: теорема о скалярном типе унитарного оператора, спектральная теорема.]]&lt;br /&gt;
&lt;br /&gt;
===билет №27=== &lt;br /&gt;
#[[Ядро и образ линейного  оператора|Ядро и образ линейного  оператора. Теорема о ядре и образе. Функции матриц и операторов.]]&lt;br /&gt;
#[[Ультраинвариантные подпространства]]&lt;br /&gt;
#[[Унитарный и ортогональный операторы|Унитарный и ортогональный операторы: основные определения и свойства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №28=== &lt;br /&gt;
#[[Обратный оператор|Обратный оператор. Критерий существования обратного оператора.]]&lt;br /&gt;
#[[Собственные векторы и собственные значения|Собственные векторы и собственные значения линейного оператора: основные определения и свойства.]]&lt;br /&gt;
#[[Эрмитовски сопряженный и эрмитов оператор|Эрмитов и самосопряженный операторы в евклидовом пространстве: спектральная теорема, минимальное свойство.]]&lt;br /&gt;
&lt;br /&gt;
===билет №29=== &lt;br /&gt;
#[[Замена базиса|Преобразование координат векторов  Х  и  Х* при  замене базиса.]]&lt;br /&gt;
#[[Спектральная теорема|Спектральная теорема и инварианты скалярного оператора. Тождество Кэли.]]&lt;br /&gt;
#[[Эрмитовски сопряженный и эрмитов оператор|Эрмитов и самосопряженный операторы в евклидовом пространстве: теоремы о скалярном типе эрмитова и самосопряженного оператора.]]&lt;br /&gt;
&lt;br /&gt;
===билет №30=== &lt;br /&gt;
#[[Замена базиса|Преобразование матрицы линейного оператора  А при  замене базиса. Преобразование подобия.]]&lt;br /&gt;
#[[Алгебра скалярных полиномов|Алгебра скалярных полиномов. Идеал.  Минимальный полином.]]&lt;br /&gt;
#[[Эрмитовски сопряженный и эрмитов оператор|Эрмитовски сопряженный и эрмитов оператор в евклидовом пространстве: основные определения и свойства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №31=== &lt;br /&gt;
#[[Обратная матрица|Обратная матрица: критерий обратимости, метод Гаусса вычисления обратной матрицы.]]&lt;br /&gt;
#[[Cпектральный анализ линейного оператора с простым спектром|Cпектральный  анализ линейного оператора с простым спектром: спектр,  диагональный вид матрицы, спектральные проекторы, спектральная теорема.]]&lt;br /&gt;
#[[Ковариантность и контравариантность|Ковариантные и контравариантные координаты вектора. Операции поднятия и  опускания индексов.]]&lt;br /&gt;
&lt;br /&gt;
===билет №32=== &lt;br /&gt;
#[[Независимость определителя оператора от базиса. Теорема умножения определителей.]]&lt;br /&gt;
#[[Спектральная теорема|Спектральная теорема и функциональное исчисление для скалярного оператора.]]&lt;br /&gt;
#[[Метрический тензор|Метрический тензор. Естественный изоморфизм евклидова и сопряженного ему пространств.]]&lt;br /&gt;
&lt;br /&gt;
===билет №33=== &lt;br /&gt;
#[[Тензор|Транспонирование тензора.]]&lt;br /&gt;
#[[Разложение линейного пространства в сумму подпространств. 2-я теорема о ядре и образе. Теорема о проекторах.]]&lt;br /&gt;
#[[Ортогональные системы векторов|Ортогональные системы векторов: коэффициенты Фурье, неравенство Бесселя, равенство  Парсеваля.]]&lt;br /&gt;
&lt;br /&gt;
===билет №34=== &lt;br /&gt;
#[[Определитель линейного оператора. Внешняя степень оператора.]]&lt;br /&gt;
#[[Нильпотентные операторы|Структура нильпотентного оператора. Базис Жордана (обзор).]]&lt;br /&gt;
#[[Ортогональная сумма подпространств. Ортогональный проектор. Задача о перпендикуляре|Задача о перпендикуляре.]]&lt;br /&gt;
&lt;br /&gt;
===билет №35=== &lt;br /&gt;
#[[Независимость определителя оператора от базиса. Теорема умножения определителей.]]&lt;br /&gt;
#[[Алгебра операторных полиномов|Алгебра операторных полиномов. Минимальный полином линейного оператора.]]&lt;br /&gt;
#[[Ортогональная сумма подпространств. Ортогональный проектор. Задача о перпендикуляре|Ортогональная сумма подпространств. Ортогональный проектор.]]&lt;br /&gt;
&lt;br /&gt;
===билет №36=== &lt;br /&gt;
#[[Тензор|Тензоры (ковариантность, независимое от ПЛФ определение). Пространство тензоров.]]&lt;br /&gt;
#[[Жорданова форма матрицы линейного оператора]]&lt;br /&gt;
#[[Ортогональность|Ортогональность. Ортогональный базис. Процесс ортогонализации Грама-Шмидта.]]&lt;br /&gt;
&lt;br /&gt;
===билет №37=== &lt;br /&gt;
#[[Замена базиса|Преобразование матрицы линейного оператора  А при  замене базиса. Преобразование подобия.]]&lt;br /&gt;
#[[Собственные векторы и собственные значения|Собственные векторы и собственные значения линейного оператора: существование, вычисление.]]&lt;br /&gt;
#[[Комплексное евклидово пространство|Комплексное евклидово пространство. Основные неравенства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №38=== &lt;br /&gt;
#[[Ядро и образ линейного оператора|Ядро и образ линейного  оператора. Теорема о ядре и образе. Функции матриц и операторов.]]&lt;br /&gt;
#[[Cпектральный анализ скалярного оператора|Cпектральный  анализ скалярного оператора: спектр,  диагональный вид матрицы, спектральные проекторы, спектральная теорема.]]&lt;br /&gt;
#[[Вещественное евклидово и псевдоевклидово пространство|Вещественное евклидово и псевдоевклидово пространство. Основные неравенства.]]&lt;br /&gt;
&lt;br /&gt;
===билет №39=== &lt;br /&gt;
#[[Тензор|Транспонирование тензора.]]&lt;br /&gt;
#[[Алгебра скалярных полиномов|Алгебра скалярных полиномов. Идеал. Минимальный полином.]]&lt;br /&gt;
#[[Метрические, нормированные и евклидовы пространства]]&lt;br /&gt;
&lt;br /&gt;
===билет №40=== &lt;br /&gt;
#[[Тензор|Свертка   тензора.]]&lt;br /&gt;
#[[Кратности собственных чисел|Кратности собственных чисел (алгебраическая, геометрическая, полная). Теорема Гамильтона-Кэли.]]&lt;br /&gt;
#[[Квадратичные формы|Квадратичные формы: закон инерции квадратичной формы.]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B,_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B4%D0%B2%D1%83%D1%85%D1%81%D1%82%D0%B5%D0%BA%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_%D0%9C%D0%A2&amp;diff=83301</id>
		<title>Стековые машины, эквивалентность двухстековой машины МТ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B,_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B4%D0%B2%D1%83%D1%85%D1%81%D1%82%D0%B5%D0%BA%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_%D0%9C%D0%A2&amp;diff=83301"/>
				<updated>2022-09-01T04:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Стековая машина является обобщением [[Детерминированные автоматы с магазинной памятью | детерминированных МП-автоматов]] с использованием нескольких [[Стек | стеков]] вместо одного. &amp;lt;br&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-cтековой машиной называется набор A=&amp;lt;tex&amp;gt;\langle\Sigma, \Gamma, Q, s\in Q, T \subset Q, z_0 \in \Gamma, \delta : Q \times \Sigma \cup \{\varepsilon\} \times \Gamma^k \rightarrow \cal P &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (Q \times (\Gamma^*)^k)\rangle&amp;lt;/tex&amp;gt;, где&lt;br /&gt;
*&amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} входной алфавит на ленте;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} стековый алфавит;&lt;br /&gt;
*&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} стартовое состояние автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; {{---}} маркер дна стека;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt; {{---}} функция переходов.&lt;br /&gt;
}}&lt;br /&gt;
[[Изображение:PDAk.png|620px|thumb|center|Рис. 1. k-стековая машина]]&lt;br /&gt;
На рис. 1 изображена '''k-стековая машина'''. С ленты последовательно считываются символы входного алфавита (&amp;lt;tex&amp;gt;c_i&amp;lt;/tex&amp;gt; {{---}} текущий считываемый символ). В каждом стеке с вершины снимается символ &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;, вместо него помещается строка &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; таким образом, чтобы первый символ строки находился на вершине стека, и делается переход в автомате в зависимости от считанного с ленты символа &amp;lt;tex&amp;gt;c_i&amp;lt;/tex&amp;gt; и снятых со стеков верхних значений &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;. Возможен также и &amp;lt;tex&amp;gt;\varepsilon\&amp;lt;/tex&amp;gt;-переход.&lt;br /&gt;
&lt;br /&gt;
== Эквивалентность двухстековой машины машине Тьюринга ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; допускается [[Машина Тьюринга | машиной Тьюринга]] тогда и только тогда, когда он допускается двухстековой машиной.&lt;br /&gt;
|proof=&lt;br /&gt;
Для упрощения доказательства без умаления общности предположим, что вход для двухстековой машины заканчивается специальным символом &amp;lt;tex&amp;gt;\$&amp;lt;/tex&amp;gt;, которого нет в исходном алфавите. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Изображение:SM.png|400px|thumb|center|Рис. 2. Представление ленты МТ двумя стеками и наоборот]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что если язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; допускается машиной Тьюринга, то он допускается двухстековой машиной.&lt;br /&gt;
&lt;br /&gt;
Мы будем имитировать ленту МТ двумя стеками (Рис. 2). В первом стеке будет хранится кусок ленты слева от положения головки, во втором стеке {{---}} справа, включая текущий символ. Разумеется, куски ленты хранятся без бесконечных цепочек пробелов, окружающих значащие символы ленты. &lt;br /&gt;
&lt;br /&gt;
Необходимо инициализировать стеки для того, чтобы их содержимое корректно отражало содержимое ленты МТ, поэтому строящаяся нами двухстековая машина сначала читает весь вход до конца (он помечен маркером &amp;lt;tex&amp;gt;\$&amp;lt;/tex&amp;gt;) и кладёт каждый новый поступивший символ на первый стек. Затем она перебрасывает все значения из первого стека во второй, таким образом получив пустой первый стек (что соответствует бесконечной цепочке пробелов слева от головки МТ) и второй стек, содержащий весь вход (что соответствует положению всех значащих символов ленты МТ не левее головки МТ). После этого машина перейдёт в начальное (имитируемое) состояние МТ. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь в каждый момент имитации мы будем знать текущий прочтённый головкой символ (им является вершина второго стека), и, соответственно, переход в МТ. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Действие &amp;quot;&amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt;&amp;quot; МТ (сдвинуть головку влево) будем имитировать простым перекидыванием вершины первого стека на второй. Стоит обратить внимание на случай, когда первый стек перед действием был пуст, что говорило бы нам о том, что слева от головки бесконечная цепочка из пробелов. Поэтому такой переход имитируется добавлением на второй стек символа пробела и оставлением первого стека пустым. Аналогично делаются «сдвинуть головку вправо» и «остаться на месте». &lt;br /&gt;
&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;\Leftarrow&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Этот пункт доказательства аналогичен предыдущему. Содержимое двух стеков отображается лентой МТ так же, как и в предыдущем пункте (рис. 2). Снятие, например, с первого стека символа соответствует сдвигу куска ленты, соответствующего второму стеку, влево на одну позицию, что прекрасно умеет делать МТ. Положить символ на этот стек соответствует сдвигу куска ленты, соответствующего второму стеку, вправо на одну позицию, записи этого символа на место начального положения головки и сдвигу головки вправо на одну позицию (действие &amp;quot;положить цепочку на стек&amp;quot; аналогично последовательности действий &amp;quot;положить на стек один символ&amp;quot;). Операции со вторым стеком имитируются аналогично.&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;
== Источники информации ==&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Вычислительные формализмы]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B2_%D0%B3%D1%80%D0%B0%D1%84%D0%B5&amp;diff=83300</id>
		<title>NL-полнота задачи о достижимости в графе</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B2_%D0%B3%D1%80%D0%B0%D1%84%D0%B5&amp;diff=83300"/>
				<updated>2022-09-01T04:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Формулировка задачи==&lt;br /&gt;
Даны ориентированный граф &amp;lt;tex&amp;gt; G = \langle V, E \rangle &amp;lt;/tex&amp;gt; и две вершины &amp;lt;tex&amp;gt; s, t&amp;lt;/tex&amp;gt; в нем. Необходимо проверить, правда ли, что в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Эту задачу принято называть &amp;lt;tex&amp;gt; st-connectivity &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; STCON &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
Задача &amp;lt;tex&amp;gt; STCON &amp;lt;/tex&amp;gt; [[NL-полнота|NL-полна]].&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
Для доказательства [[NL-полнота|NL-полноты]] необходимо показать, что эта задача NL-трудная и принадлежит [[NL|классу NL]].&lt;br /&gt;
&lt;br /&gt;
=== Доказательство принадлежности задачи STCON классу NL ===&lt;br /&gt;
&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &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(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
1. Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходит в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)&lt;br /&gt;
&lt;br /&gt;
2. Проверяет, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
&lt;br /&gt;
3. Отдельно считает количество пройденных вершин. Как только это число превышает количество вершин в графе, то алгоритм возвращает FALSE, так как посетил некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство NL-трудности задачи STCON ===&lt;br /&gt;
Необходимо показать, что любая задача из класса [[NL]] сводится к задаче STCON с использованием не более, чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из [[NL]] построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи STCON для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык L из [[NL]] использует не более, чем логарифмическое количество ячеек на рабочей ленте и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Мгновенным описанием машины Тьюринга считается ее внутреннее состояние, позиция головки на ленте и содержимое рабочей ленты. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга не более, чем некоторое конечное число), ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова, из языка [[L]], то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А, если для некоторого слова не из [[L]] в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &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; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(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;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B2%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C&amp;diff=83299</id>
		<title>Условная вероятность</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B2%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C&amp;diff=83299"/>
				<updated>2022-09-01T04:40:12Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|id = def1&lt;br /&gt;
|definition =&lt;br /&gt;
'''Условная вероятность''' (англ. ''conditional probability''): Пусть задано [[вероятностное пространство, элементарный исход, событие|вероятностное пространство]] &amp;lt;tex&amp;gt;(\Omega, P)&amp;lt;/tex&amp;gt;. Условной вероятностью события &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; при условии, что произошло событие &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, называется число&lt;br /&gt;
&amp;lt;tex&amp;gt;{P}(A \mid B) = &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\dfrac{{P}(A\cap B)}{{P}(B)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A, B \subset \Omega&amp;lt;/tex&amp;gt;.}}&lt;br /&gt;
== Замечания ==&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;tex&amp;gt;{P}(B) = 0&amp;lt;/tex&amp;gt;, то изложенное определение условной вероятности неприменимо.&lt;br /&gt;
* Прямо из определения очевидно следует, что вероятность произведения двух событий равна:&lt;br /&gt;
: &amp;lt;tex&amp;gt;{P}(A\cap B) = {P}(A \mid B) {P}(B)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Если события &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; [[Независимые события|независимые]], то &amp;lt;tex&amp;gt;{P}(A \mid B) = &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\dfrac{{P}(A\cap B)}{{P}(B)} = {P}(A)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть имеется &amp;lt;tex&amp;gt;12&amp;lt;/tex&amp;gt; шариков, из которых &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; {{---}} чёрные, а &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt; {{---}} белые. Пронумеруем чёрные шарики числами от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;, а белые {{---}} от &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;12&amp;lt;/tex&amp;gt;. Случайным образом из мешка достаётся шарик. Требуется посчитать вероятность того, что шарик чёрный, если известно, что он имеет чётный номер.&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; событие &amp;quot;достали чёрный шар&amp;quot; и за &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; событие &amp;quot;достали шар с чётным номером&amp;quot;. Тогда &amp;lt;tex&amp;gt;P(B) = \dfrac{1}{2}&amp;lt;/tex&amp;gt;, так как ровно половина шариков имеют чётный номер, а &amp;lt;tex&amp;gt;P(A \cap B) = \dfrac{2}{12} = \dfrac{1}{6}&amp;lt;/tex&amp;gt;, так как только два шарика из двенадцати являются чёрными и имеют чётным номер одновременно.&lt;br /&gt;
&lt;br /&gt;
Тогда по определению вероятность случайно вытащенного шарика с чётным номером оказаться чёрным равна &amp;lt;tex&amp;gt;{P}(A \mid B) = \dfrac{{P}(A\cap B)}{{P}(B)} = \dfrac{1}{3}&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;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Условная_вероятность Википедия {{---}} Условная вероятность]&lt;br /&gt;
*''Пратусевич М.Я., Столбов К.М., Головин А.Н.'' Алгебра и начала математического анализа, стр. 284.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория вероятности]]&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2_Phase_Commit&amp;diff=83298</id>
		<title>2 Phase Commit</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2_Phase_Commit&amp;diff=83298"/>
				<updated>2022-09-01T04:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;80.82.78.13: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;color: red; background-color: black; font-size: 56px; width: 800px;&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|'''НЕТ ВОЙНЕ'''&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.&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;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.&lt;br /&gt;
|-style=&amp;quot;font-size: 16px;&amp;quot;&lt;br /&gt;
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Параллельное программирование]]&lt;br /&gt;
'''Алгоритм двухфазного коммита''' — классический централизованный оптимистичный алгоритм распределённого консенсуса из баз данных для подтверждения [[Транзакции в распределённых системах|распределённых транзакций]].&lt;br /&gt;
&lt;br /&gt;
После того, как мы завершили транзакцию, её надо атомарно подтвердить на всех участниках (participants).&lt;br /&gt;
У каждой транзакции есть выделенный координатор (transaction coordinator).&lt;br /&gt;
Алгоритм работает в две фазы:&lt;br /&gt;
&lt;br /&gt;
# '''Запрос (request)''': координатор спрашивает каждого участника: &amp;quot;готов ли ты ''очень быстро и гарантированно'' завершить транзакцию?&amp;quot;. Если кто-нибудь ответил &amp;quot;нет&amp;quot;, то отменяем транзакцию. Если кто-то отвечает &amp;quot;да&amp;quot;, то он должен уметь обеспечить завершение транзакции даже если упадёт и поднимается (например, все данные уже в журнале).&lt;br /&gt;
# '''Завершение''': координатор принимает решение о закреплении (commit) или отмене (rollback) транзакции и записывает его в свою надёжную память, после чего рассылает всем решение. После рассылки можно сообщить о фиксации транзакции, подтверждения от участников ждать не нужно (но тогда может быть проблема с тем, что следующие чтения из СУБД будут возвращать старые данные, пока не закоммитили).&lt;br /&gt;
&lt;br /&gt;
При этом проблемы двух генералов на практике обычно нет: после того, как координатор принял решение о транзакции, он будет его доносить до всех любопытствующих узлов.&lt;br /&gt;
&lt;br /&gt;
Всего на коммит требуется $3N$ сообщений ($N$ — количество участников транзакции) и задержка порядка $3\cdot RTT$ (round-trip time).&lt;br /&gt;
&lt;br /&gt;
== Ограничения ==&lt;br /&gt;
Так как это алгоритм консенсуса, к нему применима [[Теорема Фишера-Линча-Патерсона (FLP)|FLP]].&lt;br /&gt;
&lt;br /&gt;
Если у нас есть отказы узлов или связи, то 2PC будет ждать, пока связь не восстановится:&lt;br /&gt;
* Если отказ произошёл на первой фазе, то координатор может отменить транзакцию по таймауту.&lt;br /&gt;
* После того, как координатор перешёл на вторую фазу, он не имеет права успокоиться, пока не донесёт своё решение до всех узлов.&lt;br /&gt;
* Если узел отказал, а потом восстановился, то он спрашивает координатора, какое решение было принято. Если &amp;quot;да&amp;quot;, то обязан закрепить транзакцию (т.е. координатор должен хранить все подтверждённые транзакции, которые подтвердили не все узлы).&lt;br /&gt;
* Если отказал координатор, то, если узел ответил &amp;quot;да&amp;quot;, он не имеет права забить на транзакцию, пока координатор не восстановится.&lt;br /&gt;
&lt;br /&gt;
Но алгоритм классический, простой, на практике неплохо работает, потому что сложно только с отказами координатора и отказами узлов на второй фазе (когда решение о коммите уже принято), а такое бывает не так часто.&lt;/div&gt;</summary>
		<author><name>80.82.78.13</name></author>	</entry>

	</feed>