【问题标题】:Combinations of 1 2 3 4 [closed]1 2 3 4的组合[关闭]
【发布时间】:2013-12-07 03:06:29
【问题描述】:

我正在用 C++ 编写一个程序,我需要获取一组项目并生成所有唯一组合所有长度。我在这里看到了很多示例,它们采用 [1,2,3,4] 之类的集合并创建 [1,2,3,4], [1,2,4,3], [1,3 ,2,4], [1,3,4,2]...等,但这不是我需要的。我需要像 [1,2,3,4] 这样的集合并生成像这样的项目集:

1,2

1,3

1,4

2,3

2,4

1,2,3

1,3,4

2,3,4

1,2,3,4

(以及我可能错过的任何其他内容)

最简单的算法是什么?

【问题讨论】:

  • Knuth 的第 4A 卷涵盖了执行此操作的算法。
  • @ElGavilan 不用担心,你是对的。我只是想讽刺和有趣的是,即使硬件问题也能得到如此多的答案,包括来自我的答案。无法抗拒多汁的小问题,大声笑。祝你有个愉快的夜晚!

标签: c++ math combinations permutation


【解决方案1】:

假设您拥有完整长度解决方案的所有组合,然后要获得 {1, 2, 3, 4} 的所有长度,请执行以下操作:

  • 获取所有长度为 4 的解决方案
  • 删除 1 以获取 {2, 3, 4} 并递归调用此解决方案
  • 删除 2 以获取 {1, 3, 4} 并递归调用此解决方案
  • 删除 3 以获取 {1, 2, 4} 并递归调用此解决方案
  • 删除 4 以获取 {1, 2, 3} 并递归调用此解决方案

当然,当你只剩下一个元素时,不要试图解决它,而只是将它作为唯一的排列返回。

【讨论】:

    【解决方案2】:

    如果计算时间不是问题,您可以简单地使用您见过的那些“大量示例”来计算给定集合的所有排列,然后通过输入的所有子集运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      相关资源
      最近更新 更多