【问题标题】:Optimal substructure for least number of perfect squares完美平方数最少的最优子结构
【发布时间】:2016-02-16 06:31:11
【问题描述】:

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

问题:找出总和等于给定数字的完美平方的最少数量。

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

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

【问题讨论】:

  • 假设我们想找到从 U 到 V 的最短路径。如果我们之间有一个节点 X,那么从 U 到 V 的最短路径将是从 U 到 X 的最短路径加上最短路径从 X 到 V 的路径。 仅当从 U 到 V 的最短路径包含 X 时才成立。我不知道您如何确定此条件是否适用于您的问题,但它确实会大大简化搜索。
  • X 是 U 和 V 之间的任何节点。

标签: algorithm dynamic-programming least-squares


【解决方案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 }

这意味着必须考虑原始参数到两个加法的所有分区。直观地说,最短路径问题的“分裂点”是一个节点,而在完美平方问题中,它决定了如何划分为和数(然后进一步检查)。

【讨论】:

  • 非常感谢!
【解决方案2】:

你没有正确地陈述属性,第三段应该这样改写:

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

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

对于解决方案,使用数组来缓存从0i 的最小路径,对于从i0n,对于每个新值,线性搜索将产生最佳解决方案,总时间复杂度为 O(n2)

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

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

有问题的问题:找出与给定数相加的完美平方的最少个数。 已经被广泛研究了 17 个多世纪:Lagrange's four-square theorem,也被称为巴歇猜想丢番图在三世纪就知道了。它指出每个自然数都可以表示为四个整数平方的和。存在用于确定任何给定整数是否是 1、2、3 或 4 个完全平方和的解析解决方案。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2017-12-23
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多