反序数与字符串倒序输出数的联系与区别

"数字逆序函数c语言"的糗事
你可能感兴趣:
糗事百科为大家收集了很多的数字逆序函数c语言的糗事,各种关于数字逆序函数c语言的爆笑经历、尴尬时刻和开心视频,想持续关注数字逆序函数c语言的糗事就收藏本页吧.
扫码下载糗事百科app由最大逆序数求出排列个数,即poj3761公式推导
来源:博客园
问题描述如下: 一个具有n个元素的排列,经过k趟bubble sort排到有序状态。求出满足此条件的排列个数。 首先,了解反序表的概念。《计算机程序设计艺术》第三卷5.1.1反序部分有说明。简述如下:a1,a2,...,an是集合{1,2,...,n}的一个排列。令bj为位于j左边但是大于j的元素个数,就能得到排列a1,a2,...,an的反序表b1,b2,...,b3。比如说:排列 5 9 1 8 2 6 4 7 3 有反序表 2 3 6 4 0 2 2 1 0 。 不管什么样子的排列,只要可以比较大小,就可以映射到集合{1,2,...,n}上的一个排列。不难发现,每一趟bubble sort ,都会将这一趟之前反序数大于0的元素的反序数减1。经过k趟之后,所有元素的反序数均为0,也就是说,反序表为n个0,亦即有序状态。因此,题目可以演化为,n个元素的排列,反序表中最大值为k,求这样的排列有多少种。 易知,第i个元素的反序数取值范围是[0,n-i],还注意到一个事实,就是:每个元素的反序数取值是相互独立。为什么呢?事实上我开始以为是不独立的,但是验证了几个例子以后,我推翻自己的想法。当然这只是直觉上的。但是可以从《计算机程序设计艺术》第三卷反序部分得到一点理论支撑。引用书上的话“一张反序表唯一的确定一个排列”(我没有细看这个事实的证明)。因此,反序表和排列之间一一对应。全排列个数是n!,因此反序表的个数也是n!,这只有在取值相互独立的情况下得到。 回到题目,反序数最大为k。那么当n-i=n-k的时候,元素i可随意放。因为不管怎么放,他们的反序数都不会大于k,取值的个数由i来决定。当i<n-k时候,这些元素的反序数只可以在[0,k]之间选择。这样,我把n个元素分为两类来讨论,前面一类有k+1个元素,后面一类有n-k-1个元素。先考虑前面一种情况,对于每一个i,易知其排列数有(n-i+1),从i=n-k到n连乘,就是(k+1)!。后面一类,每个元素都有(k+1)种选择,因此有(k+1)^(n-k-1)。由乘法定理,易得k!*(k+1)^(n-k)。 但是,这不是最终答案。上面的结果,只是说经过不超过k趟排到有序状态。并不符合题意。因此,必须保证有一个元素的反序数为k。最好的做法就是计算出不超过k-1趟就排到有序状态的排列数,减掉。很容易利用刚才的结论,得到不超过k-1趟就排到有序状态的排列数为:(k-1)!*(k)^(n-k+1)。两者想减,即得到结果: k!*((k + 1)^(n - k) - k ^(n - k))。 最后排除异类的方法,是写这blog时候想到的。之前并不是这样做。而是去考虑一个一个剔除。想想因为之前那样的分类,对导致在剔除异类时候两类都必须考虑(第一类和第二类的反序数都有可能取得到k)。因此重新对之前的分类做了一下改变。事实上,就是把元素n-k从第一类中移到第二类。这样讨论起来特别方便。只需要考虑第二类的异类即可。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动"c语言将数字反序输出"的糗事
你可能感兴趣:
糗事百科为大家收集了很多的c语言将数字反序输出的糗事,各种关于c语言将数字反序输出的爆笑经历、尴尬时刻和开心视频,想持续关注c语言将数字反序输出的糗事就收藏本页吧.
扫码下载糗事百科appN 个互异数的数组的平均逆序数 - CSDN博客
N 个互异数的数组的平均逆序数
N 个互异数的数组的平均逆序数为 N(N-1)/4
1. 简单证明
对于任意的数的表 L(5,8,9,6,4),以及其反序表 Lr(4,6,9,8,5),它们各自的逆序数分别为:6 ((5, 4), (8, 6), (8, 4), (9, 6), (9, 4), (6, 4)),4((6, 5), (9, 8), (9, 5), (8, 5))。也即表与其反序表的逆序数之和为 6+4=10,恰好是元素总数 5 关于 2 的排列数,(52)=10。
因为任意一对数(x,y)且x在前又x&y的情况(逆序数的定义)一定会在二表之一中,所以可以说一个互异数表与其反序表的逆序数之和一定是N(N-1)/2,也就是说任意一个互异数表的平均逆序数为 N(N-1)/4.
2. 基于相邻元素交换的排序算法的下界
上述定理意味着,对于插入排序(基于逆序数的个数 O(I+N),N 表示遍历,I表示逆序数的个数)而言,平均的时间复杂度是二次的,同时也提供了只交换相邻元素的任何算法的一个很强的下界。
本文已收录于以下专栏:
相关文章推荐
/problemset/problem/61/E
会树状数组求逆序数的话,这个推一下就能出结果:
1、离散化,因为a[i]可以达到1e9
2、插入a[...
一个很经典的题目,HNU OJ
/online/?action=problem&type=show&id=13274
点击打开链接
CF上面似乎也有这...
所谓逆序对为对于数组a,如果ia[j],则这两个数即为一个逆序对。数组的逆序数即为数组中逆序对的个数。在第二章中的2-4利用合并排序的思路在O(nlgn)时间内统计数组a[n]的逆序数(具体方法可以参...
Life is a Line
Time Limit:
MS (Java/Others) Memory Limit: 36 K (Java/Ot...
又叫线性选择算法,这是一种平均情况下时间复杂度为O(n)的快速选择算法,用到的是快速排序中的第一步,将第一个数作为中枢,使大于它的所有数放到它右边,小于它的所有数放到它左边。下面是具体的算法步骤:
Problem Description
You want to processe a sequence of n distinct integers by swapping two adjacent ...
Time Limit:
MS (Java/Others)
Memory Limit:
K (Java/Others)
这道题纠结了很长时间0.0,今天早起重写了一发结果就a 了,Orz
主要原因还是算逆序数个数的时候没开long long,我还以为算sum的和的时候开long long 就好了,没想到光光是逆序数的个...
这道题的解法真的很好!!!
思路:建立一个结构体包含val和id, val就是输入的数,id表示输入的顺序。然后按照val从小到大排序,如果val相等,那么就按照id排序。
如果没有逆序的...
(转)树状数组可以用来求逆序数, 当然一般用归并求。如果数据不是很大, 可以一个个插入到树状数组中, 每插入一个数, 统计比他小的数的个数,对应的逆序为 i- getsum( data[i] ),其中...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)由最大逆序数求出排列个数_即poj3761公式推导_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
由最大逆序数求出排列个数_即poj3761公式推导
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 js 数组倒序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信