<?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=109.187.33.19&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.187.33.19&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/109.187.33.19"/>
		<updated>2026-04-07T00:36:56Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B8%D0%BD%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9&amp;diff=58420</id>
		<title>Таблица инверсий</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B8%D0%BD%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9&amp;diff=58420"/>
				<updated>2016-12-29T19:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;109.187.33.19: /* Алгоритм построения за O(N) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть &amp;lt;tex&amp;gt; P = (p_1,p_2,\dots,p_n)&amp;lt;/tex&amp;gt; является [[Действие перестановки на набор из элементов, представление в виде циклов|перестановкой]] чисел &amp;lt;tex&amp;gt; 1, 2,\dots, n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''Инверсией''' (англ. ''inversion'') в перестановке &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; называется всякая пара индексов &amp;lt;tex&amp;gt;i, j&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;1\leqslant i&amp;lt;j\leqslant n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P[i]&amp;gt;P[j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''Таблицей инверсий''' (англ. ''inversion table'') перестановки &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; называют такую последовательность &amp;lt;tex&amp;gt; T = (t_1,t_2,\dots,t_n)&amp;lt;/tex&amp;gt;, в которой &amp;lt;tex&amp;gt;t_i&amp;lt;/tex&amp;gt; равно числу элементов перестановки &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt;, стоящих в &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; левее числа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и больших &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения за O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
 &lt;br /&gt;
Таблицу инверсий тривиально построить по определению. Для каждого элемента перестановки считаем количество элементов, больших данного и стоящих в перестановке левее него.&lt;br /&gt;
Алгоритм построения в псевдокоде выглядит так: &lt;br /&gt;
 T[1..n] = 0&lt;br /&gt;
 '''for''' i = 1..n&lt;br /&gt;
   '''for''' j = 1..(i - 1)&lt;br /&gt;
     '''if''' P[j] &amp;gt; P[i]&lt;br /&gt;
       T[P[i]] = T[P[i]]++&lt;br /&gt;
Сложность данного алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. Уменьшить время работы можно используя алгоритм, похожий на [[Сортировка_слиянием |сортировку слиянием.]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения за O(N log N) ==&lt;br /&gt;
&lt;br /&gt;
Пусть дано разбиение перестановки на два списка, причём для каждого элемента дано число инверсий слева с элементами того же списка и известно, что все числа первого списка стоят левее всех чисел второго списка в исходной перестановке. Будем считать количество инверсий слева элементов обоих списков следующим образом: сливаем списки, аналогично [[Сортировка_слиянием |сортировке слиянием.]]&lt;br /&gt;
&lt;br /&gt;
Если в результат нужно записать элемент первого списка, то все нерассмотренные элементы второго списка больше, следовательно, количество инверсий для этого элемента не меняется. Если в результат нужно записать элемент второго списка, то все нерассмотренные элементы первого списка больше его и стоят левее. Следовательно, количество инверсий для этого элемента следует увеличить на количество нерассмотренных элементов первого списка.&lt;br /&gt;
&lt;br /&gt;
Описанный алгоритм записывается в псевдокод следующим образом:&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''inverses_merge'' {{---}} процедура, сливающая два списка пар&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''inverses_get'' {{---}} процедура, рекурсивно получающая таблицу инверсий для перестановки&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''def''' inverses_merge(ls1, ls2):&lt;br /&gt;
   result = []&lt;br /&gt;
   it1, it2 = ''null''&lt;br /&gt;
   '''while''' (it1 &amp;lt; ls1.length) '''and''' (it2 &amp;lt; ls2.length)&lt;br /&gt;
    '''if''' ls1[it1].item &amp;lt; ls2[it2].item&lt;br /&gt;
       result.append(ls1[it1])&lt;br /&gt;
       it1++&lt;br /&gt;
     '''else'''&lt;br /&gt;
       result.append(item = ls2[it2].item, inverses = ls2[it2].inverses + ls1.length - it1)&lt;br /&gt;
       it2++&lt;br /&gt;
   '''while''' it1 &amp;lt; ls1.length&lt;br /&gt;
     result.append(ls1[it1])&lt;br /&gt;
     it1++&lt;br /&gt;
   '''while''' it2 &amp;lt; ls2.length&lt;br /&gt;
     result.append(ls2[it2])&lt;br /&gt;
     it2++&lt;br /&gt;
   '''return''' result&lt;br /&gt;
 &lt;br /&gt;
 '''def''' inverses_get(ls):&lt;br /&gt;
   '''if''' ls.length == 1&lt;br /&gt;
     '''return''' [(item = ls[0], inverses = 0)]&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' inverses_merge(inverses_get(ls.first_half), inverses_get(ls.second_half))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сложность представленного алгоритма есть &amp;lt;tex&amp;gt;O(n\log n)&amp;lt;/tex&amp;gt;. Алгоритм с такой же сложностью можно построить с помощью [[Дерево_отрезков._Построение | дерева отрезков.]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения за O(N) ==&lt;br /&gt;
&lt;br /&gt;
Для построения таблицы инверсий за линейное время воспользуемся [[Карманная сортировка | карманной сортировкой]]. При карманной сортировке нужно определить карман &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, в который попадет текущий элемент. Затем найти количество элементов в старших карманах относительно &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Потом аккуратно подсчитать количество элементов, больших текущего в кармане &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Карман &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; считается старшим для кармана &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, если любой элемент из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; больше любого элемента из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
 '''int''' bucket_sort('''vector&amp;lt;int&amp;gt;''' Permutation):&lt;br /&gt;
    MAX = число больше Permutation.size и из которого можно извлечь целый квадратный корень&lt;br /&gt;
    BUCKET=sqrt(MAX)&lt;br /&gt;
    '''int''' Answer = 0&amp;lt;font color=green&amp;gt; // изначально кол-во инверсий&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''list&amp;lt;list&amp;lt;int&amp;gt;&amp;gt;''' Bank(BUCKET)&lt;br /&gt;
    '''for''' i = 0 to Permutation.size &lt;br /&gt;
      '''int''' Position = (Permutation[i] - 1)/(MAX / BUCKET) &amp;lt;font color=green&amp;gt;// Определяем в каком кармане должен лежать элемент&amp;lt;/font&amp;gt;&lt;br /&gt;
      '''int''' NewPosition = 0&lt;br /&gt;
      '''while'''(NewPosition &amp;lt; Bank[pos].size &amp;amp;&amp;amp; Bank[pos][NewPosition] &amp;lt; Permutation[i] ) &amp;lt;font color=green&amp;gt;// идем до позиции где должен стоять элемент Permutation[i]  &amp;lt;/font&amp;gt;&lt;br /&gt;
         NewPosition++&lt;br /&gt;
      Answer += Bank[pos].size - NewPosition &amp;lt;font color=green&amp;gt;// ищем сколько инверсий эленент создает в своем кармане&amp;lt;/font&amp;gt;&lt;br /&gt;
      Bank[pos].insert( NewPosition , Permutation[i] ) &amp;lt;font color=green&amp;gt;// вставляем элемент в Карман на свою позицию &amp;lt;/font&amp;gt;&lt;br /&gt;
      '''for''' i = Position + 1 to BUCKET-1 &amp;lt;font color=green&amp;gt;// ищем сколько инверсий он создает с элементами в других карманах&amp;lt;/font&amp;gt;&lt;br /&gt;
        Answer += Bank[i].size&lt;br /&gt;
    '''return''' Answer&lt;br /&gt;
&lt;br /&gt;
Известно что карманная сортировка имеет линейную сложность, но только в том случае если элементы равномерно распределены. Т.к. мы ищем кол-во инверсий в перестановке то мы знаем что наши элементы встречаются на отрезке от &amp;lt;tex&amp;gt;[1;n]&amp;lt;/tex&amp;gt; единожды , а следовательно равномерно распределены.&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;
Для восстановления перестановки по таблицы инверсий &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; воспользуемся следующим соображением: единица стоит в перестановке на &amp;lt;tex&amp;gt;T_0&amp;lt;/tex&amp;gt;-ом месте  (индексируем элементы с нуля), так как остальные числа в перестановке больше единицы. Далее, если известны расположения всех чисел &amp;lt;tex&amp;gt;1, \dots, k&amp;lt;/tex&amp;gt;, то число &amp;lt;tex&amp;gt;k + 1&amp;lt;/tex&amp;gt; стоит на &amp;lt;tex&amp;gt;T_{k + 1}&amp;lt;/tex&amp;gt;-ой ещё не занятой позиции: все числа, меньшие &amp;lt;tex&amp;gt;k + 1&amp;lt;/tex&amp;gt; уже расставлены. Это рассуждение напрямую переписывается в код следующим образом:&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''j'' {{---}} счётчик пропущенных свободных позиций&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''k'' {{---}} количество инверсий слева для элемента curr&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''result'' {{---}} массив, в который записывается перестановка. Равенство элемента массива нулю обозначает, что эта позиция свободна.&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''def''' recover_straight(ls):&lt;br /&gt;
   n = ls.length&lt;br /&gt;
   result = array(0, n)&lt;br /&gt;
   curr = 1&lt;br /&gt;
   '''for''' k '''in''' ls&lt;br /&gt;
    j = 0&lt;br /&gt;
     '''for''' i = 0..(n - 1)&lt;br /&gt;
       '''if''' result[i] == 0&lt;br /&gt;
         '''if'''  j == k&lt;br /&gt;
           result[i] = curr&lt;br /&gt;
           '''break'''&lt;br /&gt;
         '''else:'''&lt;br /&gt;
           j++&lt;br /&gt;
     curr++&lt;br /&gt;
   '''return''' result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Этот простой алгоритм имеет сложность &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; — внутренний цикл делает до &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; итераций, внешний — ровно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; итераций.&lt;br /&gt;
&lt;br /&gt;
Видно, что для восстановления нужно узнавать &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ую свободную позицию. Это можно делать с помощью [[Дерево_отрезков._Построение | дерева отрезков]] следующим образом: построим дерево отрезков для суммы на массиве из единиц. Единица в позиции означает, что данная позиция свободна. Чтобы найти &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ую свободную позицию, нужно спускаться (начиная с корня) в левое поддерево если сумма в нём больше, чем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, и в правое дерево иначе.&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм переписывается в код следующим образом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''build_segment_tree'' {{---}} строит дерево отрезков над массивом&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''node'' {{---}} вершина дерева&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// ''node.index'' {{---}} индекс соответствующего элемента в массиве для листа дерева&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''def''' recover(inv):&lt;br /&gt;
   n = inv.length&lt;br /&gt;
   tree = build_segment_tree(array(n, 1))&lt;br /&gt;
   result = array(n)&lt;br /&gt;
   curr = 1&lt;br /&gt;
   '''for''' k '''in''' inv&lt;br /&gt;
     node = tree.root&lt;br /&gt;
     '''while''' !node.is_leaf&lt;br /&gt;
       '''if''' k &amp;lt; node.left.value&lt;br /&gt;
         node = node.left&lt;br /&gt;
       '''else'''&lt;br /&gt;
         k -= node.left.value&lt;br /&gt;
         node = node.right&lt;br /&gt;
     result[node.index] = curr&lt;br /&gt;
     node.add(-1)&lt;br /&gt;
     curr++&lt;br /&gt;
   '''return''' result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Этот алгоритм имеет сложность &amp;lt;tex&amp;gt;O(n \log n)&amp;lt;/tex&amp;gt;: делается &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; итераций цикла, в которой происходит спуск по дереву высоты &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; и один запрос на дереве отрезков. Таким образом, время работы алгоритма на каждой итерации есть &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример построения таблицы инверсий и восстановления перестановки по таблице инверсий. Пусть дана перестановка &amp;lt;tex&amp;gt;(5, 7, 1, 3, 4, 6, 8, 2)&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;
{| style = &amp;quot;border: 0px solid; background-color: gray; text-align: center; padding : 0&amp;quot; cellspacing = &amp;quot;2&amp;quot;&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(5, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(7, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(1, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(3, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(4, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(6, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(8, 0)&lt;br /&gt;
| style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot; |(2, 0)&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;2&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|(5, 0), (7, 0)&lt;br /&gt;
|colspan = &amp;quot;2&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|(1, 0), (3, 0)&lt;br /&gt;
|colspan = &amp;quot;2&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|(4, 0), (6, 0)&lt;br /&gt;
|colspan = &amp;quot;2&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|'''(2, 1)''', (8, 0)&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;4&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|'''(1, 2)''', '''(3, 2)''', (5, 0), (7, 0)&lt;br /&gt;
|colspan = &amp;quot;4&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|'''(2, 3)''', (4, 0), (6, 0), (8, 0)&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;8&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|(1, 2), '''(2, 6)''', (3, 2), '''(4, 2)''', (5, 0), '''(6, 1)''', (7, 0), (8, 0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученная таблица инверсий: &amp;lt;tex&amp;gt;(2, 6, 2, 2, 0, 1, 0, 0)&amp;lt;/tex&amp;gt;. Восстановим перестановку по таблице инверсий, начиная с пустого массива.&lt;br /&gt;
&lt;br /&gt;
{| style = &amp;quot;border: 0px solid; background-color: grey; text-align: center; padding : 0;&amp;quot; cellspacing = &amp;quot;2&amp;quot;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|пропускаем две свободных позиции и ставим &amp;lt;tex&amp;gt;\bf{1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|пропускаем шесть свободных позиций и ставим &amp;lt;tex&amp;gt;\bf{2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{3}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|пропускаем две свободных позиции и ставим &amp;lt;tex&amp;gt;\bf{3}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{4}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|пропускаем две свободных позиции и ставим &amp;lt;tex&amp;gt;\bf{4}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{5}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|не пропускаем свободных позиции и ставим &amp;lt;tex&amp;gt;\bf{5}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{6}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|пропускаем одну свободную позицию и ставим &amp;lt;tex&amp;gt;\bf{6}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{7}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|не пропускаем свободных позиций и ставим &amp;lt;tex&amp;gt;\bf{7}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;\bf{8}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: white; padding: 3px 6px&amp;quot;|&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&lt;br /&gt;
|colspan = &amp;quot;1&amp;quot; style = &amp;quot;background-color: #EEF; text-align: left; padding: 3px 6px&amp;quot;|не пропускаем свободных позиций и ставим &amp;lt;tex&amp;gt;\bf{8}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Матричное представление перестановок]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Permutation Wikipedia {{---}} Permutation]&lt;br /&gt;
* Д. Кнут - Искусство программирования, том 3 {{---}} 29-31 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Комбинаторика ]]&lt;/div&gt;</summary>
		<author><name>109.187.33.19</name></author>	</entry>

	</feed>