<?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=Flanir</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=Flanir"/>
		<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/Flanir"/>
		<updated>2026-08-02T03:07:34Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45063</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45063"/>
				<updated>2015-03-21T09:57:42Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Сложность */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt; \mathrm{siftDown} &amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&lt;br /&gt;
&lt;br /&gt;
Постройка кучи занимает &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Почти упорядоченный массив сортировка вставками может отсортировать &amp;lt;tex&amp;gt; O(n)&amp;lt;/tex&amp;gt;, но в худшем случае за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом в худшем случае сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;, а в лучшем &amp;lt;tex&amp;gt;O(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;
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Wikipedia {{---}} Heapsort]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort  Wikipedia {{---}} JSort]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Хабрахабр {{---}} Описание сортировки кучей и JSort]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45062</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45062"/>
				<updated>2015-03-21T09:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt; \mathrm{siftDown} &amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^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;
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Wikipedia {{---}} Heapsort]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort  Wikipedia {{---}} JSort]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Хабрахабр {{---}} Описание сортировки кучей и JSort]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45061</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45061"/>
				<updated>2015-03-21T09:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt; \mathrm{siftDown} &amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45060</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45060"/>
				<updated>2015-03-21T09:38:36Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt; \mathrm{siftDown} &amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45059</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45059"/>
				<updated>2015-03-21T09:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Сложность */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt; \mathrm{siftDown} &amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45058</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45058"/>
				<updated>2015-03-21T09:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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; \mathrm{buildHeap(A)} &amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt; \mathrm{siftDown(A, i, len)} &amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''fun''' heapsort(A : '''list &amp;lt;T&amp;gt;''')&lt;br /&gt;
    buildHeap(A);&lt;br /&gt;
    heapSize = A.size;&lt;br /&gt;
    '''for''' i = 0 '''to''' n - 2&lt;br /&gt;
      swap(A[0], A[n - 1 - i]);&lt;br /&gt;
      heapSize--;&lt;br /&gt;
      siftDown(A, 0, heap_size);&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt;sift\_down&amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45057</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45057"/>
				<updated>2015-03-21T09:25:34Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt; \mathrm{siftDown(0)} &amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt; \mathrm{heapSize} &amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt; \mathrm{heapSize}  &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;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;build\_heap(A)&amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt;sift\_down(A, i, len)&amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
heapsort(A)&lt;br /&gt;
  build_heap(A);&lt;br /&gt;
  heap_size = A.size;&lt;br /&gt;
  for i = 0 to n - 2&lt;br /&gt;
    swap(A[0], A[n - 1 - i]);&lt;br /&gt;
    heap_size--;&lt;br /&gt;
    sift_down(A, 0, heap_size);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt;sift\_down&amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45056</id>
		<title>Сортировка кучей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D1%83%D1%87%D0%B5%D0%B9&amp;diff=45056"/>
				<updated>2015-03-21T09:17:13Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. ''Heapsort'') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это неустойчивый алгоритм сортировки с временем работы &amp;lt;tex&amp;gt;O(n\log{n})&amp;lt;/tex&amp;gt; , где &amp;lt;tex&amp;gt;n&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;
Необходимо отсортировать массив &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;O(n)&amp;lt;/tex&amp;gt; невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, он встанет на свое место. Далее вызовем процедуру &amp;lt;tex&amp;gt;sift\_down(0)&amp;lt;/tex&amp;gt;, предварительно уменьшив &amp;lt;tex&amp;gt;heap\_size&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Она за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt; просеет &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с &amp;lt;tex&amp;gt;A[0]&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;A[n - 2]&amp;lt;/tex&amp;gt;, а элемент &amp;lt;tex&amp;gt;A[n-1]&amp;lt;/tex&amp;gt; находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с &amp;lt;tex&amp;gt;A[n - 1]&amp;lt;/tex&amp;gt;, а с &amp;lt;tex&amp;gt;A[n-2]&amp;lt;/tex&amp;gt;. Делая аналогичные действия, пока &amp;lt;tex&amp;gt;heap\_size&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;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;build\_heap(A)&amp;lt;/tex&amp;gt; - процедура, которая строит из передаваемого массива невозрастающую кучу в этом же массиве; &amp;lt;tex&amp;gt;sift\_down(A, i, len)&amp;lt;/tex&amp;gt; {{---}} процедура, которая просеивает вниз элемент &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; в куче из &amp;lt;tex&amp;gt;len&amp;lt;/tex&amp;gt; элементов, находящихся в начале массива &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
heapsort(A)&lt;br /&gt;
  build_heap(A);&lt;br /&gt;
  heap_size = A.size;&lt;br /&gt;
  for i = 0 to n - 2&lt;br /&gt;
    swap(A[0], A[n - 1 - i]);&lt;br /&gt;
    heap_size--;&lt;br /&gt;
    sift_down(A, 0, heap_size);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сложность ==&lt;br /&gt;
Операция &amp;lt;tex&amp;gt;sift\_down&amp;lt;/tex&amp;gt; работает за &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;. Всего цикл выполняется &amp;lt;tex&amp;gt;(n - 1)&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;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:heap1.png|155px|thumb|Строим кучу]]&lt;br /&gt;
 |[[Файл:heap2.png|155px|thumb|Первый проход]]&lt;br /&gt;
 |[[Файл:heap3.png|155px|thumb|Строим новую кучу]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Файл:heap4.png|155px|thumb|Второй проход]]&lt;br /&gt;
 |[[Файл:heap5.png|155px|thumb|Третий проход]]&lt;br /&gt;
 |[[Файл:heap6.png|155px|thumb|Четвертый проход]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Пусть дана последовательность из &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; элементов &amp;lt;tex&amp;gt;3, 2, 4, 1, 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Массив&lt;br /&gt;
!style=&amp;quot;background-color:#EEE&amp;quot;| Описание шага&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 5 3 4 1 2&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из исходного массива &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Первый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 3 4 1 '''5'''&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и последний элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''4''' 3 2 1 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых четырех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Второй проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' 3 2 '''4''' 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и четвертый элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''3''' 1 2 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из первых трех элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Третий проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 '''3''' 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и третий элементы &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''2''' 1 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Строим кучу из двух элементов&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|''Четвертый проход''&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| '''1''' '''2''' 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Меняем местами первый и второй элементы  &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| 1 2 3 4 5&lt;br /&gt;
|style=&amp;quot;background-color:#FFF;padding:2px 10px&amp;quot;| Массив отсортирован&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= JSort =&lt;br /&gt;
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').&lt;br /&gt;
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.&lt;br /&gt;
Досортировав массив [[Сортировка вставками|сортировкой вставками]], можно получить временную сложность &amp;lt;tex&amp;gt;O(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;
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей и быть &amp;quot;зеркальной&amp;quot; к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.&lt;br /&gt;
Получившийся почти отсортированный массив досортируем сортировкой вставками.&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&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; в лучшем случае, и за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; в худшем.&lt;br /&gt;
&lt;br /&gt;
Таким образом временная сложность JSort является &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки == &lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B0%D0%BC%D0%B8%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 Пирамидальная сортировка - Википедия]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Heapsort Heapsort - Wikipedia]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/JSort JSort - Wikipedia]&lt;br /&gt;
*[http://habrahabr.ru/post/221095/ Описание сортировки кучей и JSort - Хабрахабр]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
*''Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К.'' Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом &amp;quot;Вильямс&amp;quot;, 2005. ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Сортировки]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=45055</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=45055"/>
				<updated>2015-03-21T09:12:59Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 \dots a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 \dots b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
* Перестановки (&amp;lt;font color=#c355a0&amp;gt;'''светло-фиолетовым выделен'''&amp;lt;/font&amp;gt; общий префикс, &amp;lt;font color=#992574&amp;gt;'''темно-фиолетовым'''&amp;lt;/font&amp;gt; первый отличный элемент, так как &amp;lt;tex&amp;gt;4 &amp;lt; 6&amp;lt;/tex&amp;gt;, то первая перестановка лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot; &lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания (так как &amp;lt;tex&amp;gt;4 &amp;lt; 6&amp;lt;/tex&amp;gt;, то первое сочетание лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]] (так как &amp;lt;tex&amp;gt;4 &amp;lt; 9&amp;lt;/tex&amp;gt;, то первое разбиение на слагаемые лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43159</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43159"/>
				<updated>2014-12-30T22:45:41Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 /dots a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 /dots b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
* Перестановки (&amp;lt;font color=#c355a0&amp;gt;светло-фиолетовым выделен&amp;lt;/font&amp;gt; общий префикс, &amp;lt;font color=#992574&amp;gt;темно-фиолетовым&amp;lt;/font&amp;gt; первый отличный элемент, так как &amp;lt;tex&amp;gt;4 &amp;lt; 6&amp;lt;/tex&amp;gt;, то первая перестановка лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot; &lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания (так как &amp;lt;tex&amp;gt;4 &amp;lt; 6&amp;lt;/tex&amp;gt;, то первое сочетание лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]] (так как &amp;lt;tex&amp;gt;4 &amp;lt; 9&amp;lt;/tex&amp;gt;, то первое разбиение на слагаемые лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43158</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43158"/>
				<updated>2014-12-30T22:36:23Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
* Перестановки (светло-фиолетовое общий префикс, темно-фиолетовым первый отличный элемент, так как 4 &amp;lt; 6, то первая перестановка лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания (так как 4 &amp;lt; 6, то первое сочетание лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]] (так как 4 &amp;lt; 9, то первое разбиение на слагаемые лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43157</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43157"/>
				<updated>2014-12-30T22:35:26Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
* Перестановки (светло-фиолетовое общий префикс, так как 4 &amp;lt; 6, то первая перестановка лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания (светло-фиолетовое общий префикс, так как 4 &amp;lt; 6, то первое сочетание лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]] (светло-фиолетовое общий префикс, так как 4 &amp;lt; 9, то первое разбиение на слагаемые лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43156</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43156"/>
				<updated>2014-12-30T22:34:52Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
* Перестановки (светло-фиолетовое общий префикс, так как 4 &amp;lt; 6, то и первая перестановка лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания (светло-фиолетовое общий префикс, так как 4 &amp;lt; 6, то и первое сочетание лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]] (светло-фиолетовое общий префикс, так как 4 &amp;lt; 9, то и первое разбиение на слагаемые лексикографически меньше)&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43155</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43155"/>
				<updated>2014-12-30T22:30:30Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|Разбиение на слагаемые]]&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&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;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43154</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43154"/>
				<updated>2014-12-30T22:30:12Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|разбиение на слагаемые]]&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&amp;lt;/tex&amp;gt;.&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Генерация комбинаторных объектов в лексикографическом порядке]]&lt;br /&gt;
* [[Получение предыдущего объекта]]&lt;br /&gt;
* [[Получение следующего объекта]]&lt;br /&gt;
== Источники информации==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43153</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43153"/>
				<updated>2014-12-30T22:29:28Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* [[комбинаторные объекты|разбиение на слагаемые]]&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&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>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43152</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43152"/>
				<updated>2014-12-30T22:24:16Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Разбиения на множества&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&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>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43151</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43151"/>
				<updated>2014-12-30T22:22:24Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &amp;lt;/tex&amp;gt; &lt;br /&gt;
Тогда последовательность &amp;lt;tex&amp;gt; ~A &amp;lt;/tex&amp;gt; '''лексикографически меньше''' (англ. ''lexicographically less'') последовательности &amp;lt;tex&amp;gt; ~B &amp;lt;/tex&amp;gt;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Разбиения на множества&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43150</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43150"/>
				<updated>2014-12-30T22:20:39Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &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;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Сочетания&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Comparechoose.png]] &lt;br /&gt;
|}&lt;br /&gt;
* Разбиения на множества&lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compare part.png]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (&amp;lt;tex&amp;gt;000&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;001&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;002&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;003&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;004&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;005&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;999&amp;lt;/tex&amp;gt;).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, &amp;lt;tex&amp;gt;AAA&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAB&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAC&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;AAD&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;ZZZ&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: &amp;lt;tex&amp;gt;airport&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;duck&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;horse&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;house&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;sleep&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43149</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43149"/>
				<updated>2014-12-30T22:12:01Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А {{---}} префикс В, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В {{---}} префикс А, но не равна ей&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, ААА, ААБ, ААВ, ААГ, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43148</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43148"/>
				<updated>2014-12-30T22:11:33Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Другие примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок {{---}} это, например, ААА, ААБ, ААВ, ААГ, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43147</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43147"/>
				<updated>2014-12-30T22:10:09Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' compare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LT&amp;quot;, если A &amp;lt; B, &amp;quot;GT&amp;quot;, если A &amp;gt; B, или &amp;quot;EQ&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LT&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' GT&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LT&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' GT&lt;br /&gt;
   '''return''' EQ                         &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43146</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43146"/>
				<updated>2014-12-30T22:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1 .. n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43145</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43145"/>
				<updated>2014-12-30T22:07:10Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Другие примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, &amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43144</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43144"/>
				<updated>2014-12-30T22:05:22Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43143</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43143"/>
				<updated>2014-12-30T21:59:18Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Другие примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
* Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
* Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
* Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43142</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43142"/>
				<updated>2014-12-30T21:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры с комбинаторными объектами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;lt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43141</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43141"/>
				<updated>2014-12-30T21:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры с комбинаторными объектами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 &amp;gt; 9, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43140</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43140"/>
				<updated>2014-12-30T21:54:50Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' (англ. ''lexicographical order''), если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 Б 0, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43139</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43139"/>
				<updated>2014-12-30T21:49:44Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 Б 0, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43137</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43137"/>
				<updated>2014-12-30T21:49:09Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры с комбинаторными объектами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
{| cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 Б 0, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43136</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43136"/>
				<updated>2014-12-30T21:48:12Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры с комбинаторными объектами */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
Перестановки:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания, общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 Б 0, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43135</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43135"/>
				<updated>2014-12-30T21:47:32Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры с комбинаторными объектами == &lt;br /&gt;
Перестановки:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Compareperm.png|thumb|Перестановки, общий префикс, 4 &amp;lt; 6, поэтому 1-ая перестановка лексикографически меньше]] &lt;br /&gt;
| [[Файл:Comparechoose.png|thumb|Сочетания (из 9 по 4), общий префикс, 4 &amp;lt; 6, поэтому 1-ое сочетание лексикографически меньше]] &lt;br /&gt;
| [[Файл:Compare part.png|thumb|Разбиение на слагаемые числа 14, общий префикс, 4 Б 0, поэтому 1-ое разбиение лексикографически меньше]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Compare_part.png&amp;diff=43134</id>
		<title>Файл:Compare part.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Compare_part.png&amp;diff=43134"/>
				<updated>2014-12-30T21:37:40Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Compareperm.png&amp;diff=43133</id>
		<title>Файл:Compareperm.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Compareperm.png&amp;diff=43133"/>
				<updated>2014-12-30T21:35:52Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43132</id>
		<title>Файл:Prevperm.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43132"/>
				<updated>2014-12-30T21:34:31Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: загружена новая версия «Файл:Prevperm.png»: Возврат к версии от 14:19, 30 декабря 2014&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Comparechoose.png&amp;diff=43131</id>
		<title>Файл:Comparechoose.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Comparechoose.png&amp;diff=43131"/>
				<updated>2014-12-30T21:31:48Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43128</id>
		<title>Файл:Prevperm.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43128"/>
				<updated>2014-12-30T21:29:37Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: загружена новая версия «Файл:Prevperm.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43127</id>
		<title>Файл:Prevperm.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Prevperm.png&amp;diff=43127"/>
				<updated>2014-12-30T21:28:53Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: загружена новая версия «Файл:Prevperm.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43126</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43126"/>
				<updated>2014-12-30T21:15:50Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Wikipedia {{---}} Lexicographical order]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Википедия {{---}} Лексикографический порядок ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43125</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43125"/>
				<updated>2014-12-30T21:12:33Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Лексикографический порядок]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Lexicographical order]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43124</id>
		<title>Лексикографический порядок</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA&amp;diff=43124"/>
				<updated>2014-12-30T21:10:01Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть даны две последовательности &amp;lt;tex&amp;gt; ~A = a_1 a_2 ... a_n &amp;lt;/tex&amp;gt;  и &amp;lt;tex&amp;gt; ~B = b_1 b_2 ... b_m &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;, если выполняется одно из двух условий:&lt;br /&gt;
*&amp;lt;tex&amp;gt; n &amp;lt; m &amp;lt;/tex&amp;gt; и при этом &amp;lt;tex&amp;gt; a_i = b_i &amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;i \in [1; n] &amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathcal {9} k\leqslant \min(n, m): a_k &amp;lt; b_k &amp;lt;/tex&amp;gt;  и при этом &amp;lt;tex&amp;gt; \mathcal {8} j &amp;lt; k ~a_j = b_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Приведем псевдокод сравнения последовательностей из элементов множества '''Т''':&lt;br /&gt;
 '''function''' Сompare(A, B : '''list &amp;lt;T&amp;gt;''')   &amp;lt;font color=green&amp;gt;// Возвращает &amp;quot;LESS&amp;quot;, если A &amp;lt; B, &amp;quot;MORE&amp;quot;, если A &amp;gt; B, или &amp;quot;EQUAL&amp;quot;, если последовательности равны&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = 1 '''to''' min(len(A), len(B)) &lt;br /&gt;
     '''if''' A[i] &amp;lt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А меньше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' LESS&lt;br /&gt;
     '''if''' A[i] &amp;gt; B[i]                 &amp;lt;font color=green&amp;gt; // i-й элемент А больше i-го элемента B, но префиксы длины i - 1 равны&amp;lt;/font&amp;gt;&lt;br /&gt;
       '''return''' MORE&lt;br /&gt;
   '''if''' len(A) &amp;lt; len(B)                &amp;lt;font color=green&amp;gt;// А - префикс В, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' LESS&lt;br /&gt;
   '''if''' len(A) &amp;gt; len(B)                &amp;lt;font color=green&amp;gt;// В - префикс А, но не равна ей.&amp;lt;/font&amp;gt;&lt;br /&gt;
     '''return''' MORE&lt;br /&gt;
   '''return''' EQUAL                      &amp;lt;font color=green&amp;gt;// Длины последовательностей и все элементы равны&amp;lt;/font&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Последовательности записаны в '''лексикографическом порядке''' ''(in lexicographical order)'', если для любых &amp;lt;tex&amp;gt; i&amp;lt;j &amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt; S_i&amp;lt;S_j &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; S_i &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S_j &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;.&lt;br /&gt;
}}&lt;br /&gt;
Например, слово &amp;quot;сон&amp;quot; лексикографически меньше слова &amp;quot;сонный&amp;quot;, так как оно является его префиксом. Слово &amp;quot;низ&amp;quot; лексикографически меньше слова &amp;quot;нос&amp;quot;, поскольку первые символы совпадают, а второй символ первого слова меньше, чем второй символ второго.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
# Последовательность чисел в любой системе счисления, записанных в фиксированной разрядной сетке (000, 001, 002, 003, 004, 005, …, 999).&lt;br /&gt;
# Порядок слов в словаре. Предполагается, что буквы можно сравнивать, сравнивая их номера в алфавите. Тогда лексикографический порядок — это, например, ААА, ААБ, ААВ, ААГ, …, ЯЯЯ.&lt;br /&gt;
# Эти слова тоже записаны в лексикографическом порядке: азбука, бог, борода, сон, сонный.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA Лексикографический порядок]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Lexicographical_order Lexicographical order]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43119</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43119"/>
				<updated>2014-12-30T20:51:36Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, а первый элемент хранится в &amp;lt;tex&amp;gt;a[1]&amp;lt;/tex&amp;gt;)&lt;br /&gt;
* уменьшаем его на единицу&lt;br /&gt;
* дописываем максимально возможный хвост&lt;br /&gt;
Если элемента &amp;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &amp;lt;/tex&amp;gt; будет последним слагаемым в разбиении.&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' &lt;br /&gt;
&lt;br /&gt;
Первый случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Второй случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' ''null''&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&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://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000 Визуализатор перестановок]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43118</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43118"/>
				<updated>2014-12-30T20:51:13Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, а первый элемент хранится в &amp;lt;tex&amp;gt;a[1]&amp;lt;/tex&amp;gt;)&lt;br /&gt;
* уменьшаем его на единицу&lt;br /&gt;
* дописываем максимально возможный хвост&lt;br /&gt;
Если элемента &amp;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &amp;lt;/tex&amp;gt; будет последним слагаемым в разбиении.&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' &lt;br /&gt;
&lt;br /&gt;
Первый случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Второй случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&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://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000 Визуализатор перестановок]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43117</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43117"/>
				<updated>2014-12-30T20:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Специализация алгоритма для генерации предыдущего разбиения на слагаемые */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, а первый элемент хранится в &amp;lt;tex&amp;gt;a[1]&amp;lt;/tex&amp;gt;)&lt;br /&gt;
* уменьшаем его на единицу&lt;br /&gt;
* дописываем максимально возможный хвост&lt;br /&gt;
Если элемента &amp;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &amp;lt;/tex&amp;gt; будет последним слагаемым в разбиении.&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' &lt;br /&gt;
&lt;br /&gt;
Первый случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Второй случай:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&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://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000 Визуализатор перестановок]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43116</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43116"/>
				<updated>2014-12-30T20:49:51Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Специализация алгоритма для генерации предыдущего сочетания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, а первый элемент хранится в &amp;lt;tex&amp;gt;a[1]&amp;lt;/tex&amp;gt;)&lt;br /&gt;
* уменьшаем его на единицу&lt;br /&gt;
* дописываем максимально возможный хвост&lt;br /&gt;
Если элемента &amp;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &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;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Случай &amp;lt;tex&amp;gt;2:&amp;lt;/tex&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&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://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000 Визуализатор перестановок]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43115</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43115"/>
				<updated>2014-12-30T20:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&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;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &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;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Случай &amp;lt;tex&amp;gt;2:&amp;lt;/tex&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&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://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000 Визуализатор перестановок]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Комбинаторика]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43114</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43114"/>
				<updated>2014-12-30T20:43:34Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Специализация алгоритма для генерации предыдущего разбиения на слагаемые */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&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;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &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;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Случай &amp;lt;tex&amp;gt;2:&amp;lt;/tex&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Получение объекта по номеру]]&lt;br /&gt;
* [[Получение номера по объекту]]&lt;br /&gt;
* [[Получение следующего объекта]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43113</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43113"/>
				<updated>2014-12-30T20:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Специализация алгоритма для генерации предыдущего разбиения на слагаемые */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&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;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &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;:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Случай &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Получение объекта по номеру]]&lt;br /&gt;
* [[Получение номера по объекту]]&lt;br /&gt;
* [[Получение следующего объекта]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43112</id>
		<title>Получение предыдущего объекта</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=43112"/>
				<updated>2014-12-30T20:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Flanir: /* Специализация алгоритма для генерации предыдущего разбиения на слагаемые */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
{{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение объекта, предшествующего данному в [[Лексикографический порядок|лексикографическом порядке]].&lt;br /&gt;
}}&lt;br /&gt;
Объект &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; называется предыдущим за &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt; и не найдется такого &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;P &amp;lt; R &amp;lt; Q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда понятен алгоритм:&lt;br /&gt;
* находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* к оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило &amp;lt;tex&amp;gt;P &amp;lt; Q&amp;lt;/tex&amp;gt;),&lt;br /&gt;
* дописываем максимально возможный хвост.&lt;br /&gt;
По построению получаем, что &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} минимально возможный.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего битового вектора ==&lt;br /&gt;
* Находим минимальный суффикс, в котором есть &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;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;
* Дописываем максимально возможный хвост из единиц&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevbitvector.png|200px|thumb|искомый суффикс, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
&lt;br /&gt;
 '''int[]''' prevVector('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина вектора&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''while''' (n &amp;gt;= 0) '''and''' (a[n] != 1)&lt;br /&gt;
     a[n] = 1&lt;br /&gt;
     n--&lt;br /&gt;
   '''if''' n == -1&lt;br /&gt;
     '''return''' ''null''&lt;br /&gt;
   a[n] = 0&lt;br /&gt;
   '''return''' a&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;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevperm.png|600px|thumb|искомый суффикс (убывающая последовательность), элемент нарушающий последовательность, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevPermutation('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = n - 2 '''downto''' 0&lt;br /&gt;
     '''if''' a[i] &amp;gt; a[i + 1]&lt;br /&gt;
       max = i + 1&lt;br /&gt;
       '''for''' j = i + 1 '''to''' n - 1&lt;br /&gt;
         '''if''' (a[j] &amp;lt; a[max]) '''and''' (a[j] &amp;lt; a[i])&lt;br /&gt;
           max = j&lt;br /&gt;
       swap(a[i], a[j])&lt;br /&gt;
       reverse(a, i + 1, n - 1)&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' ''null''&lt;br /&gt;
===Мультиперестановка===&lt;br /&gt;
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.&lt;br /&gt;
&lt;br /&gt;
== Специализация алгоритма для генерации предыдущего сочетания ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Проходя справа налево, находим элемент &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; так, чтобы его разница со следующим отличалась более чем на единицу (пусть элемент с индексом &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;0&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;lt;tex&amp;gt;t&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[1]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:PrevChoose.png|600px|thumb|сочетания из n по k, элемент, который уменьшаем, максимальный хвост, преобразование]] &lt;br /&gt;
|}&lt;br /&gt;
===Реализация===&lt;br /&gt;
 '''int[]''' prevChoose('''int[]''' a): &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} количество различных элементов&amp;lt;/font&amp;gt;&lt;br /&gt;
   a[0] = 0                 &amp;lt;font color=green&amp;gt;// &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} длина сочетания&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' i = k '''downto''' 1&lt;br /&gt;
     '''if''' a[i] - a[i - 1] &amp;gt; 1&lt;br /&gt;
       a[i]--&lt;br /&gt;
       t = max(a[i] + 1, n - (k - i) + 1)&lt;br /&gt;
       '''for''' j = i + 1 '''to''' k &lt;br /&gt;
         a[j] = t&lt;br /&gt;
         t++&lt;br /&gt;
       '''return''' a&lt;br /&gt;
   '''return''' null&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; 1) &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; 2) &amp;lt;/tex&amp;gt; Если невозможен первый случай, то найдем такое слагаемое (не последнее), которое точно больше предыдущего на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Обозначим его номер за &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; a[j] = a[j] - 1 &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; a[j + 1] = 1 + \sum_{i = j + 1}^n a[i] &amp;lt;/tex&amp;gt;. А &amp;lt;tex&amp;gt; a[j + 1] &amp;lt;/tex&amp;gt; будет последним слагаемым в разбиении.&lt;br /&gt;
&lt;br /&gt;
'''Пример:''' &lt;br /&gt;
&lt;br /&gt;
Случай 1:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart1.png|600px|thumb|2 &amp;lt; 9 / 2, значит разделим 9 на два слагаемых, 4 и 5]] &lt;br /&gt;
|}&lt;br /&gt;
Случай 2:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin-left: left; margin-right: left;&amp;quot;&lt;br /&gt;
| [[Файл:Prevpart2.png|600px|thumb|1 + 2 - наибольший префикс, который можно не изменять, уменьшаем первую 3, дописываем наибольший хвост - 9 ]] &lt;br /&gt;
|}&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Первое слагаемое находится под индексом &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''list&amp;lt;int&amp;gt;''' prevPartition('''list&amp;lt;int&amp;gt;''' a): &lt;br /&gt;
   a[0] = 0&lt;br /&gt;
   '''if''' a[a.size - 1] / 2 &amp;gt;= a[a.size - 2]&lt;br /&gt;
     k = a[a.size - 1]&lt;br /&gt;
     a[a.size - 1] = a[a.size - 2] / 2&lt;br /&gt;
     a.push_back(k - a[a.size - 1])&lt;br /&gt;
     '''return''' a&lt;br /&gt;
   '''else'''&lt;br /&gt;
     sum = a[a.size - 1];&lt;br /&gt;
     '''for''' i = a.size '''downto''' 1 &lt;br /&gt;
       '''if''' (i == 1) '''and''' (a[1] == 1)&lt;br /&gt;
         '''return''' null&lt;br /&gt;
       '''if''' a[i] &amp;gt; a[i - 1]&lt;br /&gt;
         a[i]--&lt;br /&gt;
         a[i + 1] = sum + 1&lt;br /&gt;
         n = i + 1&lt;br /&gt;
         '''return''' a&lt;br /&gt;
       '''else'''&lt;br /&gt;
         sum += a[i]&lt;br /&gt;
         a.pop_back();&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Получение объекта по номеру]]&lt;br /&gt;
* [[Получение номера по объекту]]&lt;br /&gt;
* [[Получение следующего объекта]]&lt;/div&gt;</summary>
		<author><name>Flanir</name></author>	</entry>

	</feed>