女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

找同一个数字,机器人可以逐张翻,也可以在排好序的卡片中每次看中间。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 办法 A逐张检查
  2. 办法 B有序时折半
  3. 比较条件卡片是否已排序
  4. 比较成本需要看几张

同一个问题可能有多种算法,适用条件和工作量不同。

先核对每种办法能否保证正确,再讨论快慢。折半查找需要利用顺序,不是任何卡片堆都能直接用。

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,没有有序条件就无法这样排除。