全排列的本质——康托展开以及本质原理分析——选取第N个——由序列推知第几个
来源:互联网 发布:mysql中timestamp类型 编辑:程序博客网 时间:2024/06/05 08:14
先用一个例子简单介绍一下这个原理
12345找出这个序列全排列的第16个
计算方法就是如果你要求12345全排列的第16个的话
求第一位 用15/4!=0余15,那么前面有0个数,得到1。那么此时12345剩下了2345。
求第二位 用余的15/3! = 2余3,那么前面有2个数,得到4。剩下235。
求第三位 用余的3/2! = 1余1,那么前面有1个数,得到3,剩下25。
求第四位 用余的1/1! = 1余0,那么前面有1个数,得到5,剩下2。
求第五位 即2。
为什么可以这样求?下面是原理分析。
这里我们列出了分别由1,2,3,4,5开头的数分布在哪些区间。如1开头的数,就分布在1到4!。2开头的数,就分布在4!+1到2*4!。。。
再细化一下,这里又列出了21,22,23,24开头的4个数。21是4!+1到4!+3!。22是4!+1+3!到4!+2*3!。。。
所以我们不难得知,我们这样在求余数的过程中,其实就是在给这些数在定位。
我们求15/4!=0余15。那么就意味着我们第一个数是在第一个区间,即1.
这里我们余得15,就是我们在这个区间内的第15个数。
15/3!=2余3。那么我们第二个数就是剩下的2345的第三个数(因为余数是从0开始的)。以此类推。
为什么我们求16又用的是15而不是16呢?那你用1带进去试试看。最后除出来的结果是1/1!=1余0.所以是在第二个区间那就是2?当然不对。
我们这里减一位开始是为了考虑余数是从0开始为我们定位这个区间的。
换个问法,14352是第几个数?当然用上面例子的反向思维!如果领悟了上面的图,这里会不假思索地写出答案:16。嘿嘿。
- 全排列的本质——康托展开以及本质原理分析——选取第N个——由序列推知第几个
- 我排第几个——康托展开
- 全排列的编码与解码——康托展开及其逆展开
- 全排列剖析:求n个数第k个排序----康托展开
- 全排列剖析:求n个数第k个排序----康托展开
- 杭电ACM OJ 1027 Ignatius and the Princess II 全排列的第N个 康托展开
- leetcode[60]Permutation Sequence 以及 全排列的编码与解码——康托展开 (附完整代码)
- 数据结构与算法[LeetCode]—Permutation Sequence 求n个数的全排列中第K个序列
- n个不重复的字符全排列问题 康托展开小结
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——康托展开 (附完整代码)
- 全排列的编码与解码——【康托展开及其逆运算】
- 全排列的编码与解码——康托展开
- 算法:康托展开式——实现全排列序列与序号的映射
- 我排第几个---康托展开
- UVA 11525 Permutation-不重复全排列的第n项-(康托展开)
- 康托展开及其逆运算--我是第几个,第几是谁
- 拦截器的编写(十一)
- QT5中的UI界面 控件随窗口自适应变化大小 无需写任何代码!
- int类型数组压缩为char类型数组存储
- 二叉树BiTree的先序遍历.中序遍历.后序遍历.结点数.叶子结点数和数的高度
- Web
- 全排列的本质——康托展开以及本质原理分析——选取第N个——由序列推知第几个
- Python应用--系统学习python+安装whl包
- 专题18-移植tftp客户端
- mac和windows下安装tensorflow
- 两个数交换值
- swoole不小心开启了守护进程如何关闭?
- Yii2框架数据库增删改查小结
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma
- 如何在Fragment中获取context