最小完美正方形的最优子结构

时间:2016-02-16 06:31:12

标签: algorithm dynamic-programming least-squares

问题:我知道递归是如何工作的,但我似乎无法理解最佳子结构'对于这个问题,需要使用动态编程。

问题:找出总和达到给定数字的最少数量的完美正方形。

我们想要找到从U到V的最短路径。如果我们之间有一个节点X,那么从U到V的最短路径将是从U到X的最短路径加上从X到X的最短路径诉

我很难理解最小二乘问题如何遵循最优子结构属性。

2 个答案:

答案 0 :(得分:1)

你没有正确陈述属性,第三段应该用这种方式改写:

  

假设我们要找到从U到V的最短路径。首先验证U和V是否直接链接,如果不是,则计算U和V之间的每个节点X从U到X的最短路径加上最短路径从X到V,最小的答案将是从U到V的最短路径,可能是重复的。

这适用于您的问题,因为您可以确定在 U和V之间的节点X的集合。对于U = 0和V = n,此集合是来自{{的所有数字1}}到1,因为您正在添加正数。

对于解决方案,使用数组来缓存n-10ii的{​​{1}}的最小路径值,线性搜索将产生最佳解决方案,总时间复杂度为 O(n 2

您可以通过枚举小于或等于0的完美正方形来优化线性搜索。此列表比整个数字列表短得多。它的长度实际上是 sqrt(n),因此整体搜索的复杂性降至 O(n 3/2

缓存可以只是一对整数:路径的长度和最短路径之一上的中间X的值。这给出了空间复杂度 O(n)

有问题的问题:找到总数达到给定数字的最少数量的完美正方形。已被广泛研究超过17个世纪:Lagrange's four-square theorem,也被称为Bachet的猜想在第三世纪,Diophantus就已经知道了。它声明每个自然数可以表示为四个整数平方的总和。存在分析解决方案以确定任何给定的整数是否是1,2,3或4个正方形的总和。

答案 1 :(得分:1)

据我所知,完美平方和的递推关系表现与以下方式的最短路径的递归关系类似。让

f(n) := minimum number of perfect squares which sum up to exactly n

然后适当的复发可以表示为

f(n) = min{ f(n-i) + f(i) : 0 < i < n }

这意味着必须考虑将原始参数的所有分区分成两个加数。直觉上,“分裂点”&#39;对于最短路径问题是一个节点,在完美正方形问题中,它决定如何分割成求和(然后进一步检查)。