數學組合非常適宜用一個類來實現。你需要數據成員存儲 n 的值(條目總數),k(每個子集元素的條目個數)的值,以及一個數組來保存每個組合元素的“原子”。 Figure 3 是表述某個Combination(組合)對象的基本代碼和創建該組合對象第一個詞典元素的構造函數,以及將它表示為一個字符串的代碼。我決定使用C#,但你可以 輕松地將它改編為你所選的任意一種基于 .NET的編程語言。
我將這個代碼放入類庫(Class Library)編譯后,我可以給它增加一個工程選項參數(Project Reference),并從 .NET 控制臺 程序調用它,就象我在此所做的這樣:
Combination c = new Combination(5,3);
Console.WriteLine("\nCombination c(5,3) is initially " + c.ToString());
下面的輸出將顯示在屏幕上: Combination c(5,3) is initially { 0 1 2 }
當組合類的構造函數進行如下調用時: Combination c = new Combination(5,3);
我在內存中獲得一個對象,它表示五個條目中一次取三個的最初的詞典排序的數學組合元素。內存中的對象可以被表示為如 Figure 4 所示。

Figure 4 內存中的對象
構造函數代碼創建最初的組合元素時是相當簡單的。兩個代表條目總數和子集大小的參數被分別存儲在數據成員 n 和 k 中。因為我處理的數值可能會很大, 所以我決定使用 C# 的 long 類型代替int 類型。如果我愿意的話,我可以用 ulong 類型(無符號 long)獲得雙倍的數值范圍。我用子集的大小 k 來為一個 long 類型的命名數組分配空間,然后用 0 到 k-1 范圍的整數填充每個數據單元。
計算組合元素的個數
現在我已經確定了如何創建一個組合對象,讓我們看看組合的三個基本操作的第二個——根據某個給定的條目總數 n 及子集大小 k 來計算組合元素的總數。舉個例子,如果你處理一次從 n=5 條目中取 k=3,這里有10種可能的組合元素:
{ 0, 1, 2 } { 0, 3, 4 }
{ 0, 1, 3 } { 1, 2, 3 }
{ 0, 1, 4 } { 1, 2, 4 }
{ 0, 2, 3 } { 1, 3, 4 }
{ 0, 2, 4 } { 2, 3, 4 }
文章來源于領測軟件測試網 http://www.kjueaiud.com/