这个问题在于实现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;
}

 

posted on 2015-06-12 08:46  sunrye  阅读(1141)  评论(0编辑  收藏  举报