一些集合演算法

2022-04-03 21:15:11 字數 3261 閱讀 8101

**

setalgorithm.cs

1

using

system;

2namespace

rabbit.tools325

26static

bool arrangement(int n, int rlen, int

result, setalgorithmcallback callback)

2743}44

45if

(skip)

46continue;47

//set element index

48 result[rlen] =i;

49//

recurrent next

50if (!arrangement(n, rlen + 1

, result, callback))

51return

false;52

}53return

true;54

}55///56

///求排列a(n,m)

57///

58///

集合元素個數

59///

取出元素個數

60///

**61

public

static

void arrangement(int n, int

m, setalgorithmcallback callback)

6274}75

76static

bool combination(int n,int m, int i, int rlen, int

result, setalgorithmcallback callback)

7787

return

true;88

}89///90

///求組合c(n,m)

91///

92///

集合元素個數

93///

取出元素個數

94///

**95

public

static

void combination(int n, int

m, setalgorithmcallback callback)

96110

}111

112static

bool subset(int n, int i, int rlen, int

result, setalgorithmcallback callback)

113126

return

true

;127

}128

///129

///求除空集外包含n個元素的集合的真子集

130///

131///

集合元素個數

132public

static

void subset(int

n, setalgorithmcallback callback)

133146

}147

148static

bool cartesianproduct(int sets, int i, int

result, setalgorithmcallback callback)

149158

else

159163

}164

return

true

;165

}166

///167

///求集合笛卡爾積

168///

169///

包含集合元素個數的陣列

170///

**函式

171public

static

void cartesianproduct(int

sets, setalgorithmcallback callback)

172176

}177 }

提供了以下幾個通用的演算法:

求排列  求組合  求集合真子集  求集合笛卡爾積

沒啥技術性,主要是泛用性.

例如: 已知3個集合    

求所有的著裝組合.可以使用笛卡爾積演算法:

1

var c1= new

string;

2var c2 = new

string ;

3var c3 = new

string ;

4 setalgorithms.cartesianproduct(new

int , (result, len) =>5,,

", c1[result[0]], c2[result[1]], c3[result[2

]]);

7return

true

;8 });

其餘的呼叫方法也類似. 舉個更實際的例子,例如這帖的問題:

例如,商品屬性:

品牌: 海爾 lg 三星 索尼 夏普 tcl 創維 長虹 飛利浦 康佳

尺寸: 60寸以上 55寸 52寸 5 0寸 47寸 46寸 42寸 

液晶面板 : ips硬屏面板 va面板 asv面板 黑水晶面板 x-gen超晶面板

每個屬性都是乙個集合,列舉出所有篩選可能,包括只選乙個條件,現在是3個屬性,如果屬性個數不確定怎麼實現

對於這個問題.除去有未選的情況,我可以將結果集看做幾個集合的笛卡爾集. 那對於未選狀態怎麼處理呢?我可以人為的為它的頭部加上乙個"未選"元素.例如品牌就變成了:

未選 海爾 lg 三星 索尼 夏普 tcl 創維 長虹 飛利浦 康佳

1

var bands = new

string ;23

var size = new

string ;45

var types = new

string ;67

var array = new

string

;8 setalgorithms.cartesianproduct(new

int , (result, len) =>9

", array[i][result[i]-1

]);15}16

console.writeline();

17return

true

;18 });

一些常用集合演算法 之組合生成

一些常用集合演算法 之組合生成 在開發過程中常常需要處理集合,因此我寫了一些常用演算法,貼出大家提提意見。本帖介紹組合生成演算法。開乙個陣列,陣列元素的值為1表示其下標代表的數被選中,為0則沒選中。首先初始化,將陣列前m個元素置1,表示第乙個組合選中前m個元素。然後找到從左到右的第乙個 10 組合,...

常用集合演算法

1.set intersection 求兩個容器的交集 include pch.h include include include using namespace std set intersection void test01 2.set union 並集 set union void test0...

C 常用集合演算法

set intersection 求兩個容器的交集 set union 求兩個容器的並集 set difference 求兩個容器的差集 1 set intersection 求交集,求交集的兩個集合必須有序,目標容器開闢空間需要從兩個容器中去最小值,set intersection返回值即是交集中...