
一起动脑筋 · 先看一个小故事
找同一个数字,机器人可以逐张翻,也可以在排好序的卡片中每次看中间。
把过程摊开来看
- 办法 A逐张检查
- 办法 B有序时折半
- 比较条件卡片是否已排序
- 比较成本需要看几张
同一个问题可能有多种算法,适用条件和工作量不同。
先核对每种办法能否保证正确,再讨论快慢。折半查找需要利用顺序,不是任何卡片堆都能直接用。
01一道题真的可以有很多种做法吗?
当然可以。
例如“在数组里找目标值”:
- 无序数组可以顺序查找
- 有序数组可以顺序查找
- 有序数组还可以二分查找
这些都可能得到正确答案。
02正确算法为什么还要比较?
速度
需要多少工作量?
内存
需要多少额外空间?
条件
是否要求数据有序等?
实现复杂度
是否容易写对和维护?
03顺序查找和二分查找怎样选?
顺序查找
无须排序,O(n),简单直接。
二分查找
要求可利用有序/单调性质,O(log n)。
如果为了只查一次而先花大量成本排序,二分未必整体更划算。
04数据规模为什么重要?
同一个 O(n²) 算法:
n=100→约 10,000 级操作;n=100,000→约 10,000,000,000 级
算法选择必须看题目的最大数据范围。
05最快的算法一定最好吗?
不一定。
在很小的数据上,一个简单 O(n) 方法可能比复杂结构更容易写对,也足够快。
06为什么先学慢算法还有意义?
因为简单算法能帮助我们:
- 建立正确模型
- 验证优化算法结果
- 发现重复工作在哪里
- 理解为什么需要更快方法
07怎样形成算法选择习惯?
先保证正确→估算数据规模和工作量→再决定是否优化
你已经知道了什么
- 同一道题可以有多个正确算法。
- 算法之间可以比较时间、空间、条件和实现难度。
- 数据规模会改变“什么算法合适”。
- 最快不一定在所有实际场景都最好。
- 简单算法是理解和验证复杂算法的重要基础。
本专题完成:下一专题进入“搜索与算法效率”。
轮到你来试一试
卡片顺序完全打乱,还能看到中间小于 7 就丢掉左半边吗?
想好了吗?点开看解释
不能。左半边仍可能有 7,没有有序条件就无法这样排除。