2013-12-12 59 views
1

編輯

剛剛發現另一個線程所以這是非常正是我需要的:How can I create cartesian product of vector of vectors?如何將一組值映射到另一組值?

謝謝大家!


比方說,我有值S1(A, B, C)的一組和另一個S2(D, E, F),其中改造S1 -> S2會給另一組,S3,其中S3(AD, AE, AF, BD, BE, BF, CD, CE, CF);換句話說,我想將第一組的每個值映射到第二組的每個值,從而得到大小爲S1 x S1的第三組。現在

,做這兩套是一件小事,但是,我在當它涉及到具有可變多套虧損,即S1 -> S2 -> S3 -> ... -> Sn

如果我們認爲這是一個樹/圖結構,通過查找每條路徑可以解決問題:

 start 
      . 
    .  .  . 
    A  B  C 
    .  .  . 
. . . . . . . . . 
D E F D E F D E F 

是否有可擴展算法來解決此問題?

+1

查看[笛卡爾產品](http://en.wikipedia.org/wiki/Cartesian_product)。我知道一些語言有這個內置的。例如,Python有'itertools.product(* iterables)' – Kevin

+0

@Kevin實際上偶然發現了它[僅2分鐘前](http://en.wikipedia.org/wiki/Projection_%28set_theory%29);不幸的是,我不認爲C++有這個。 – stellarossa

+1

谷歌n-ary笛卡爾產品。有很多變化,但都有O(n^2)的複雜性。 –

回答

2

根據定義,這將是遞歸。如果將所有這些集合放入多維數組中,您可以輕鬆地遍歷所有不同級別並創建最終集合。

+1

Kirkland的意思是,一般情況下,可以用遞歸算法遍歷樹狀結構,在該算法中,將樹的每個節點(除葉節點之外)作爲自己的樹對待。當然,沒有代碼示例,這很難直觀。 –

相關問題