繁体   English   中英

这段代码的运行时复杂度是多少?

[英]What is the run time complexity of this code?

我刚在一个面试问题中得到这个,但是被mod难住了,我的答案是O(log10),因为它每次都被分割,但我无法解释。 所以我把答案改成了 O(n) 但面试官说 n 代表什么,我想说 x,但这没有意义。 如果 x 为 1000,则代码不会运行 1000 次。

x是 1-10000000 之间的任何数字

def code(x):
    count = 0
    while x > 0:
        x = x // 10
        result = x % 7
        if (result % 7 )== 0:
            count += 1
    return count

while 循环执行大约log 10次。 rest 是恒定时间操作。 因此,您的时间复杂度为O(log x) 请注意,在大 O 表示法中,对数的底数无关紧要。

一个更复杂的问题是count相对于x有什么值。 但这不是你要求的。 请注意,这些计算(假设是恒定时间算术运算)需要恒定时间,就像行x = x // 10一样。

编辑:如果x在上面有界,那么时间复杂度是O(log n)还是O(1)就会变成一个哲学问题。 这取决于您如何看待它(边界是算法的一部分,还是您是否将算法视为一般算法,而边界只是您对输入的了解)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM