繁体   English   中英

简单python代码的时间复杂度

[英]Time complexity of simple python codes

我正在尝试比较两个简单的 Python 代码的时间复杂度。

#1st solution
m = num
cnt = 0
while m > 0:
    if m % 10 == 0:
        cnt = cnt + 1
    m = m // 10

#2nd solution
cnt = 0
snum = str(num)
for digit in snum:
    if digit == "0":
        cnt = cnt + 1

我认为第一个解决方案是 O(n^2),第二个是 O(n)。 我对么?

第一个解决方案是 O(log n)。 每次迭代都会减少一个数量级。 第二个解决方案也是如此,所以它是一样的。 如果还包括代码的输出,可能会更清楚一些,例如 n=123456789 (num = 10-digit, log(n)~=10)

    #!/usr/bin/env python3
    num = 123456789
    m = num
    cnt = 0
    while m > 0:
        if m % 10 == 0:
            cnt = cnt + 1
        m = m // 10
        print(str(m))        
    print("------------")

    cnt = 0
    snum = str(num)
    for digit in snum:
        if digit == "0":
            cnt = cnt + 1
        print(str(snum))

输出:

    12345678
    1234567
    123456
    12345
    1234
    123
    12
    1
    0
    ------------
    123456789
    123456789
    123456789
    123456789
    123456789
    123456789
    123456789
    123456789
    123456789

O(log10base(m))如果我们将 m 视为数字,则O( len(m) )如果我们将其视为字符串。 两者都是一样的。

暂无
暂无

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

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