【发布时间】:2018-03-16 17:01:15
【问题描述】:
我的代码有一个名为 INPUTS 的列表,其中包含动态数量的列表,我们称它们为 A、B、C、..N。这些列表包含动态数量的事件
我想为每个事件组合调用一个函数。举例说明:
INPUTS: A(0,1,2), B(0,1), C(0,1,2,3)
我需要为每个组合多次调用我的函数(输入计数是动态的,在本例中是三个参数,但可以或多或少)
function(A[0],B[0],C[0])
function(A[0],B[1],C[0])
function(A[0],B[0],C[1])
function(A[0],B[1],C[1])
function(A[0],B[0],C[2])
function(A[0],B[1],C[2])
function(A[0],B[0],C[3])
function(A[0],B[1],C[3])
function(A[1],B[0],C[0])
function(A[1],B[1],C[0])
function(A[1],B[0],C[1])
function(A[1],B[1],C[1])
function(A[1],B[0],C[2])
function(A[1],B[1],C[2])
function(A[1],B[0],C[3])
function(A[1],B[1],C[3])
function(A[2],B[0],C[0])
function(A[2],B[1],C[0])
function(A[2],B[0],C[1])
function(A[2],B[1],C[1])
function(A[2],B[0],C[2])
function(A[2],B[1],C[2])
function(A[2],B[0],C[3])
function(A[2],B[1],C[3])
这是我目前想到的: 到目前为止,我的方法是建立一个组合列表。元素组合本身就是输入数组 A、B 和 C 的“索引”列表。对于我们的示例:
我的列表 iCOMBINATIONS 包含以下 iCOMBO 列表
(0,0,0)
(0,1,0)
(0,0,1)
(0,1,1)
(0,0,2)
(0,1,2)
(0,0,3)
(0,1,3)
(1,0,0)
(1,1,0)
(1,0,1)
(1,1,1)
(1,0,2)
(1,1,2)
(1,0,3)
(1,1,3)
(2,0,0)
(2,1,0)
(2,0,1)
(2,1,1)
(2,0,2)
(2,1,2)
(2,0,3)
(2,1,3)
然后我会这样做:
foreach( iCOMBO in iCOMBINATIONS)
{
foreach ( P in INPUTS )
{
COMBO.Clear()
foreach ( i in iCOMBO )
{
COMBO.Add( P[ iCOMBO[i] ] )
}
function( COMBO ) --- (instead of passing the events separately)
}
}
但我需要找到一种方法来为任何给定数量的 INPUTS 及其事件构建列表 iCOMBINATIONS。有什么想法吗?
真的有比这更好的算法吗? 任何可以帮助我的伪代码都会很棒。
C#(或 VB)
谢谢
【问题讨论】:
-
您可能还想阅读大写约定...msdn.microsoft.com/en-us/library/ms229043.aspx
-
抛开大写约定,您正在谈论“笛卡尔积”,例如取 X 坐标和 Y 坐标,并查看所有可能的点 (X,Y)。从问题的正确名称开始应该会给您一些进展。请参阅下面的我的 cmets。
标签: c# algorithm combinatorics combinations