5.1--5.1.1 Inversions 反序(上)
来源:互联网 发布:八字网站 知乎 编辑:程序博客网 时间:2024/05/29 13:24
从5.1的标题COMBINATORIAL PROPERTIES OF PERMUTATIONS来看,这一节应该会涉及比较多的组合数学的东西,这一节也属于比较有意思的一节。
反序和反序对
Inversions 反序,这是什么概念呢?对于排序,当然,排列是重要的研究对象,那么反序应该也是针对排列而言的。
Let (ai a2 ... an) be a permutation(排列) of the set {1,2,..., n}. If i < j and ai > aj,
the pair (ai,aj) is called an inversion(反序对) of the permutation;
从该定义来看,反序对就是违背了排序的一对元素,唯一没有反序对的排列就(1,2,...,n)。
事实上,在学线性代数的时候,求n*n行列式的时候,我们曾经用过反序的概念,G. Cramer 在1950提出的公式
上面的求和是对(1,2,...,n)的所有排列求和,而inv(a1a2...an)是该排列的反序对个数,我们简单叫做反序数。
反序表和反序数
The inversion table(反序表) b1b2 ... bn of the permutation a1 a2 ... an is obtained by
letting bj be the number of elements to the left of j that are greater than j. (bj等于大于j且在j右边的元素个数的总和)
In other words, bj is the number of inversions whose second component is j.
例子:591826473 的反序表为 2 3 6 4 0 2 2 10,
since 5 and 9 are to the left of 1; 5, 9, 8 are to the left of 2; etc.
当然从这个定义看出反序表主要是对自然数的排列进行定义的。这也可以扩展,但是讨论问题而言就变得简单了。大多数也需要对一个排列的序号进行研究。
那么反序表的所有元素加起来就是排列的反序数了。而且反序表满足0 <= b1 <= n - 1, 0<=b2<=n-2, ..., 0 <= b(n-i) <= 1, bn = 0.
反序表和其排列有着一一对应的关系,从排列到反序表,我们已经知道是唯一的,那么如何从反序表到排列呢,只要我们先把最大值写下,然后从大到小通过插值的方法就可以完成其排列了,因为bn一定为0,这样就可以唯一确定一个排列,这个性质很重要,对解决问题的转化也很有帮助。
例如计算排列个数时,我们以前常用的是一种策略,选第一个有n种,选第二个有n-1,所以是n的阶乘,那么从数学来看,反序表更直接,因为反序表的每个元素是独立的,算出来也是n的阶乘。
另一个例子,在第一卷的1.2.10中,曾经计算过排列的局部最大值的问题,就是计算有多少个元素大于他们所有的后继的问题。那么这个数就是反序表中所有有反序极大值的元素的个数总和,这个极大值指的是bj=n-j的时候。这是因为,当bj=n-j时,那么说明大于j的数全部在j的左边,那么右边的数一定是小于j的,所以该数也是具有局部最大值的。那么当我们求一个排列的平均局部最大值个数的时候,用反序表可以简单解决这个问题,因为反序表每个元素都是独立的,所以,b1有1/n概率是n-1,类似的,可以得到,该平均值是1/n+1/(n-1)+..+1=Hn。
在原排列中随意交换两个相邻元素,反序数总是加一或者减一,这个也很容易证明,因为只对相邻的那两个元素的反序对有影响,要不就是从反序对变成不是反序对,要不就是从不是反序对变成反序对。对其他元素并没有影响。
文中还给出了阿基米德的均匀多面体的图,加深直观理解,也颇有趣味。越来越兴奋的发现在下面展示。
排列的逆和反序表
一个排列的逆和该排列有着相同的反序数。Rotha给出了比较有趣的证明。
We construct an n x n chessboard having a dot in column j of row i whenever ai = j. Then we put × 's in all squares that have dots lying both below (in the same column) and to their right (in the same row).
下面是591826473的构造图:
文中说容易看出构造图中的× 的个数就是反序数。这里我们可以知道,在黑点左边的格子数就是该元素的比它小的元素的总数。而除去一些在它前面,又比它小,就可以得到在它后面,又比它小的数,这个数就就构成数对反序对,所有的× 的个数也就是反序对的总和,即反序数。
那么我们现在把图转置一下,交换行列,(相当于把图按照图的y轴向面向你的方向转180°,然后把得到的图再按图的中心旋转90°),那么得到的就是该排列的逆的图了。经过转置,图中的× 的个数是不变的,所以就可以得到证明。
- 5.1--5.1.1 Inversions 反序(上)
- 5.1--5.1.1 Inversions 反序(中)
- 5.1--5.1.1 Inversions 反序(下)
- Inversions
- SGU Inversions(线段树)
- SGU 180 - Inversions(逆序数)
- Kafka消息序列化和反序列化(上)
- SGU 180 Inversions ( 逆序对(卡数据范围))
- 求逆序数(the number of inversions)(数学)
- ural 1523 K-inversions(dp+树状数组)
- SUG 180 Inversions(树状数组+离散化)
- 【SGU】180. Inversions(归并排序求逆序数)
- SGU 180 Inversions(树状数组求逆序对)
- sgu180:Inversions
- 探究序列化与反序列化能力(上) - 客户端支持,JavaScriptTypeResolver与JavaScriptConverter
- Algorithms Part 1-Question 1- the number of inversions-逆序数计算算法
- Stanford - Algorithms: Design and Analysis, Part 1 - Week 1 Assignment: number of inversions
- 【算法导论学习-011】数组中的逆序对个数(Counting inversions in an array)
- java 多态性的理解
- [网络流]最大权闭合图
- MFC中CString.Format的详细用法
- Android 之 sms 短信
- memcached php-memcache 的安装及使用
- 5.1--5.1.1 Inversions 反序(上)
- 创业心德
- 窗体位置和大小控制
- DesignPattern-Simple Factory
- 在hibernate中session.load和session.get的不同
- 对于C++保护继承方式的一点理解
- 基于Socket的UDP和TCP编程介绍
- DOS命令大全:使用命令重定向操作符 (Redirection Operators)命令详解
- MyEclipse8.6 安装SVN的两种方法