首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >前缀和算法的时间复杂度

前缀和算法的时间复杂度
EN

Stack Overflow用户
提问于 2018-04-03 16:31:41
回答 2查看 1.5K关注 0票数 0

给定以下伪代码,我想知道在试图确定时间复杂性时,我的思维过程是否正确。

代码语言:javascript
复制
for i = 0 to n-1
   Add the numbers A[0] thru A[i].
   Store the result in B[i].

该算法将循环n次,由于最后一次迭代将需要最多的计算量(n次计算),该算法总共将进行n^2 + f(n)计算。其中f(n)是一次n^2 或更小的多项式,因此该算法是二次O(n^2)算法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 16:45:32

由于Add the numbers A[0] thru A[i].的时间复杂性是\Theta(i),所以代码的时间复杂性将是\Theta(1 + 2 + 3 + ... + \Theta(n)) = \Theta(n^2)。因此,您对代码的分析是正确的。

票数 3
EN

Stack Overflow用户

发布于 2018-04-03 16:55:03

我们可以用以下代码替换您的代码

代码语言:javascript
复制
    for i 0 to n - 1
        for j 0 to i
            b[i] += a[j]   <---

为了找到这个算法的大O,我们需要计算执行第3行的次数。

为了简单起见,让我们假设所有ai元素都等于1,所以如果我们在0到n-1时找到bi的和,那么我们就可以找到运行第3行的次数。

代码语言:javascript
复制
i: b[i]
0: 1
1: 2
2: 3
..
n - 1: n

因此,所有Bi的总和为n* (n + 1) /2,即O(n^2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49634980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档