排列、R子集字典序
来源:互联网 发布:数控车床编程视频教程 编辑:程序博客网 时间:2024/05/16 16:56
n个元素的集合排列总个数是n!,可以这样简单的理解它:
当只有1个元素时,排列数是1,插入一个元素有两种方法,所以f(2)=2
对于3个元素相当于是在两个元素的基础上再插上1个元素:f(3)=f(2)×3=2×3
这样推导下去:f(n)=1×2×3×……×n=n!
有N个元素的集合{1,2,3,……N},当N非常大时,有这样的结果:
由逆序数 推出一个数字序列:对于每一个i,它的前面必然会有个比它大的数字,据此我们可以得出推算原数字序列的过程:
例子:
逆序数:1 ,2 ,0 ,1, 0
推导:
格雷码的产生:
作为一种特殊的码,Gray码保证相邻的码只有一位不同,这对应着空间几何体上的相邻顶点。
然而在计算机上通常采用二进制的转化,这样容易实现:
Graycode=bitCode^(bitCode>>1)
Generating R-subset of (1,2,3……,n) in lexicographic order:
这也是C语言名题百则精选3.6 KSUBSET.C
这也是C语言名题百则精选3.6 KSUBSET.C
#include <iostream>#include <cstdio>using namespace std;int p[25],n,r;void show(){ for(int i=1;i<=r;i++) printf("%3d",p[i]); puts("");}int main(){ while(cin>>n>>r){ int zi=1,mu=1,len,top; for(int i=1;i<=r;i++){ zi*=(n-i+1); mu*=i; } len=zi/mu; for(int i=1;i<=r;i++){ p[i]=i; } show(); top=r; for(int k=1;k<len;k++){ if(p[top]<n-r+top){ p[top]=p[top]+1; for(int j=top+1;j<=r;j++){ p[j]=p[j-1]+1; } show(); if(p[r]<n) top=r; } if(p[top]==n-r+top){ top--; } } //cout<<top<<endl; } return 0;}
关于它有这样的结论:
the r-subset of{1,2,3……n} occurs in place number
in the lexicographic order of the r-subset of{1,2,3……n}
0 0
- 排列、R子集字典序
- 按字典序生成{1,2,...,n}的r子集的算法-组合数学
- 全排列 字典序排列
- 字典序全排列
- 字典序全排列
- poj1833--排列--字典序
- 字典序全排列
- 字典序全排列
- 全排列-字典序
- 字典序生成排列
- 全排列-字典序
- 字典序排列
- 字典序全排列
- 字典序全排列
- 字典序全排列
- 字典序排列
- 最大字典序排列
- 字典序全排列
- 并查集应用 —— POJ 1182 食物链
- jenkins maven tomcat做持续集成的时候几个关键配置
- 入侵指定网站的思路~菜鸟必学
- css浮动
- 【Windows10】如何使用Segoe MDL2 Assets图标
- 排列、R子集字典序
- Cocos2d-JS项目之三:使用合图
- android 使用AndroidAnnotations注解简化安卓开发
- (79)最长公共子串
- json jquery 解析
- 获取<meta-data>元素的value属性的值
- 一个常用的布局技巧
- NSURLRequest POST方式请求
- 继续说python类~