【发布时间】:2017-01-25 20:28:34
【问题描述】:
这是我的想法:
你有 N 元素开始。
但你不是每一个都经历过吗?
说我有
{1, 2, 3, 4, 5, 6, 7, 8, 9},我想找到4。
第一步是查看5,我们看到4 < arr[5]。那么,我们有
{1, 2, 3, 4, 5},中间是3,我们看到4 > arr[2],所以剩下{3, 4, 5}。
现在我们将收到4。
但这只是 3 步!我不明白为什么第一次搜索需要N 元素,当我们查看(N-1)/2th 元素时,这是一个步骤?
编辑!!!
这是我所学的:
搜索 1:搜索空间中的 n 个元素
搜索 2:搜索空间中的 n/2 个元素
搜索 3:搜索空间中的 n/4 个元素
... 搜索 i:搜索空间中的 1 个元素。
搜索 i 有 n/(2^[i-1]) 个元素,因此你解决 i 然后你得到
i = log(n) + 1。
我不明白的地方:
你有 n 个元素,我同意,但你没有搜索所有元素,你只搜索 1 个元素,那你为什么要计算所有 n 个元素?
【问题讨论】:
-
在有序数组中你不需要遍历每个数字,你只需要检查 O(log2 N) 个数字来查找数组中的元素
-
我不明白你的最后一句话。你能更详细地重新表述/解释它吗?
-
O(.. lg n) 是“在每个循环中将问题分成两半”的操作的基础。在这种情况下,这只是数学表示 - 请注意,在这种情况下 lg 是以 2 为底的对数。二进制搜索(在开始时需要排序序列)作为具体数字的示例非常有效。例如,需要 lg(1000) 或 ~10 个循环/项目读取来搜索 1000 个元素。 10 无穷大而增长,如 O. 所述
-
@user2864740 "lg" 通常也代表以 10 为底的对数,因此可能会造成混淆。但是,对于所有 a 和 b > 1,O(log_a n) = O(log_b n) 并不重要。