【发布时间】:2015-09-10 22:49:48
【问题描述】:
给定一个由 N 个整数组成的数组(元素为正数或 -1),以及另一个整数 M。
对于每个 1 ,我们可以跳转到数组的 i + 1, i + 2, .. i + M 索引。从索引 1 开始,有一个线性 O(N) 算法,可以找出最小成本以及到达 Nth 索引的路径。其中成本是从 1 到 N 的路径中所有元素的总和。我有一个复杂度为 O(N*M) 的动态规划解决方案。
注意:如果 A[i] 为 -1,则表示我们无法登陆第 ith 索引。
【问题讨论】:
-
非负值是走这条路的成本吗?否则,这是一个微不足道的贪心算法:尽可能跳(向后搜索来自
A[i+M]的非负条目),直到i+M >= N。 -
如果数组值是成本,那么你有一个图问题,有向无环图。每个节点
A[i]连接到所有具有非负索引的节点A[i+1 .. i+M]。您存储图形的方式可能对寻路算法有利也可能不利,但转换为另一种表示形式可以在线性时间内完成。 -
我认为 O(NM) 复杂度的动态规划解决方案。即使你用一个图,这个图的节点也是O(mn)...
-
@kaitian:有 N 个节点,但有
O(N*M)边。问题是是否有办法利用冗余:进入A[i]的所有边具有相同的成本。显然,您可以非常快速地找到 a 路径,甚至可以对其进行一些细化以找到局部最小值。 (启发式取决于预期的成本分布。例如,找到A[i+M-16 .. i+M]的最小值。) -
请解释什么是成本属性。显然不允许使用负值。对吗?
标签: algorithm dynamic-programming