Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python麻省理工学院讲座:示例的日志(n)复杂性_Python_Big O - Fatal编程技术网

Python麻省理工学院讲座:示例的日志(n)复杂性

Python麻省理工学院讲座:示例的日志(n)复杂性,python,big-o,Python,Big O,这是麻省理工学院python编程课程第8课的一段代码 def(x): assert type(x) == int and x >= 0 answer = 0 s = str(x) for c in s : answer += int(c) return answer 正如教授所说,这段代码的复杂度是(x)的10倍。 他解释说(正如我所能理解的),每次循环迭代,C可以是十位数字(0-9)中的一位,这将基数10变成对数算术 然而我不

这是麻省理工学院python编程课程第8课的一段代码

def(x):
    assert type(x) == int and x >= 0
    answer = 0 
    s = str(x)
    for c in s :
        answer += int(c)
    return answer 
正如教授所说,这段代码的复杂度是(x)的10倍。 他解释说(正如我所能理解的),每次循环迭代,C可以是十位数字(0-9)中的一位,这将基数10变成对数算术

然而我不明白,为什么会这样?原因复杂性实际上取决于列表S的长度,而不是C选择的变化


有人能解释一下吗

花费的时间取决于
x
中作为十进制数的位数。正十进制数
x
中的位数为
floor(log10(x))+1
(很好地解释了这一点的原因):

因此,正如教授所说,时间复杂度为log10。换句话说,随着
x
的增加,我们需要处理的位数随着
log10(x)
的增加而增加

他解释说(正如我所能理解的),每次循环迭代,C可以是十位数字(0-9)中的一位,这将基数10变成对数算术


这不是原因。可以采用哪些值
c
并不重要。重要的是它需要多少值——答案是:
x
中的每个数字需要一个值。并且
x
有O(log10x)个十进制数字。这就是数字表示法的工作原理:在任何基数b中,任何数字n的表示都有logbn+1位。

实际上,您已经回答了您的问题:

复杂性实际上取决于列表S的长度,而不是C选择的变化

列表
S
的长度是数字
x
中的位数。一个数字的位数是其日志的底部加上一

Range of numbers   Range of log (base 10) value    Number of digits
           1 - 9                         [0, 1)                   1
         10 - 99                         [1, 2)                   2
       100 - 999                         [2, 3)                   3
     1000 - 9999                         [3, 4)                   4
   10000 - 99999                         [4, 5)                   5
所以,不管数字是什么,这里唯一重要的是它的位数,这个数字等于
floor(log10(x))+1

这可以推广到任何数字基:整数
x
b
-基表示中的数字
n
等于
b
-基日志
x
1
的下限值

例如,二进制数中的位数为

Decimal range    Binary range    Range of log (base 2) value    Number of bits
            1               1                         [0, 1)                 1
        2 - 3         10 - 11                         [1, 2)                 2
        4 - 7       100 - 111                         [2, 3)                 3
       8 - 15     1000 - 1111                         [3, 4)                 4
      16 - 31   10000 - 11111                         [4, 5)                 5

谢谢您的详细解释!谢谢,我会记住这是一条公理。
Decimal range    Binary range    Range of log (base 2) value    Number of bits
            1               1                         [0, 1)                 1
        2 - 3         10 - 11                         [1, 2)                 2
        4 - 7       100 - 111                         [2, 3)                 3
       8 - 15     1000 - 1111                         [3, 4)                 4
      16 - 31   10000 - 11111                         [4, 5)                 5