当排列数中出现相同的数时,逆序数怎么计算,比如145243

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当排列数中出现相同的数时,逆序数怎么计算,比如145243相关的知识,希望对你有一定的参考价值。

一.
预备知识
.
这部分就是百度上一搜一大片的东西,不过还是强调一下。
.
1.
全排列
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫n的全排列。[1]对于n的全排列,共有n!种情况。
2.
逆序、逆序数和奇、偶排列
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。[2]
例如,对于n=3的全排列:
全排列
123
231
312
132
213
321
逆序数
0
2
2
1
1
3
奇偶性


.
二.
相关问题
.
1.
给定一个排列,求它的逆序数。[3]
问题:给定一个排列,求它的逆序数是多少。
分析:设
p1,p2,…,pn
为n的一个全排列,则其逆序数为t=t1+t2+…+tn=
其中
ti为排在pi
前,且比pi
大的数的个数。
这部分代码比较简单,此处略去。
.
2.
根据逆序数推排列数。[4]
问题:给定一个n元排列,它的逆序数存在且唯一。那么反过...
参考技术A 逆序数是指一个排列中所有逆序总数,而排列,是从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列。
145243中出现出现相同的数4,
所以145243不是排列,也就无所谓计算逆序和逆序数了。
参考技术B 一.
预备知识
.
  这部分就是百度上一搜一大片的东西,不过还是强调一下。
.
  1.
全排列
    从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫n的全排列。[1]对于n的全排列,共有n!种情况。
  2.
逆序、逆序数和奇、偶排列
    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
参考技术C 逆序数是指一个排列中所有逆序总数,而排列,是从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列。
145243中出现出现相同的数4,
所以145243不是排列,也就无所谓计算逆序和逆序数了。
逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。[1] 如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。
扩展资料
计算逆序数:
标准列是1
2
3
4
5
,那么
5
4
3
2
1
的逆序数算法:
5之前没有数,记为0.
看第二个,4之前有一个5,在标准列中5在4的后面,所以记1个
类似的,第三个
3
之前有
4
5
都是在标准列中3的后面,所以记2个
同样的,2
之前有3个,1之前有4个
将这些数加起来就是逆序数=1+2+3+4=10
再举一个
2
4
3
1
5
4
之前有0个
3
之前有1个
1
之前有3个
5
之前有0个
所以逆序数就是1+3=4
参考资料
搜狗百科——逆序数

树状数组求逆序数

1逆序数一波:

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。一个排列中所有逆序总数叫做这个排列的逆序数。也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。

比如: 2431这个排列,

其中21,31,41,43,这四个就是逆序对,所以这个逆序数的总数就是4.

 

2.树状数组:

  https://www.cnblogs.com/zllwxm123/p/9342044.html

  参考上面那篇博客.

 

3.用树状数组求逆序数.

  设A[x]为树状数组,现在我们要存的是,x这个数是否出现过,出现过则,A[x]++;

那么当我们求和的时候就是计算出当前位置之前有多少个数小于本身,那么再根据我本身的位数,

就可以推出比我本身大的数在我前面有多少位.

(当然,如果数字很大的话,就需要先进行离散化.)

例如:

  计算下面一串数字的逆序数总数,

3425671

A 数组表示的是i是否出现过,而ans表示的是在此之前有几个数比自身小,cnt数组就表示每个数可能与其后面的数构成逆序数的种数,其和就是总和.

A[3] 1   ans[1]  0    cnt[1] = 3 - ans[1] - 1 = 2

A[4] 1           ans[2]  1    cnt[2] = 4 - ans[2] - 1 = 2

A[2] 1   ans[3]  0    cnt[3] =  2 - ans[3] - 1 = 1

A[5] 1   ans[4]  3    cnt[4] =  5 - ans[4] - 1 = 1

A[6] 1   ans[5]  4    cnt[5] =  6 - ans[5] - 1 = 1

A[7] 1   ans[6]  5    cnt[6] =  7 - ans[6] - 1 = 1

A[1 ] 1   ans[7]  0    cnt[7] =  1 - ans[7] - 1 = 0

  

 

以上是关于当排列数中出现相同的数时,逆序数怎么计算,比如145243的主要内容,如果未能解决你的问题,请参考以下文章

当排列数中出现相同的数时,逆序数怎么计算,比如145243

求排列的逆序数

冒泡排序的交换次数 (树状数组)

逆序对问题---求逆序数

拼图游戏中逆序数的实现的三种方式

回文数中各位数和与输入数相同