乙個簡單的子集產生演算法

2021-04-07 06:25:37 字數 844 閱讀 3735

在做關聯規則挖掘模組的時候,由頻繁項集產生關聯規則,需要使用到子集產生的演算法。比如:

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...