【发布时间】:2018-06-21 17:25:31
【问题描述】:
我正在从事一项动态编程任务,即沿着有向图查找最小成本路径(所有可能的路径具有相同数量的加权节点)。
解决问题的方法是递归函数和动态规划。
由于在代码过程中会遇到许多不相关的问题,因此线程的概念可能会有所帮助。
问题是,在 python 中,'threading' 没有多大帮助。 在 python 中处理此类任务的有效方法是什么?
代码如下:
def rec_fun(pos, path_size, weights, directions):
cost = weights[d][i, j]
if path_size == 0:
key = str(i) + ',' + str(j) + ',' + str(d)
dict.update({key: pix_cost})
return cost
else:
key = str(i) + ',' + str(j) + ',' + str(d)
if key in dict:
return dict[key]
else:
val = cost + min(rec_fun(pos + direction[0], path_size - 1, weights, direction),
rec_fun(pos + direction[1], path_size - 1, weights, direction),
rec_fun(pos + direction[2], path_size - 1, weights, direction))
dict.update({key: val})
return val
【问题讨论】:
-
所以...不要使用线程?我看不出是什么促使您首先要引入线程。动态编程不需要甚至不建议使用线程。
-
动态编程的重点不就是将子问题的解决方案存储在内存中以防止重做工作吗?线程化方法会使这变得困难。
-
@user2357112:这只是进一步提高效率的想法。
-
@Patrick Haugh:是的,这是主要思想。我们的问题是由许多不相关的子问题创建的,每个子问题都是使用动态规划解决的。这就是我发表线程评论的原因。
-
您的方法可以使用两个 for 循环和无递归来重写。然后你就会明白为什么线程不是进一步优化的方法。您可能正在考虑在不同线程中运行三个方向的成本计算,但这违背了动态规划的目的。
标签: python dynamic-programming