本文共 720 字,大约阅读时间需要 2 分钟。
首先,让我给你定义O(N logn)是什么。这意味着程序将最多运行N个logn操作,即它的上限为~N logn(其中N是输入的大小)。
现在这里,你的N是数字的大小,或者你的代码:N = len(numbers)
注意,第一个for循环从0运行到N-1,总共执行N个操作。这就是第一个N的来源。
-
那么,日志N从哪里来?它来自while循环。
在while循环中,将2乘以j,直到j大于或等于N
这将在我们执行循环~log2(N)次后完成,循环描述了我们需要将j乘以2多少次才能得到N。例如,log2(8)=3,因为我们将j乘以2三次才能得到8:#ofmult. j oldj
1 2 2
2 4 4
3 8 8
为了更好地说明这一点,我在代码中为I和j添加了一个print语句:def complex(numbers):
N = len(numbers)
result = 0
for i in range(N):
j = 1
while j < N:
print(str(i) + " " + str(j))
result += numbers[i]*numbers[j]
j = j*2
return result
运行时:>>> complex([2,3,5,1,5,3,7,3])
这是输出的:0 1
0 2
0 4
1 1
1 2
1 4
2 1
2 2
2 4
3 1
3 2
3 4
4 1
4 2
4 4
5 1
5 2
5 4
6 1
6 2
6 4
7 1
7 2
7 4
注意我们的i是如何从0…7(N次,共O(N))开始的,第二部分,每个i总是有3个(log2(N))j输出。
所以,代码是O(N log2n)。
转载地址:http://awyhp.baihongyu.com/