我正在尝试根据在任意数量的部分中所做的选择找出生成有效案例列表的最佳方法。也许它不是真正的算法,而只是关于如何有效迭代的建议,但对我来说这似乎是一个算法问题。如果我错了,请纠正我。实现实际上是在 Javascript 中,但它同样适用于任何语言,因此是非特定于语言的问题。
所以有很多部分,每个部分都有不同的选择,每个部分的数据可以有任意数量的选择。
如果在一个部分中没有做出任何选择,则允许该部分的所有数据通过。如果做出选择,则数据必须有一个或多个选择。
例如,使用:
Section: vacancy types
Choices: 1, 3
Section: exhibitor categories
Choices: 1, 5, 9
我想得出以下有效案例:
1,1
1,5
1,9
3,1
3,5
3,9
正如我所说,如果没有做出任何选择,所有数据都应该被允许通过,这是我在计算迭代时最困难的地方。但我也想要一个通用迭代,它可以用于任意数量的部分,而不仅仅是两个部分。
我确信这很简单,毫无疑问我在这里的语言并不理想(应该在计算机科学类(class)中更仔细地听)但是我如何设置我的迭代来给我上面的内容?
我不知道如何找到合适的资源来阅读这篇文章,所以只有一两个相关链接是可以接受的答案,当然我也对具体答案感兴趣。
谢谢。
最佳答案
您的有效案例是cartesian product两个部分的选择。您可以计算一个高阶乘积,它会产生一系列具有 N 个元素的选择组合,其中 N 是乘积的阶数(部分数)。
最自然的算法是使用递归,但是iterative algorithms也有可能,因为你已经发现了自己。我在使用 LINQ 时玩得很开心正如 Eric Lippert 所解释的那样.
关于定义有效案例的算法/迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931166/