给定一个只包含正整数的数组,该数组已经有了前k个元素:a1, a2, .... ak。
我需要填充剩余的(n - k)个元素(数组总共有n个元素)。
n的值约为10 ^ 3,且1 <= k <= n。
每个ai的值是两个数字之和的最小值,这两个数字的位置之和等于i。
以下是伪代码(我的算法):
我需要填充剩余的(n - k)个元素(数组总共有n个元素)。
n的值约为10 ^ 3,且1 <= k <= n。
每个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的值。
附言: 这是我的程序中的一个过程,所以我需要尽快完成。
+
替换为*
,并将min
替换为+
,并且还有a1 = a2 = 1
(并且您正在寻找a3,...
),您最终会得到卡特兰数列 。在这种情况下,您可以得到包括卷积的递归关系式,因此可以使用生成函数得到闭合形式解。不幸的是,所有这些在您的问题中都不可能。 - iavra1 = 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......以此类推。 - enofwiz