kwcombinatorics元件文章目錄:
本文後面的資源提供了所有源碼和幫助檔案,以及dll檔案的打包下載下傳。可以下載下傳到最新的源代碼和幫助文檔,目前最新的穩定率版本是4.0,相比之前又增加了幾個新功能,并進行了一些優化。
該類庫簡單,隻有5個類,dll檔案也隻有幾十kb,下面将介紹幾個主要的功能。
排列組合是組合學最基本的概念:
排列,是指從給定個數的元素中取出指定個數的元素進行排序的所有情況。
組合,是指從給定個數的元素中僅僅取出指定個數的元素,不考慮排序的所有情況。
笛卡爾積的定義還是直接看下面的表達式,product的作用也就是幹這個的:
product類就是根據多個資料源(a ,b ..),選擇指定個數的元素,進行組合。就是上面的笛卡爾積的選擇方式,看看product幾個主要的構造函數如下:
參數主要有下面幾個注意點,參數的意義和combination有些不一樣:
sizes:是指每個乘數(a,b,c...)的長度數組,例如:{2,3},代表a,b的長度為2,3,這樣就會初始化一個{0,1},{0,1,2}的元素數組進行笛卡爾積的計算
source:的用法如rank有些類似,該數組長度和siezes一樣,其意義就是分别取對應乘數位置的 元素,進行組合得到的清單;
rank:這個屬性和source可以根據實際情況使用,rank是直接擷取相對總數的位置的清單;而source是指定每個元素進行組合。
下面用幾個例子說明幾個主要方法的使用情況。
為了便于簡單觀察結果,我簡單的計算3個元素清單{0,1} * {0,1} ,{0,1} 的笛卡爾積,擷取所有的組合情況有哪些呢?直接上代碼,比較容易看得懂:
大家可以修改代碼,看看其他結果:
運作結果如下:
上述例子很清楚的說明了正常所有笛卡爾積的組合,排列群組合一樣,它也提供了類似的映射功能,可以擷取其他對象的組合情況,為了簡單明了,上代碼:
結果如下:
當然其他對象也類似,大家可以依次類推。
這個類也提供了rank功能,也是需要擷取指定位置的排列,為了群組合的對比,我們采用了幾乎一樣的代碼,但參數不一樣,看代碼和結果就知道了:
結果:
在這裡,這個元件的3個主要功能就介紹完成了,這裡要說的是,這3篇文章也隻是介紹了元件的一些正常應用。大家可以看源碼的例子,發現更多的應用。例如,還可以将你的實體類繼承 組合 或者 排列 類,可以讓一些對象生成排列組合的使用更簡單。希望這幾篇文章對大家有用。