康拓展开&&逆康拓展开
来源:互联网 发布:nba2k15欧文捏脸数据 编辑:程序博客网 时间:2024/04/29 12:05
康拓展开:
用途:康拓展开主要用于求当前排列在所有排列中排第几(一般从零开始),也可用于搜索标记状态。
公式:ans = a( n ) * ( n - 1) ! + a( n - 1 ) * ( n - 2 ) ! + …… a( i ) * ( i - 1 ) ! +……a2 * 1! + a0 * 0! .( ps: 0! = 1 ) .
公式有了那就剩下求 a( n ) , a( n - 1) , a( n - 2 ) …… 了。先说一下 a( i ) 的意义,a( i ) 代表在 i 之后比 i 小的数的个数。
For example : s = { 1 , 2 , 3 , 4 } , 求 s1 = { 3, 2 , 4 , 1 } 在排列中排第几( 按字典序)
3 : 比3小且在3后面的数共有2个 ~> a3=2 ;
2 : 比2小且在2后面的数共有1个 ~> a2=1 ;
4 : 比4小且在4后面的数共有1个 ~> a1=1 ;
1 : 比1小且在1后面的数共有0个 ~> a0=0 ;
so ~ > ans = 2 * 3! + 1 * 2! + 1 * 1! + 0 * 0! = 15 ( 这里排名从 0 开始 ) ;
再来一个: s1 = { 2 , 4 , 1 , 3 } 在排列中排第几
2 : 比2小且在2后面的数共有1个 ~> a3 = 1 ;
4 : 比4小且在4后面的数共有2个 ~> a2 = 2 ;
1 : 比1小且在1后面的数共有0个 ~> a1 = 0 ;
3 : 比3小且在3后面的数共有0个 ~> a0 =0 ;
so ~> ans = 1 * 3! + 2 * 2! + 0 * 1 ! + 0 * 0! = 10 ;
代码:
int Cantor(string str){ int ans = 0 ; for(int i = 0 ;i < str.length() ; ++i){ int temp = 0 ; for(int j = i+1 ;j < str.length() ; ++j) if(str[i] > str[j]) temp++ ; ans += temp * f[str.length()-i-1] ; } return ans ;}
逆康拓展开:
用途:很明显与康拓展开相反可以求在序列中第 n 个数的序列。
For example : 序列为 s = { 1 , 2 , 3 , 4 } ,求序列中第排名为10 的序列。
1. 用10去除 3! 商 1 余 4 ;
2. 用 4 去除 2! 商 2 余 0 ;
3. 用 0 去除 1! 商 0 余 0 ;
4. 用0 去除 0! 商 0 余 0 ;
so ~ > 先看第一个数(看商): 它后面只有一个数比它小,所以这个数是2
第二个数: 它后面有两个数比它小,如果2不被确定为第一个数,那么这个数一定是3,因为2已经被确定为第一个数了,所以这个数就是4了
第三个数: 它后面有0个数比它小,那么第三个数就是1
第四个数: 它后面有0个数比它小,那么第三个数就是4
所以序列为: s1 = { 2 , 4 , 1 , 3 } .
代码:
string Incantor(int n){ string str="" ; int len = 4 ; memset(vis,false,sizeof(vis)) ; for(int i=len-1 ;i >= 0 ;i--) { int j=-1 ; for(int k=0 ;k <= n/f[i] ;k++) // f[] 为对应阶乘 while(vis[++j]) ; vis[j]=true ; str +=('1'+j) ; n%=f[i] ; } return str ;}
- 康拓展开 & 逆康拓展开
- 康拓展开&&逆康拓展开
- 康拓展开 & 逆康拓展开
- 逆康拓展开
- 康拓展开,康拓展开逆运算
- 康拓展开和(逆康拓展开)
- 康拓展开及逆康拓展开
- 康拓展开与逆康拓展开
- 康拓展开和逆康拓展开
- 逆康拓展开展开
- 康拓展开
- 康拓展开
- 康拓展开
- 康拓展开逆运算
- 康拓展开
- 康拓展开
- 康拓展开
- 康拓展开 Test
- Python的单引号、双引号和三双引号的区别
- input背景透明并且不穿透
- 外观模式(门面模式)
- Linux 下卸载MySQL 5
- 使用mysqladmin ext了解MySQL运行状态
- 康拓展开&&逆康拓展开
- 朗月照花
- 曾经的伤悲谁来拯救
- CentOS下安装OpenSSH 5.8的三种方法【未测试】
- Eclipse+CAS
- Maven的基本原理和Maven2的新特性
- 动态规划-uva-10405-Longest Common Subsequence
- snprintf/_snprintf 在不同平台间函数差异
- 设置eclipse文件默认的编码 修改Eclipse配置文件