【发布时间】:2016-05-24 00:12:33
【问题描述】:
我有两个字符串数组,不一定具有相同的长度,我想从数组中找到两个值之间所有可能的组合“集合”,而不是从任何一个数组中重复。
例如,给定数组:
{ "A1", "A2", "A3" }
{ "B1", "B2" }
我想要的结果是以下几组:
{ ("A1", "B1"), ("A2", "B2") }
{ ("A1", "B1"), ("A3", "B2") }
{ ("A1", "B2"), ("A2", "B1") }
{ ("A1", "B2"), ("A3", "B1") }
{ ("A2", "B1"), ("A3", "B2") }
{ ("A2", "B2"), ("A3", "B1") }
我的总体方向是创建递归函数,该函数将两个数组作为参数并一次删除每个“选择”字符串,调用自身直到任一数组为空,但是我有点担心性能问题(我需要在大约 1000 对字符串数组上运行此代码)。
谁能指导我找到一种有效的方法来做到这一点?
【问题讨论】:
-
答案中的一对是:{("A1", "B1"), ("A2", "B2")};这是另一个有效的对还是重复的:{("A2", "B2"), ("A1", "B1")}
-
“高效”是什么意思?给定两个大小为
n和m、n <= m的数组,将有m*...*(m-n+1)集合。 -
@C.Evenhuis 组合之间的顺序无关紧要,我只需要唯一的集合
-
@Mr E 我通常对递归算法持保留态度,它们可以快速实现但性能较差,因此我的评论
标签: c# algorithm combinatorics