天天看點

【原創】開源.NET排列組合元件KwCombinatorics使用(三)——笛卡爾積組合前言1.Product 類基本介紹2.擷取所有的笛卡爾積清單3.擷取任意對象的笛卡爾積清單4.進階—擷取任意Rank位置的組合5.總結6.資源

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篇文章也隻是介紹了元件的一些正常應用。大家可以看源碼的例子,發現更多的應用。例如,還可以将你的實體類繼承 組合 或者 排列 類,可以讓一些對象生成排列組合的使用更簡單。希望這幾篇文章對大家有用。