逆序对

在计算机科学和离散数学中，一个序列的逆序（inversion）对，是失去自然次序的元素对。 設   π   {\displaystyle \ \pi \ } 為一個排列，如果   i < j   {\displaystyle \ i<j\ } 而且   π ( i ) > π ( j )   {\displaystyle \ \pi (i)>\pi (j)\ } ， 這個位置（有称为“序位”）对   ( i , j )   {\displaystyle \ (i,j)\ } ，或者這个元素对   ( π ( i ) , π ( j ) )   {\displaystyle \ {\bigl (}\pi (i),\pi (j){\bigr )}\ } ，被稱為是   π   {\displaystyle \ \pi \ } 的一個逆序。 逆序集是所有逆序的集合。一個排列   π   {\displaystyle \ \pi \ } 的使用基于位置表示法的逆序集，相同于其反向排列   π − 1   {\displaystyle \ \pi ^{-1}\ } 的使用基于元素表示法的逆序集，只有每个有序对的两个分量交換位置，反之亦然。 通常逆序是對於排列的定義，但也可以用於序列： 設   S   {\displaystyle \ S\ } 是一個序列（或多重集排列）。如果   i < j   {\displaystyle \ i<j\ } 而且   S ( i ) > S ( j )   {\displaystyle \ S(i)>S(j)\ } ， 這個位置对   ( i , j )   {\displaystyle \ (i,j)\ } ，或者這个元素对   ( S ( i ) , S ( j ) )   {\displaystyle \ {\bigl (}S(i),S(j){\bigr )}\ } ，被稱為是   S   {\displaystyle \ S\ } 的一個逆序。 對於序列，根據基于元素定义的逆序不是唯一性的，因為不同的位置对上可能有相同的值對。 序列   X = ⟨ x 1 , … , x n ⟩   {\displaystyle \ X=\langle x_{1},\dots ,x_{n}\rangle \ } 的逆序數   i n v ( X )   {\displaystyle \ {\mathtt {inv}}(X)\ } ，是逆序集的势，它常用於量度排列或序列的已排序程度（有时叫做预排序度presortedness）。逆序数在   0   {\displaystyle \ 0\ } 至   n ( n − 1 ) 2   {\displaystyle \ {\frac {n(n-1)}{2}}\ } 之间，含二者。 在一個排列的箭頭指向圖中，它是箭頭指向相交叉的數，也是從单位排列而得到的Kendall tau距離（英语：Kendall tau distance），以及每個与逆序有關的向量之和，它们在后面章节中定義。 對於逆序數，基于位置与基于元素定義之间的分別並不重要，因為排列及其反向排列都具有相同的逆序數。 其它測量（預先）排序程度的方式，包括了為排好序列而從序列中可以刪除元素的最小數量，對序列所“運行”排序的次數和長度，每個元素在已排序位置之上的距離總和（Spearman footrule），以及排序過程中必需的最少交換次數。比較排序算法計算逆序數的時間為   O ( n log ⁡ n )   {\displaystyle \ O(n\log n)\ } 。 目前求逆序对数目比较普遍的方法，是利用归并排序做到   O ( n log ⁡ n )   {\displaystyle \ O(n\log n)\ } 的时间复杂度；也可以利用树状数组、线段树来实现这种基础功能。复杂度均为   O ( n log ⁡ n )   {\displaystyle \ O(n\log n)\ } 。 有三個類似的向量用於將排列的逆序，壓縮到能唯一確定它的这个向量中。它們通常被稱為逆序向量或Lehmer碼（英语：Lehmer code）。这里的定义及公式来源于逆序 (离散数学)。 本文將逆序向量記為   v   {\displaystyle \ v\ } ，其它的兩個向量有時分別稱為“左”和“右”逆序向量；為了避免與前面的逆序向量混淆，本文將另兩個分別稱為“左逆序計數”   l   {\displaystyle \ l\ } 和“右逆序計數”   r   {\displaystyle \ r\ } 。左逆序計數是以反向colexicographic次序的排列，右逆序計數則是以字典序的排列。 逆序向量   v   {\displaystyle \ v\ } ： 采用基于元素的定義，   v ( i )   {\displaystyle \ v(i)\ } 是有序对較小（右）分量為   i   {\displaystyle \ i\ } 的逆序數。   v ( i )   {\displaystyle \ v(i)\ } 是在   π   {\displaystyle \ \pi \ } 之中于   i   {\displaystyle \ i\ } 之前，大于   i   {\displaystyle \ i\ } 的元素的數量。 v ( i )     =     # { k ∣ k > i   ∧   π − 1 ( k ) < π − 1 ( i ) } {\displaystyle v(i)~~=~~\#\{k\mid k>i~\land ~\pi ^{-1}(k)<\pi ^{-1}(i)\}} 其更符合直觉的定义方式为：   v ( π ( i ) )   {\displaystyle \ v{\bigl (}\pi (i){\bigr )}\ } 是在   π   {\displaystyle \ \pi \ } 之中于   π ( i )   {\displaystyle \ \pi (i)\ } 之前，大于   π ( i )   {\displaystyle \ \pi (i)\ } 的元素的数量。 v ( π ( i ) )     =     # { k ∣ k < i   ∧   π ( k ) > π ( i ) }     =     l ( i ) {\displaystyle v{\bigl (}\pi (i){\bigr )}~~=~~\#\{k\mid k<i~\land ~\pi (k)>\pi (i)\}~~=~~l(i)} 后者定义也适用于没有反向对应者的序列。 左逆序計數   l   {\displaystyle \ l\ } ： 采用基于位置的定義，   l ( i )   {\displaystyle \ l(i)\ } 是有序对較大（右）分量為   l ( i )   {\displaystyle \ l(i)\ } 的逆序數。   l ( i )   {\displaystyle \ l(i)\ } 是在   π ( i )   {\displaystyle \ \pi (i)\ } 之中于   π ( i )   {\displaystyle \ \pi (i)\ } 之前，大于   π ( i )   {\displaystyle \ \pi (i)\ } 的元素的數量。 l ( i )     =     # { k ∣ k < i   ∧   π ( k ) > π ( i ) } {\displaystyle l(i)~~=~~\#\left\{k\mid k<i~\land ~\pi (k)>\pi (i)\right\}} 右逆序計數   r   {\displaystyle \ r\ } ，通常稱為Lehmer碼： 采用基于位置的定義，   r ( i )   {\displaystyle \ r(i)\ } 是有序对較小（左）分量為   i   {\displaystyle \ i\ } 的逆序數。   r ( i )   {\displaystyle \ r(i)\ } 是   π ( i )   {\displaystyle \ \pi (i)\ } 之中于   π ( i )   {\displaystyle \ \pi (i)\ } 之後，小于   π ( i )   {\displaystyle \ \pi (i)\ } 的元素的數量。 r ( i )     =     # { k ∣ k > i   ∧   π ( k ) < π ( i ) } {\displaystyle r(i)~~=~~\#\{k\mid k>i~\land ~\pi (k)<\pi (i)\}}   l   {\displaystyle \ l\ } 和   v   {\displaystyle \ v\ } 之间的关系：   l   {\displaystyle \ l\ } 的第一个数字和   v   {\displaystyle \ v\ } 的最后一个数字总是   0   {\displaystyle \ 0\ } ，可以省略。 Rothe圖可以協助找出   v   {\displaystyle \ v\ } 和   r   {\displaystyle \ r\ } 。Rothe（英语：Heinrich August Rothe）圖是以黑點來表示1的排列矩陣，每一個位置上若為逆序（通常以叉號表示），則在其右側與下方即有一點。   r ( i )   {\displaystyle \ r(i)\ } 是圖中第   i   {\displaystyle \ i\ } 列排列逆序的加總，而   v ( i )   {\displaystyle \ v(i)\ } 是   i   {\displaystyle \ i\ } 欄中排列逆序的加總。排列矩陣的逆矩阵即是此矩陣的轉置矩陣，因此某一排列的   v   {\displaystyle \ v\ } 即是它轉置矩陣的   r   {\displaystyle \ r\ } ，反之亦然。   r   {\displaystyle \ r\ } 和   l   {\displaystyle \ l\ } 之间的关系： π ( i )     =     i + r ( i ) − l ( i ) {\displaystyle \pi (i)~~=~~i+r(i)-l(i)} 下面可排序表顯示了四個元素的集合，它的逆序集會有不同位置的24種排列、逆序相關向量和逆序數（右欄是它的反向排列，用於以colex排序）。可以看出   v   {\displaystyle \ v\ } 和   l   {\displaystyle \ l\ } 的位數總是相同，而   l   {\displaystyle \ l\ } 和   r   {\displaystyle \ r\ } 與位逆序集有關。 最右側欄是排列左上右下對角線的總和，如三角形圖示，以及   r   {\displaystyle \ r\ } 是左下右上對角線的總和（配對在下降對角線中其右側都是   2 , 3 , 4   {\displaystyle \ 2,3,4\ } 組成，而在上升對角線中的左側都是   1 , 2 , 3   {\displaystyle \ 1,2,3\ } 組成）。 此表中   π   {\displaystyle \ \pi \ } 的預設排序是反向colex次序，這與   l   {\displaystyle \ l\ } 的colex次序相同。   π   {\displaystyle \ \pi \ } 的字典序與   r   {\displaystyle \ r\ } 的字典序相同。 n物品排列的集合其部份次序的結構，稱為排列的弱次序，而構成格。 以逆序集的子集關係繪出的哈斯圖，則構成了稱為permutohedron的骨架。 如果依位置將某一排列分配給每個逆序集，所得到的排序是permutohedron的次序，其中的邊對應於連續兩元素的交換。這是排列的弱排序。The identity is its minimum, and the permutation formed by reversing the identity is its maximum. 如果依元素將某一排列分配給每個逆序集，所得到的排序將是凱萊圖的次序，其中的邊對應於連續兩元素的交換。對稱組的凱萊圖與其permutohedron相似，但是每個排列由其反向替換。 維基學院中的相關研究或學習資源：逆序对 阶乘进制 置换群 置换的奇偶性 Aigner 2007，第27頁. Comtet 1974，第237頁. Knuth 1973，第11頁. Pemmaraju & Skiena 2003，第69頁. Vitter & Flajolet 1990，第459頁. Gratzer 2016，第221頁. Bóna 2012，第57頁. Cormen et al. 2001，第39頁. Barth & Mutzel 2004，第183頁. Mannila 1985. Mahmoud 2000，第284頁. Kleinberg & Tardos 2005，第225頁. Weisstein, Eric W. "Inversion Vector" （页面存档备份，存于互联网档案馆） From MathWorld--A Wolfram Web Resource Reverse colex order of finitary permutations （OEIS數列A055089） Aigner, Martin. Word Representation. A course in enumeration. Berlin, New York: Springer. 2007. ISBN 978-3642072536.  Barth, Wilhelm; Mutzel, Petra. Simple and Efficient Bilayer Cross Counting. Journal of Graph Algorithms and Applications. 2004, 8 (2): 179–194. doi:10.7155/jgaa.00088 .  Bóna, Miklós. 2.2 Inversions in Permutations of Multisets. Combinatorics of permutations. Boca Raton, FL: CRC Press. 2012. ISBN 978-1439850510.  Comtet, Louis. 6.4 Inversions of a permutation of [n]. Advanced combinatorics; the art of finite and infinite expansions. Dordrecht,Boston: D. Reidel Pub. Co. 1974. ISBN 9027704414.  Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford. Introduction to Algorithms 2nd. MIT Press and McGraw-Hill. 2001. ISBN 0-262-53196-8.  Gratzer, George. 7-2 Basic objects. Lattice theory. special topics and applications. Cham, Switzerland: Birkhäuser. 2016. ISBN 978-3319442358.  Kleinberg, Jon; Tardos, Éva. Algorithm Design. 2005. ISBN 0-321-29535-8.  Knuth, Donald. 5.1.1 Inversions. The Art of Computer Programming. Addison-Wesley Pub. Co. 1973. ISBN 0201896850.  Mahmoud, Hosam Mahmoud. Sorting Nonrandom Data. Sorting: a distribution theory. Wiley-Interscience series in discrete mathematics and optimization 54. Wiley-IEEE. 2000. ISBN 978-0-471-32710-3.  Pemmaraju, Sriram V.; Skiena, Steven S. Permutations and combinations. Computational discrete mathematics: combinatorics and graph theory with Mathematica. Cambridge University Press. 2003. ISBN 978-0-521-80686-2.  Vitter, J.S.; Flajolet, Ph. Average-Case Analysis of Algorithms and Data Structures. van Leeuwen, Jan (编). Algorithms and Complexity 1 2nd. Elsevier. 1990. ISBN 978-0-444-88071-0.  Margolius, Barbara H. Permutations with Inversions. Journal of Integer Sequences. 2001, 4.  Mannila, Heikki. Measures of presortedness and optimal sorting algorithms. IEEE Transactions on Computers. April 1985, C–34 (4): 318–325. doi:10.1109/tc.1985.5009382.  Estivill-Castro, Vladimir; Wood, Derick. A new measure of presortedness. Information and Computation. 1989, 83 (1): 111–119. doi:10.1016/0890-5401(89)90050-3 .  Skiena, Steven S. Encroaching lists as a measure of presortedness. BIT. 1988, 28 (4): 755–784. S2CID 33967672. doi:10.1007/bf01954897.