首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据大小为n的输入所需的基元操作,最合适的运行时公式

根据大小为n的输入所需的基元操作,最合适的运行时公式
EN

Stack Overflow用户
提问于 2019-08-26 16:08:15
回答 2查看 100关注 0票数 0

当从里到外解析时,我得到:

内部循环= 3n+1

主循环+内循环=3+ (3n +1) + logn =4+ 3n + logn

额外步数+所有循环=4+ n(4 + 3n + logn) =4+ 4n + 3n2 + logn

下面是要分析的代码:

代码语言:javascript
复制
def rate(n):
    total= 0
    i = 1
    while i < n:
        j = 0
        while j < n:
            total= i * j + total
            j = j + 1
        i = i * 2
    return total

答案应该是--> f(n) =4+ 4log(n) + log(n)*(3n)

EN

回答 2

Stack Overflow用户

发布于 2019-08-26 16:15:54

实际上,我在这里提出了O(NlgN)来表示总体运行时间。可以理解,j中的内部循环不依赖于i中的外部循环。以下情况应为真:

  • i中的外部循环是O(lgN),因为i在每次迭代中都是双倍的,这是指数行为。
  • j中的内部循环是O(N),因为无论i.

的值如何,<代码>d12在每次迭代中从0循环到<代码>d13

因此,我们可以将这些复杂性相乘,得到总体复杂性。

请注意,对于任意大小的N,您的表达式:

代码语言:javascript
复制
4 + 4log(n) + log(n)*(3n)

缩减为NlgN

票数 2
EN

Stack Overflow用户

发布于 2019-08-26 16:19:50

代码语言:javascript
复制
def rate(n):
    total= 0     
    i = 1        

while i < n: //This outer loop runs O(log(n)) times

代码语言:javascript
复制
        j = 0    

while j < n: //This inner loop runs O(n) times for each iteration of outer loop

代码语言:javascript
复制
            total= i * j + total
            j = j + 1
        i = i * 2
    return total

因此,在big-O中实现的总运行时复杂度是=O((N))* O(n) = O(nlog(n))

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

https://stackoverflow.com/questions/57654050

复制
相关文章

相似问题

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