二进制搜索的时间复杂度?
Time Complexity of Binary Search?
如果我将数组大小除以 3,运行 二进制搜索的时间 。
假设您的数组已排序,它仍然是 log n
。
使用二进制搜索,您通常会在排序的随机访问数据结构(例如数组)中进行搜索,每次比较时都会丢弃数组的一半。因此,在 k
个步骤中,您可以有效地覆盖 2^k
个条目。这会产生最多 log2(n)
个 n
个元素的复杂度。
对于 landau 符号,对数的底消失了,因为它是常数:O(log2(n)) = O(log(n) / log(2)) = O(log(n))
。
现在,如果由于某种原因,您不仅可以丢弃一半的值,而且可以丢弃三分之二的值,因为您始终知道针最终会落在哪三分之一处,这意味着您可以覆盖 3^k
许多k
步中的条目。
因此,你得到 log3(n)
。但这再次降低到与 log(3)
相同的时间复杂度是一个常数:O(log3(n)) = O(log(n)/log(3)) = O(log(n))
.
如果我将数组大小除以 3,运行 二进制搜索的时间 。
假设您的数组已排序,它仍然是 log n
。
使用二进制搜索,您通常会在排序的随机访问数据结构(例如数组)中进行搜索,每次比较时都会丢弃数组的一半。因此,在 k
个步骤中,您可以有效地覆盖 2^k
个条目。这会产生最多 log2(n)
个 n
个元素的复杂度。
对于 landau 符号,对数的底消失了,因为它是常数:O(log2(n)) = O(log(n) / log(2)) = O(log(n))
。
现在,如果由于某种原因,您不仅可以丢弃一半的值,而且可以丢弃三分之二的值,因为您始终知道针最终会落在哪三分之一处,这意味着您可以覆盖 3^k
许多k
步中的条目。
因此,你得到 log3(n)
。但这再次降低到与 log(3)
相同的时间复杂度是一个常数:O(log3(n)) = O(log(n)/log(3)) = O(log(n))
.