C语言实现求字符串子集问题
2015-06-12 08:46
447 查看
这个问题在于实现Apriori算法的时候需要求各个频繁集的关联规则,而这时需要在求得最大的频繁集中求各个频繁集的真子集。然后在实现这一步的时候被卡主了,第一反应是用递归完成,但是面对数据挖掘中庞大的项目集,递归显然很低效,而且估计跑不起来,所以用迭代的方法显然比较靠谱。
网上非递归的方法有用二进制加法模拟实现,具体就是
例如有abcd,用0000加1-》0001这里的1就映射到相应的位置的字符串,例如对于0101也就是bd,那么我们通过不停对他加1,那么就能模拟出这个过程。这个方法显然很好,但是得运算2^n-1次.
自己后来排列了下,对于1234这样的形式,可以有
1
12,13,14,
123,124,1234
2
23,24
234
3
34
4
即用一个变量去循环1234上的元素,如何再利用一个变量去控制他每次显示的的长度,例如如果长度为2,那么显示以该元素为首的所有可能,例如12,13,14这样。思想比较简单,实现也比较简单。附上C代码
网上非递归的方法有用二进制加法模拟实现,具体就是
例如有abcd,用0000加1-》0001这里的1就映射到相应的位置的字符串,例如对于0101也就是bd,那么我们通过不停对他加1,那么就能模拟出这个过程。这个方法显然很好,但是得运算2^n-1次.
自己后来排列了下,对于1234这样的形式,可以有
1
12,13,14,
123,124,1234
2
23,24
234
3
34
4
即用一个变量去循环1234上的元素,如何再利用一个变量去控制他每次显示的的长度,例如如果长度为2,那么显示以该元素为首的所有可能,例如12,13,14这样。思想比较简单,实现也比较简单。附上C代码
#include #include void print(int*a,int start,int count){ while(count>=0){ printf("%d",a[start]); start++; count--; } } int main(){ int m[4]={1,2,3,4}; int length=sizeof(m)/sizeof(int); //求长度 int i,j,k; for(i=0;i printf("%d\n",m[i]); for(j=1;j for(k=j+i;k print(m,i,j-1); printf("%d\n",m[k]); } } } system("pause"); return 1; }
相关文章推荐
- C/C++ 语言中的表达式求值
- C++ vc中怎么使用SendMessage自定义消息函数
- zerglurker的C语言教程007——代码执行的顺序
- char *指针的详细解释
- ubuntu下c/c++开发环境配置
- C语言中的四种存储类型
- 数独辅助器
- c语言输入一个字符串,将其按照相反顺序存入同一个数组
- 温故知新——C++两个相互关联的类
- Trie (prefix tree) 实现 (C++)
- C++编译器对属性和方法的处理机制
- C++编译器对属性和方法的处理机制
- C++红旗之更短形式:500多字符且无法遵守原题规则
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
- C语言小问题
- c++ 实现五种基础的排序算法
- C语言中关键字volatile
- zerglurker的c语言教程006——第一个函数
- C++系列之类的静态成员
- C语言---整型字符串转换