【问题标题】:Recursion - How to generate all sequences with given n and k递归 - 如何生成具有给定 n 和 k 的所有序列
【发布时间】:2021-11-26 09:20:48
【问题描述】:

给定 n 和 k,我需要生成以下所有序列:

n=5, k=2
0,1,2
0,1,3
0,1,4
1,2,3
1,2,4
2,3,4

另一个例子:

n=5, k=3
0,1,2,3
0,1,2,4
0,1,3,4
0,2,3,4
1,2,3,4

我认为这可以使用递归来解决,但被卡住了。需要帮助

【问题讨论】:

  • 如果您想帮助您完成明显属于您的作业,请付出一些努力。你试过什么?你有没有输入任何东西,或者你只是在打字的时候想出了最后一句话?粘贴一些代码。试着解释你不明白的部分。这也符合您的最大利益。

标签: algorithm recursion combinatorics


【解决方案1】:

您似乎已经知道如何生成序列,所以只需描述您在脑海中使用的规则即可。然后从那里向后工作程序。下面我们描述如何从任何可迭代的it 生成大小为k 的固定大小组合 -

  1. 如果要选择的数量k为零,则返回空组合()
  2. (感应)k 至少为一个。如果可迭代对象it 为空,则没有任何选择。停止迭代
  3. (inductive)k 至少为一个,并且可迭代对象具有至少一个元素。选择可迭代的第一个元素并将其添加到子问题的每个组合(it[1:], k - 1)。并且不要从子问题(it[1:], k)中选择这个元素和产量。
def choosek(it, k):
  if k == 0:                            # 1
    yield ()
  elif not it:                          # 2
    return
  else:                                 # 3
    for c in choosek(it[1:], k - 1):
      yield (*c, it[0])
    yield from choosek(it[1:], k)
for c in choosek("????", 2):
  print("".join(c))
??
??
??
??
??
??
for c in choosek("????", 3):
  print("".join(c))
???
???
???
???

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2011-05-05
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多