algorithm - 通过多个元素进行二分搜索
问题描述
考试的时候有这个问题
我有一台非常慢的计算机,它需要一秒钟的时间对具有 1,000(一千)个元素的数组进行二进制搜索。我应该期望计算机在具有 1,000,000(一百万)个元素的数组上进行二分搜索需要多长时间?
我很难理解这一点,搜索 100 万个元素会比 1,000 个元素花费更长的时间还是取决于计算机?
解决方案
二分查找具有O(log(N))
时间复杂度,完成时间为
t = c * log(N, 10)
在给定的情况下,N = 1000
我们知道t
,因此我们可以找出c
1 = c * log(1000, 10)
1 = c * 3
c = 1/3
因为N = 1000000
我们有
t = 1 / 3 * log(1000000, N) =
= 1 / 3 * 6 =
= 2
所以我们可以预期,1000000
项目内的二分查找将在2秒内完成。
请注意,O(log(N)) == O(log(N, m))
因为log(N, m) == log(N, k) / log(m, k)
,这意味着在使用时O(log(N))
我们可以自由选择对数底。在我们的例子中 ( 1000
and 1000000
) 使用 base 10
(or 1000
)很方便
推荐阅读
- r - 取消列出而不创建小数
- sitecore - 安装 Sitecore Experience Platform 9.3 时出现错误“test-path $_”
- google-cloud-platform - GCP IoT Core 拒绝公钥并显示“证书采用无效的 PEM 格式”错误消息。有什么问题?
- r - 关于使用 dplyr 的组内平均值
- r - 如何偏移 ax limited 图上的第一个点,使其不在 R 中的 y 轴上?
- memory - 为什么我在 SDL_UpdateTexture 中有“LockRect(): INVALIDCALL”?
- python - 尝试合并嵌套列表中重复键的值
- php - iframe 会话丢失
- html - 我应该如何为具有不同像素比的设备加载图像?
- c# - .NET Core 将单个属性传递给局部视图