您的位置:首页 > 编程语言 > C语言/C++

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代码

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: