Algorithm 使用动态规划找到最适合一组数据点的多边形链
问题如下: 给定n个点的序列p_1=(x_1,y_1),…,p_n=(x_n,y_n)并按其x坐标(即x_1Algorithm 使用动态规划找到最适合一组数据点的多边形链,algorithm,dynamic-programming,Algorithm,Dynamic Programming,问题如下: 给定n个点的序列p_1=(x_1,y_1),…,p_n=(x_n,y_n)并按其x坐标(即x_1
我的回答有什么问题吗?谢谢。示例,其中最好为链使用非
p
(一组p_i
)中的点
P = {(0, 0), (1, 1), (3, 1), (4, 0)}
k = 2
+ (2,2)
* (1,1) * (3,1)
* (0,0) * (4,0)
对于点位于p
中的链,有两种可能性,都具有f(1,4)=2/3
。将(2,2)
作为链点,得到f(1,4)=0
链点位于p
的问题的无限制解决方案可能很难用DP方式描述。它看起来更像是有很多约束的回归问题
我假设在这个问题中,链点应该来自p
更新
低级递归和原始的一样,就像j_random_hacker提到的
我认为最好定义稍微不同的函数。将C(a,b,e)
定义为具有e
边的点p_a
和p_b
之间链的最小成本。我们问题的答案是C(1,n,k)
可以使用不同的递归。这一条是由最后一条边的“长度”决定的:
C(a, b, k+1) = min( C(a, c, k) + C(i, b, 1) ), for i in a+k, b-1
你忘了定义函数,所以我看不出真正的问题。您只是想验证您的重复是否正确吗?很抱歉没有函数定义,因为我无法上载图像。是的,我的重复对于以下问题是正确的:我们想找到一个从p1到pn的多边形链,具有从左到右的k条边,最小化点到链的垂直距离之和。然后至少在问题中发布链接或注释,以便我们可以为您编辑它现在可用,对此我很抱歉。+1作为你的反例:)但是我认为你的递归没有帮助——我认为它计算的东西与原始递归相同,但速度较慢,因为它使用了更多的参数。@j_random_hacker你是对的,这与原始递归完全相同。只有两种类型的C()出现:C(1,i,k)(在原来的C[i,k]中)和C(i,b,1)(f(i,b))。C(a,b,e)的定义提供了不同类型的递归:从开始(像原始的),从结束(相反的)。。。这在最后并没有太大帮助:-/
C(a, b, k+1) = min( C(a, c, k) + C(i, b, 1) ), for i in a+k, b-1