欢迎来到算法的世界!
欢迎来到你的决策数学 1 (D1) 之旅的第一步。你可能在想:「算法究竟是什么?」简单来说,算法就是完成一项任务的指令集。你可以把它想象成制作蛋糕的食谱,或是你绑鞋带时会遵循的步骤。只要严格按照步骤执行,每次都能得到同样的结果!
在本章中,我们将探讨如何整理数据、寻找特定项目以及进行高效率的装箱。这些技巧每天都在使用,例如 Amazon 用来整理包裹,或者 Google 用来搜寻结果。
1. 基本概念:流程图与文字
算法可以写成一连串的文字指令,也可以用视觉化的流程图呈现。如果刚开始觉得流程图看起来像个迷宫也不用担心;它们不过是一张「是/否」的决策地图而已。
重要前置知识:寻找中间项
在 Edexcel D1 中,寻找列表中间项有一条特定规则。如果一个列表有 \(n\) 个项目,中间项的位置计算方式为:\( \frac{n+1}{2} \)。
如果结果不是整数,必须无条件进位(向上取整)。
例子:
如果你有 5 个项目:\( \frac{5+1}{2} = 3 \)。第 3 项就是中间项。
如果你有 6 个项目:\( \frac{6+1}{2} = 3.5 \)。无条件进位到 4。第 4 项就是中间项。
关键提醒:一定要完全按照写好的指令执行,即使你觉得自己在发现捷径。在考试中,分数是给予展示过程的人,而不仅仅是最终答案!
2. 排序算法:冒泡排序法 (Bubble Sort)
冒泡排序法是一种将数字列表排序(递增/从小到大,或递减/从大到小)的简单方法。
运作方式:
1. 从列表的开头开始。
2. 比较前两个数字。如果它们顺序不对,就交换它们。如果顺序正确,则保持不动。
3. 移动到下一对(第 2 和第 3 个数字),重复上述步骤,直到到达列表末尾。这称为一轮 (pass)。
4. 在第一轮结束时,最大的数字会像气泡一样「浮」到最后面。
5. 重复进行,直到出现一轮完全没有进行任何交换的情况。这意味着列表已经排好序了!
记忆小撇步:想象沉重的气泡沉到底部(列表末尾),或者轻的气泡浮到顶部。
常见错误:学生往往在列表看起来排好序时就停下来。你必须完成最后的一轮「没有交换」的检查,才能向算法证明它已经完成了!
3. 排序算法:快速排序法 (Quick Sort)
对于长列表而言,快速排序法比冒泡排序法快得多,但需要更专注。它利用一个枢轴 (pivot) 来分割列表。
步骤流程:
1. 选择枢轴:遵循 Edexcel 规则,选择列表的中间项(使用 \( \frac{n+1}{2} \) 规则)。
2. 分割:将所有小于枢轴的数字写在它的左边,将所有大于枢轴的数字写在它的右边。(这会产生两个子列表)。
3. 重复:将每个子列表视为一个新的小型列表,并为每个列表选择一个新的枢轴。
4. 确认:一旦某个项目被选为枢轴,它就处于最终排序位置。通常我们会在这些项目上画个方框或圆圈以作标记。
快速回顾:
- 冒泡排序法:慢,比较相邻对,需要一轮「无交换」来确认结束。
- 快速排序法:快,使用枢轴,将列表拆分成较小的部分。
4. 搜寻算法:二分搜寻法 (Binary Search)
想象你在字典里找一个词。你不会从第 1 页开始读每个词,对吧?你会跳到中间,然后判断你要找的词是在那一页之前还是之后。这就是二分搜寻法。
关键规则:你只能对已经排好序的列表使用二分搜寻法。如果列表是乱序的,搜寻就不会成功!
流程:
1. 找到整个列表的中间项。
2. 这是你要找的目标值吗?如果是,停止!
3. 如果目标值小于中间项,舍弃中间项以及列表的整个右半部分。
4. 如果目标值大于中间项,舍弃中间项以及列表的整个左半部分。
5. 对剩余的部分重复上述步骤,直到找到目标值,或者没有项目剩下(代表该数值不存在)。
你知道吗?二分搜寻法非常高效。即使你有 1,000,000 个项目的列表,只需 20 个步骤就能找到任何项目!
5. 装箱问题 (Bin Packing)
装箱问题是指将不同大小的物品放入固定容量的「箱子」中。例如,将文件存储到 USB 闪存盘,或将箱子装入送货车。
方法 A:首次适应法 (First-Fit)
按照给定的顺序取每个项目,并将其放入第一个有足够空间的箱子中。
类比:这就像一个「懒惰」的包装工——直接抓起下一个物品,随手塞进看到的第一个空隙里。
方法 B:首次适应递减法 (First-Fit Decreasing)
1. 首先,将列表排序为递减顺序(从大到小)。
2. 然后,应用「首次适应法」。
类比:这就像一位专业的包装工——先放入大型、形状尴尬的物品,这样小物件就能填补剩余的空间。这通常会使用较少的箱子!
装箱问题关键提醒:检查你的减法!常见的错误是以为物品放得进去,但实际上却少了 1 个单位的空间。
摘要速查
- 算法:一组指令集。
- 中间项: \( \frac{n+1}{2} \),无条件进位。
- 冒泡排序法:比较相邻对,需要一轮「无交换」来结束。
- 快速排序法:利用枢轴进行分治。
- 二分搜寻法:仅适用于已排序列表;不断减半搜寻范围。
- 首次适应递减法:先按从大到小排序,再进行装箱。
如果这些过程刚开始让你觉得有点重复也不要担心——这正是算法设计的目的!继续练习这些步骤,你会发现这是你在进阶数学 (Further Maths) 考试中,最能稳拿分数的题目之一!