第6行在最坏的情况下运行T(n / 2)次。
第8行在最坏的情况下运行T(n / 2)次。
所以,T(n / 2)+ T(n / 2)+ d(+ d:用于次要恒定时间运算)
使用主定理:0 <1,因此T(n)= O(n)(答案:A)
答案D到底如何?
答案 0 :(得分:0)
首先避免使用链接,因为它们可能会失效。 您可以像我在下面完成的操作一样轻松键入图像中的代码
def select_number(A, low, high):
if low == high:
return A[low]
mid = (low+high) // 2
if A[mid] < A[mid+1]:
return select_number(A, mid+1, high) #line 6
else:
return select_number(A, low, mid) #line 8
用户致电select_number(A, 0, len(A)-1)
。
在不使用主定理的情况下,我们可以看到select_number
的任何调用最多只能对其进行一次递归调用,每次都将输入空间减少一半。这类似于二进制搜索,因此您的预期运行时间应为log n
。
您分别计算第6行和第8行的运行时间,而它们却是互斥的:如果一个运行另一个,则不会。 所以不是2T(n / 2),只有T(n / 2),这就是D中的解决方案。