<?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=178.66.50.23&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=178.66.50.23&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/178.66.50.23"/>
		<updated>2026-06-10T19:26:48Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19002</id>
		<title>Двоичная куча</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19002"/>
				<updated>2012-03-08T20:52:18Z</updated>
		
		<summary type="html">&lt;p&gt;178.66.50.23: /* Восстановление свойств кучи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двоичная куча''' или '''пирамида''' — такое двоичное дерево, для которого выполнены три условия:&lt;br /&gt;
&lt;br /&gt;
* Значение (ключ) в любой вершине не больше (если куча для минимума), чем значения её потомков.&lt;br /&gt;
&lt;br /&gt;
* Полное двоичное дерево, у которого могут отсутствовать некоторые листья последнего слоя.&lt;br /&gt;
&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[1]&amp;lt;/tex&amp;gt; — элемент в корне, а потомками элемента &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;A[2i]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A[2i+1]&amp;lt;/tex&amp;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; — количество узлов дерева.&lt;br /&gt;
&lt;br /&gt;
Кучи бывают как для минимума (когда предок не больше детей), так и для максимума (когда предок не меньше детей).&lt;br /&gt;
&lt;br /&gt;
==Базовые процедуры==&lt;br /&gt;
&lt;br /&gt;
===Восстановление свойств кучи===&lt;br /&gt;
&lt;br /&gt;
Если в куче изменяется один из элементов, то она может перестать удовлетворять свойству упорядоченности. Для восстановления этого свойства служат процедуры '''Sift_Down''' (просеивание вниз) и '''Sift_Up''' (просеивание вверх). Если значение измененного элемента увеличивается, то свойства кучи восстанавливаются функцией '''Sift_Down(i)'''.&lt;br /&gt;
Работа процедуры : если &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент меньше, чем его сыновья, всё поддерево уже является кучей, и делать ничего не надо. В противном случае меняем местами &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент с наименьшим из его сыновей, после чего выполняем '''Sift_Down()''' для этого сына.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Down(i)&lt;br /&gt;
  left = 2 * i // левый сын&lt;br /&gt;
  right = 2 * i + 1 // правый сын&lt;br /&gt;
  // heap_size - количество элементов в куче&lt;br /&gt;
  If (left ≤ A.heap_size) and (A[left] &amp;lt; A[i])  &lt;br /&gt;
    min = left&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (right ≤ A.heap_size) and (A[right] &amp;lt; A[i])  &lt;br /&gt;
    min = right&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (min &amp;lt;&amp;gt; i) &lt;br /&gt;
    Поменять A[i] и A[minimum]&lt;br /&gt;
    Sift_Down(min)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией '''Sift_Up(i)'''.&lt;br /&gt;
&lt;br /&gt;
Работа процедуры: если элемент больше своего отца, условие 1 соблюдено для всего дерева, и больше ничего делать не нужно. Иначе, мы меняем местами его с отцом. После чего выполняем '''Sift_Up''' для этого отца. Иными словами, слишком большой элемент всплывает наверх.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Up(i)&lt;br /&gt;
  If (A[i] &amp;lt; A[i / 2])&lt;br /&gt;
    Поменять A[i] и A[i / 2]&lt;br /&gt;
    Sift_Up(i / 2)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Извлечение минимального элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет извлечение минимального элемента из кучи за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Извлечение выполняется в четыре этапа:&lt;br /&gt;
# Значение корневого элемента (он и является минимальным) сохраняется для последующего возврата.&lt;br /&gt;
# Последний элемент копируется в корень, после чего удаляется из кучи.&lt;br /&gt;
# Вызывается '''Sift_Down(i)''' для корня.&lt;br /&gt;
# Сохранённый элемент возвращается.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
extract_min()&lt;br /&gt;
  min = A[1]&lt;br /&gt;
  A[1] = A[A.heap_size]&lt;br /&gt;
  A.heap_size = A.heap_size - 1&lt;br /&gt;
  Sift_Down(1)&lt;br /&gt;
  return min&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление нового элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет добавление элемента в кучу за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Добавление произвольного элемента в конец кучи, и восстановление свойства упорядоченности с помощью &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Insert(key)&lt;br /&gt;
  A.heap_size = A.heap_size + 1&lt;br /&gt;
  A[A.heap_size] = key&lt;br /&gt;
  Sift_Up(A.heap_size)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Min-heap Двоичная куча]&lt;/div&gt;</summary>
		<author><name>178.66.50.23</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19001</id>
		<title>Двоичная куча</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19001"/>
				<updated>2012-03-08T20:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;178.66.50.23: /* Восстановление свойств кучи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двоичная куча''' или '''пирамида''' — такое двоичное дерево, для которого выполнены три условия:&lt;br /&gt;
&lt;br /&gt;
* Значение (ключ) в любой вершине не больше (если куча для минимума), чем значения её потомков.&lt;br /&gt;
&lt;br /&gt;
* Полное двоичное дерево, у которого могут отсутствовать некоторые листья последнего слоя.&lt;br /&gt;
&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[1]&amp;lt;/tex&amp;gt; — элемент в корне, а потомками элемента &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;A[2i]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A[2i+1]&amp;lt;/tex&amp;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; — количество узлов дерева.&lt;br /&gt;
&lt;br /&gt;
Кучи бывают как для минимума (когда предок не больше детей), так и для максимума (когда предок не меньше детей).&lt;br /&gt;
&lt;br /&gt;
==Базовые процедуры==&lt;br /&gt;
&lt;br /&gt;
===Восстановление свойств кучи===&lt;br /&gt;
&lt;br /&gt;
Если в куче изменяется один из элементов, то она может перестать удовлетворять свойству упорядоченности. Для восстановления этого свойства служат процедуры '''Sift_Down''' (просеивание вниз) и '''Sift_Up''' (просеивание вверх). Если значение измененного элемента увеличивается, то свойства кучи восстанавливаются функцией '''Sift_Down(i)'''.&lt;br /&gt;
Работа процедуры : если &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент меньше, чем его сыновья, всё поддерево уже является кучей, и делать ничего не надо. В противном случае меняем местами &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент с наименьшим из его сыновей, после чего выполняем '''Sift_Down()''' для этого сына.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Down(i)&lt;br /&gt;
  left = 2 * i // левый сын&lt;br /&gt;
  right = 2 * i + 1 // правый сын&lt;br /&gt;
  // heap_size - количество элементов в куче&lt;br /&gt;
  If (left ≤ A.heap_size) and (A[left] &amp;lt; A[i])  &lt;br /&gt;
    min = left&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (right ≤ A.heap_size) and (A[right] &amp;lt; A[i])  &lt;br /&gt;
    min = right&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (min &amp;lt;&amp;gt; i) &lt;br /&gt;
    Поменять A[i] и A[minimum]&lt;br /&gt;
    Sift_Down(min)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией '''Sift_Up(i)'''.&lt;br /&gt;
&lt;br /&gt;
Работа процедуры : если элемент больше своего отца, условие 1 соблюдено для всего дерева, и больше ничего делать не нужно. Иначе, мы меняем местами его с отцом. После чего выполняем '''Sift_Up''' для этого отца. Иными словами, слишком большой элемент всплывает наверх.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Up(i)&lt;br /&gt;
  If (A[i] &amp;lt; A[i / 2])&lt;br /&gt;
    Поменять A[i] и A[i / 2]&lt;br /&gt;
    Sift_Up(i / 2)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Извлечение минимального элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет извлечение минимального элемента из кучи за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Извлечение выполняется в четыре этапа:&lt;br /&gt;
# Значение корневого элемента (он и является минимальным) сохраняется для последующего возврата.&lt;br /&gt;
# Последний элемент копируется в корень, после чего удаляется из кучи.&lt;br /&gt;
# Вызывается '''Sift_Down(i)''' для корня.&lt;br /&gt;
# Сохранённый элемент возвращается.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
extract_min()&lt;br /&gt;
  min = A[1]&lt;br /&gt;
  A[1] = A[A.heap_size]&lt;br /&gt;
  A.heap_size = A.heap_size - 1&lt;br /&gt;
  Sift_Down(1)&lt;br /&gt;
  return min&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление нового элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет добавление элемента в кучу за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Добавление произвольного элемента в конец кучи, и восстановление свойства упорядоченности с помощью &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Insert(key)&lt;br /&gt;
  A.heap_size = A.heap_size + 1&lt;br /&gt;
  A[A.heap_size] = key&lt;br /&gt;
  Sift_Up(A.heap_size)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Min-heap Двоичная куча]&lt;/div&gt;</summary>
		<author><name>178.66.50.23</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19000</id>
		<title>Обсуждение:Двоичная куча</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=19000"/>
				<updated>2012-03-08T20:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;178.66.50.23: /* Обсуждение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Замечания ==&lt;br /&gt;
&lt;br /&gt;
{{tick | ticked = 1}} Кучи бывают не только для минимума, но и для максимума.&lt;br /&gt;
{{tick}} Привести оформление к единому [[Обсуждение:Дискретная математика и алгоритмы |стилю]].&lt;br /&gt;
{{tick}} Мелкие ошибки, вроде пропущенного пробела.&lt;br /&gt;
{{tick}} Добавить рисунок&lt;br /&gt;
{{tick}} Оформить ссылки&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
&lt;br /&gt;
: Плохо определять двоичную кучу как двоичное дерево без определения двоичного дерева? --[[Участник:Rybak|Андрей Рыбак]] 04:13, 7 февраля 2012 (MSK)&lt;br /&gt;
Нужна отдельная статья для двоичного дерева (Редактор)&lt;/div&gt;</summary>
		<author><name>178.66.50.23</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=18999</id>
		<title>Обсуждение:Двоичная куча</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=18999"/>
				<updated>2012-03-08T20:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;178.66.50.23: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Замечания ==&lt;br /&gt;
&lt;br /&gt;
{{tick | ticked = 1}} Кучи бывают не только для минимума, но и для максимума.&lt;br /&gt;
{{tick}} Привести оформление к единому [[Обсуждение:Дискретная математика и алгоритмы |стилю]].&lt;br /&gt;
{{tick}} Мелкие ошибки, вроде пропущенного пробела.&lt;br /&gt;
{{tick}} Добавить рисунок&lt;br /&gt;
{{tick}} Оформить ссылки&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
&lt;br /&gt;
: Плохо определять двоичную кучу как двоичное дерево без определения двоичного дерева? --[[Участник:Rybak|Андрей Рыбак]] 04:13, 7 февраля 2012 (MSK)&lt;/div&gt;</summary>
		<author><name>178.66.50.23</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=18998</id>
		<title>Двоичная куча</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0&amp;diff=18998"/>
				<updated>2012-03-08T20:48:31Z</updated>
		
		<summary type="html">&lt;p&gt;178.66.50.23: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двоичная куча''' или '''пирамида''' — такое двоичное дерево, для которого выполнены три условия:&lt;br /&gt;
&lt;br /&gt;
* Значение (ключ) в любой вершине не больше (если куча для минимума), чем значения её потомков.&lt;br /&gt;
&lt;br /&gt;
* Полное двоичное дерево, у которого могут отсутствовать некоторые листья последнего слоя.&lt;br /&gt;
&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[1]&amp;lt;/tex&amp;gt; — элемент в корне, а потомками элемента &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;A[2i]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A[2i+1]&amp;lt;/tex&amp;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; — количество узлов дерева.&lt;br /&gt;
&lt;br /&gt;
Кучи бывают как для минимума (когда предок не больше детей), так и для максимума (когда предок не меньше детей).&lt;br /&gt;
&lt;br /&gt;
==Базовые процедуры==&lt;br /&gt;
&lt;br /&gt;
===Восстановление свойств кучи===&lt;br /&gt;
&lt;br /&gt;
Если в куче изменяется один из элементов, то она может перестать удовлетворять свойству упорядоченности. Для восстановления этого свойства служат процедуры '''Sift_Down''' (просеивание вниз) и '''Sift_Up''' (просеивание вверх). Если значение измененного элемента увеличивается, то свойства кучи восстанавливаются функцией '''Sift_Down(i)'''.&lt;br /&gt;
Работа процедуры : если &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент меньше, чем его сыновья, всё поддерево уже является кучей, и делать ничего не надо. В противном случае меняем местами &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент с наименьшим из его сыновей, после чего выполняем '''Sift_Down()''' для этого сына.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Down(i)&lt;br /&gt;
  left = 2 * i // левый сын&lt;br /&gt;
  right = 2 * i + 1 // правый сын&lt;br /&gt;
  // heap_size - количество элементов в куче&lt;br /&gt;
  If (left ≤ A.heap_size) and (A[left] &amp;lt; A[i])  &lt;br /&gt;
    min = left&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (right ≤ A.heap_size) and (A[right] &amp;lt; A[i])  &lt;br /&gt;
    min = right&lt;br /&gt;
  else&lt;br /&gt;
    min = i&lt;br /&gt;
  If (min &amp;lt;&amp;gt; i) &lt;br /&gt;
    Поменять A[i] и A[minimum]&lt;br /&gt;
    Sift_Down(min)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией'''Sift_Up(i)'''.&lt;br /&gt;
&lt;br /&gt;
Работа процедуры : если элемент больше своего отца, условие 1 соблюдено для всего дерева, и больше ничего делать не нужно. Иначе, мы меняем местами его с отцом. После чего выполняем '''Sift_Up''' для этого отца. Иными словами, слишком большой элемент всплывает наверх.&lt;br /&gt;
Процедура выполняется за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Sift_Up(i)&lt;br /&gt;
  If (A[i] &amp;lt; A[i / 2])&lt;br /&gt;
    Поменять A[i] и A[i / 2]&lt;br /&gt;
    Sift_Up(i / 2)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Извлечение минимального элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет извлечение минимального элемента из кучи за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Извлечение выполняется в четыре этапа:&lt;br /&gt;
# Значение корневого элемента (он и является минимальным) сохраняется для последующего возврата.&lt;br /&gt;
# Последний элемент копируется в корень, после чего удаляется из кучи.&lt;br /&gt;
# Вызывается '''Sift_Down(i)''' для корня.&lt;br /&gt;
# Сохранённый элемент возвращается.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
extract_min()&lt;br /&gt;
  min = A[1]&lt;br /&gt;
  A[1] = A[A.heap_size]&lt;br /&gt;
  A.heap_size = A.heap_size - 1&lt;br /&gt;
  Sift_Down(1)&lt;br /&gt;
  return min&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление нового элемента===&lt;br /&gt;
&lt;br /&gt;
Выполняет добавление элемента в кучу за время &amp;lt;tex&amp;gt;O(\log{N})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Добавление произвольного элемента в конец кучи, и восстановление свойства упорядоченности с помощью &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Insert(key)&lt;br /&gt;
  A.heap_size = A.heap_size + 1&lt;br /&gt;
  A[A.heap_size] = key&lt;br /&gt;
  Sift_Up(A.heap_size)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Min-heap Двоичная куча]&lt;/div&gt;</summary>
		<author><name>178.66.50.23</name></author>	</entry>

	</feed>