10 个元素的二进制搜索复杂度是 0(log 10) = 1 ,但所需的比较是 4
Binary search complexity for 10 elements is 0(log 10) = 1 , but the comparision required are 4
以下集合有 10 个元素
{10, 20, 21, 22, 23, 40, 50, 56, 90, 100}
N = 10
O(log 10) = 1
如果要查找元素20则需要进行4次比较操作
(即)
1-comparision 10
2-comparision 23 (since mid value of 10 elements)
3-comparision 21 (mid)
4-comparision 20
二分查找怎么复杂度为O(log N)?
在一般情况下,复杂度的顺序并不是真的要评估为一个确切的数字。除此之外,使用的日志是变量的二进制 log_2,而不是十进制对数。
请注意,您每次都将问题减半,而不是将其削减为十分之一。不可否认,就复杂性分析而言,所有日志彼此之间只是一个常数乘数,因此无关紧要,但我认为这切入了你的问题。
Big-oh 符号不关心常量。事实上,它只关心表达式中的主导项。
因此,即使您的算法执行某种类型的 4 * log n
操作,它仍然是 O(log n)。只要是常数倍f(n)
,复杂度就是O(f(n))
.
对于对数,底数是无关紧要的,因为给定底数的对数与不同底数的相同对数相差一个常数。这可以通过基数变化公式看出:
log_a(x) = log_b(x) / log_b(a)
= [1 / log_b(a)] * log_b(x)
\____________/
this is constant
这就是为什么基数通常不用大 O 表示法指定的原因。
请注意,如果您将输入的大小乘以一个数量级,使其成为 100
个元素,您将进行 <= 8
此类操作,即 4 * log_10(100)
.
以下集合有 10 个元素
{10, 20, 21, 22, 23, 40, 50, 56, 90, 100}
N = 10 O(log 10) = 1
如果要查找元素20则需要进行4次比较操作 (即)
1-comparision 10
2-comparision 23 (since mid value of 10 elements)
3-comparision 21 (mid)
4-comparision 20
二分查找怎么复杂度为O(log N)?
在一般情况下,复杂度的顺序并不是真的要评估为一个确切的数字。除此之外,使用的日志是变量的二进制 log_2,而不是十进制对数。
请注意,您每次都将问题减半,而不是将其削减为十分之一。不可否认,就复杂性分析而言,所有日志彼此之间只是一个常数乘数,因此无关紧要,但我认为这切入了你的问题。
Big-oh 符号不关心常量。事实上,它只关心表达式中的主导项。
因此,即使您的算法执行某种类型的 4 * log n
操作,它仍然是 O(log n)。只要是常数倍f(n)
,复杂度就是O(f(n))
.
对于对数,底数是无关紧要的,因为给定底数的对数与不同底数的相同对数相差一个常数。这可以通过基数变化公式看出:
log_a(x) = log_b(x) / log_b(a)
= [1 / log_b(a)] * log_b(x)
\____________/
this is constant
这就是为什么基数通常不用大 O 表示法指定的原因。
请注意,如果您将输入的大小乘以一个数量级,使其成为 100
个元素,您将进行 <= 8
此类操作,即 4 * log_10(100)
.