【发布时间】:2015-06-18 05:42:40
【问题描述】:
我最近遇到了这个问题的一个更困难的变体,但我意识到我无法为这个非常简单的案例生成解决方案。我搜索了 Stack Overflow,但找不到以前回答过这个问题的资源。
给定一个三角形 ABC,您必须计算从“A”开始到“A”结束的特定长度路径的数量。假设我们的函数 f(3) 被调用,它必须返回从 A: 2 (ABA,ACA) 开始和结束的长度为 3 的路径数。
我无法制定一个优雅的解决方案。现在,我已经编写了一个生成所有可能路径的解决方案,但是对于更大的长度,程序太慢了。我知道必须有一个很好的动态编程解决方案,它可以重用我们之前计算过的序列,但我不太明白。非常感谢所有帮助。
我的愚蠢代码:
def paths(n,sequence):
t = ['A','B','C']
if len(sequence) < n:
for node in set(t) - set(sequence[-1]):
paths(n,sequence+node)
else:
if sequence[0] == 'A' and sequence[-1] == 'A':
print sequence
【问题讨论】:
-
你能举一个稍微大一点的三角形的例子吗?
-
对不起,我不太明白。如果我在三角形上添加另一个点,那将是另一个循环图,只有 4 个点?我现在会尝试解决这个问题
-
我的意思不是 4 分 - 只是您需要做的任何事情来显示您所描述的稍微“更大的长度”。
-
抱歉。在 n = 21 的情况下,有 349526 条路径。我只是觉得必须有一些数学解决方案或技术来更快地计算它
-
有,看看我的回答并尝试 n = 21,它给出 349526 作为输出
标签: algorithm recursion dynamic-programming combinatorics