排序与搜索算法的分析与实践
1. 二分搜索与线性搜索
二分搜索是一种用于在有序列表中查找特定值的高效算法。假设列表长度为 (n),在分析中我们通常假设 (n) 是 2 的幂,即 (n = 2^m)(其中 (m = \log_2(n)))。二分搜索的时间复杂度为 (O(\log(n)))。例如,当 (n = 100) 时,每次搜索后搜索范围会减半,经过大约 7 次比较就能完成搜索,这与 (\log_2(100) \approx 6.64386) 相符,下一个更大的 2 的幂是 (2^7 = 128)。
是否值得先对列表进行排序再使用二分搜索,取决于搜索的次数。如果只搜索一次,使用 (O(n)) 的线性搜索比 (O(n \log(n))) 的排序和 (O(\log(n))) 的二分搜索更高效。但如果要对同一列表进行多次搜索,排序就很有必要了。
以下是一些相关问题及解答:
- 问题 18 :在 1,000,000 条记录中查找电话号码,使用线性搜索平均需要搜索约 500,000 条记录。
- 问题 19 :在 linearSearch 函数中不能使用 for element in values : 循环,因为该函数需要返回匹配元素的索引,而不是元素本身。
- 问题 20 :在 1,000,000 个元素的有序列表中使用二分搜索查找值,大约需要搜索 20 次(因为 (\log_2(1024) = 10))。
2. 算法运行时间的估计
估计算法的
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



