我一直在解决算法问题,我对这些术语有点困惑。
当我们想像下面的代码那样计算前缀和(或累积和)时,我们可以说我们正在使用动态规划吗?
def calc_prefix_sum(nums):
N = len(nums)
prefix_sum = [0] * (N + 1)
for i in range(1, N + 1):
prefix_sum[i] = prefix_sum[i - 1] + nums[i - 1]
return prefix_sum
nums = [1, 3, 0, -2, 1]
print(calc_prefix_sum(nums))
[0, 1, 4, 4, 2, 3]
根据此页面中的定义,
动态规划用于我们有问题的地方,可以将其划分为类似的子问题,以便可以重用它们的结果。
在我的prefix_sum算法中,将当前的计算(prefix_sum[i])分成类似的子问题(prefix_sum[i - 1] + nums[i - 1]),这样之前的结果(prefix_sum[i - 1])就可以被重复使用。所以我假设计算前缀和是动态规划的应用之一。
我可以说它是动态编程,还是应该使用不同的术语?(特别是在思考编码面试的情况。)