我对自己的任务有疑问。 我需要确定以下算法的Big-O特征:
我猜测问题1的答案是O(n),问题2是O(log n),但我有点困惑 如何说明原因。我的答案是否正确?你能解释一下这种表征的原因吗?
答案 0 :(得分:2)
问题1:O(n)
因为它以常数(1)递增
第一个循环O(n)
第二个循环也O(n)
总计O(n) + O(n) = O(n)
问题2:O(lg n)
它的二进制搜索。
它O(lg n)
,因为问题每次都减半。
如果数组的第一秒n
大小为n/2
,则为n/4
..... 1
。
n/2^i = 1
=> n = 2^i
=> i = log(n)
。
答案 1 :(得分:0)
是的,你的答案是对的。第一个很简单。 2 单独的 for
循环。如此有效地O(n)
。
第二个实际上很棘手。实际上,您将输入大小除以2(一半),这将导致O(log n)
的时间复杂度。