【问题标题】:What is the worst-case time complexity for this code?这段代码的最坏情况时间复杂度是多少?
【发布时间】:2020-04-01 01:29:14
【问题描述】:

我在课堂上有一个小测验,但做得不太好。我正在寻找是否有人可以向我解释我在这里做错了什么——当我们搬到网上时,我们的教授忙于办公时间,所以我想我会在这里发帖。

def functionA(n):
    level = n 
    total = 0
    while level > 1:
        for i in range(0,n):
            level = level // 2
            total = total + i
    return total

我的回答:上面的函数是 O(log n),因为 for 循环在每次迭代中将 level 变量分成两半。

我得到了 5/10 分,但它并没有真正解释它的错误或正确之处。我做错了什么,为什么?

用于证明测验已评分并返回的图片。只是想弄清楚。

【问题讨论】:

    标签: algorithm big-o


    【解决方案1】:

    问题出在这一行:

    for i in range(0,n):
    

    由于nlevel 是两个完全独立的变量,它们是nn 的副本永远不会改变,所以这个循环总是O(n)。

    一旦我们确定内循环是 O(n),我们就需要计算外循环的复杂度。

    在外循环的第一次迭代中,内循环重复设置level = level // 2。由于这个赋值会很快将level 减少到 1,因此外部循环保证在第一次迭代后终止,使其成为常数时间。

    对于内部 for 循环的单次迭代,我们的整体复杂度为 O(n)。

    【讨论】:

    • 哦,哇,非常感谢 - 这完全有道理。时间到了我就去给你支票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多