在做關聯規則挖掘模組的時候,由頻繁項集產生關聯規則,需要使用到子集產生的演算法。比如:
char a=,集合a中,產生所有a的子集,,,...這些。
在openminer的關聯模組實現之處,我考慮的方法和人們思考產生子集的方法型別,既是先產生所有的單個元素的子集,然後產生2個元素的子集,然後3個的,一直到n個元素的子集。這種方法符合人們思考的方向,不容易找漏掉,但是實現起來就比較困難了。
/*** 開始產生所有子集(非空)**/
public void begingeneratesubitemsets()
/*** 產生下乙個子集(非空)
* @return
*/public itemindexset nextsubitemset()
return subitemset;
}/**
* 結束產生子集(非空)的過程**/
public void endgeneratesubitemsets()
我整整用了乙個整數和乙個陣列來儲存當前產生所有集合的索引,甚至還實現了乙個任意進製的加法演算法。
最近從csdn上看到了乙個人的做法,很簡單:
class test
;subset s = new subset(chs);
s.print();}}
class subset
public void print()
{for(int i = 0;i < (1<裡面二進位制位1,0,來產生對應的集合元素。比如乙個整數的所有n個bits對應集合內的n個元素,1表示該子集內包含該元素,0表示不包含。則通過乙個整數的累加,肯定會把n個bits的所有1,0排列組合情況產生完成。
真是高明的做法!
輸出乙個集合的所有子集(演算法)
輸出乙個集合的所有子集 演算法 時間複雜度很顯然,最少也是2 n,空間複雜度,是n,比較簡單 每個元素要麼在子集中,要麼不在,用 j 的二進位制形式的每一位代表陣列a中對應的位置的元素是否在子集中,例如,當i 5時,j i 5,那麼j 0101 我們對應的輸出 a 0 a 2 這個過程在while迴...
計算乙個集合的子集
用遞迴的思想計算出集合的子集 include include include include includeusing namespace std define maxsize 100 int sub set vector n,int m,int size sub set n,m,size 1 au...
乙個簡單的隨機數產生函式
直接先貼上 吧。includenclude const double sample sum 10000000 double random double start,double end 上面這個函式可以產生start到end之間的隨機數,及 start,end 最大值小於end,最小值可以等於sta...