**
setalgorithm.cs
1using
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個集合
求所有的著裝組合.可以使用笛卡爾積演算法:
1var 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 創維 長虹 飛利浦 康佳
1var 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返回值即是交集中...