【发布时间】:2014-08-09 04:50:40
【问题描述】:
给定一个已经包含前 k 个元素的数组(仅包含 正 个整数):a1、a2, ....一个k。
我需要填充剩余的 (n - k) 元素(数组总共有 n 元素)。
n 的值约为 10 ^ 3 和 1 。
每个 ai 的值是两个数的最小和,使得这两个数的位置和等于 i。
这是伪代码(我的算法):
for i = k + 1 to n
a[i] = max_value
for j = 1 to (i / 2)
a[i] = min(a[i], a[j] + a[i - j])
时间复杂度:O(n ^ 2)
问题:有没有其他方法可以更快地做到这一点?
我正在寻找可以在小于 O(n) 的时间内找到每个 ai 值的任何数据结构或算法。
P/S:这是我程序中的一个过程,所以我需要尽快完成。
【问题讨论】:
-
如果它是真正的代码,你真正想要做什么?这看起来像 XY problem。
-
我添加了描述,这就是我的代码(直截了当)
-
我看了你的编辑。你的问题还是太抽象了。你的代码试图解决什么真正的问题?
-
我没有严格的证明,但我强烈认为 O(n) 无法改进。恕我直言,这仍然是一个好问题 +1
-
@ColonelPanic:例如:我们有
a1 = 10, a2 = 6, a3 = 4,我们需要计算a4, a5,.... 以下是计算:a4 = min(a1 + a3, a2 + a2) = 12 ; a5 = min(a1 + a4, a2 + a3) = 10; a6 = min(a1 + a5, a2 + a4, a3 + a3) = 8... 以此类推。
标签: c++ arrays algorithm data-structures