转载

C语言实现求字符串子集问题

这个问题在于实现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; } 
正文到此结束
Loading...