【问题标题】:Generating combinations of multiple sets生成多个集合的组合
【发布时间】:2014-11-04 12:53:31
【问题描述】:

我正在寻找一种非递归算法或 C 代码来生成多个集合的所有组合(不确定这是否是正确的学名)。例如:

我有 N=2 组符号:

set 1: [A, Y, Z]
set 2: [1, Q]

输出应该是:

A1
AQ
Y1
YQ
Z1
ZQ

N 可以变化,与特定集合中的符号数相同。提前感谢您的帮助! :)

【问题讨论】:

  • 您正在寻找Cartesian product
  • 谢谢!我实际上并没有注意到 :) 但是我仍然无法扩展计算以接受不定数量的集合。只有两个人很容易,但对于 N...?
  • 如果到那时您还没有收到答复,我会在晚上回复此问题。
  • 谢谢!我会很感激! :)
  • 好的,我自己做到了 :)

标签: c algorithm combinations


【解决方案1】:

算法来自:How can I compute a Cartesian product iteratively?

我们可以创建一个长度为 n 的 int 数组int[ ] choose[n] 来跟踪我们在所有列表中选择了多少元素。所有元素最初都设置为 0。

然后我们遍历存储所有这些数组的单链表。如果我们在数组ichoose[i]++ 中迭代了一个元素,则将其附加到结果中。选择[i] ==数组i的长度时,然后中断并继续前进到下一个数组。

但我不知道如何进行追加,因为每次我们遍历数组时,结果的大小都会扩大。

如果你知道了,请告诉我。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 2017-04-20
    • 2015-02-26
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多