一个组合算法及实现
来源:互联网 发布:网络通信面试 编辑:程序博客网 时间:2024/05/21 19:28
算法来源与互联网,该算法不是采用递归,效率比较高,在我们的一个项目中有实现,拿出来和大家共享
组合算法
本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的"10"组合,找到第一个"10"组合后将其变为
"01"组合,同时将其左边的所有"1"全部移动到数组的最左端。
当第一个"1"移动到数组的m-n的位置,即n个"1"全部移动到最右端时,就得
到了最后一个组合。
int comb(int m, int n)
{
if (m<=n||n==0)
return 0;
char *flag = new char[m];
int nRet = 1;
memset(flag, 0x0, m);
memset(flag, 0x1, n);
//一种组合
while(true)
{
k = 0;
for (i = 0; i < size-1; i++)
{
if (flag[i] == '/1')//找到"10"
{
if (flag[i+1] == '/0')
{
flag[i] = '/0';
flag[i+1] = '/1';
if (i>k && k>0)
{
memset(flag, 0x0, i);
memset(flag, 0x1, k);
}
break;
}
else
{
k++;
}
}
}
if (i>=size-1) break;
//一种组合
nRet ++;
}
delete[] flag;
return nRet;
}
运行结果事例
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
- 一个组合算法及实现
- 排列、组合及算法
- 排列、组合及算法
- 组合算法的程序实现及分析比较
- 组合数算法实现
- 组合算法的实现
- 组合算法的实现
- 组合算法-递归实现
- 组合算法实现
- 组合算法-C++实现
- 实现组合算法
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 排列算法及组合算法(C++)
- Java实现通用组合算法
- Java实现通用组合算法
- Java实现通用组合算法
- Java实现通用组合算法
- 高效全组合算法实现
- 如何让cygwin象类似linux多用户登录
- 学习计算机人工智能与神经网络之浅见,
- 检查SQL Server2005中的重叠索引(Detecting Overlapping Indexes in SQL Server 2005)
- 计算一个整数中的位是1或是0的个数的快速算法
- larbin使用说明
- 一个组合算法及实现
- IBM数据中心存储解决方案.存储区域网(SAN)介绍
- 网站架构收集
- .NET网站架构实例--MySpace的体系架构
- jbpm集成到myeclipse
- 清空JTable控件中的数据
- SQL Server中链接服务器将替代远程服务器
- 如何统计一串数字中,出现重复数的个数?
- 如何用Powerdesigner的PDM(物理数据模型)生成数据库