📄 一句话概括
同样的题,招式不同速度差千百倍——从 1 加到 1 万,逐个累加一万次,高斯公式三次运算搞定。
📝 本节和前面几节的关系
要点 4 说暴力可行,要点 5 补另一半:需要提速时,靠技巧——本节用最著名的例子讲【找到规律再动手】。
一、高斯求和:一次经典的换招
求 1+2+…+10000:笨招是设个变量从 1 逐个加——一万次加法; 高斯当年上学时看穿的规律:头尾配对(1+10000、2+9999……)每对都是 10001,共 5000 对——于是公式 n×(n+1)/2 三步出答案。 两招结果一致,速度差三千倍以上。差距不在代码写得巧,而在看出了规律。
二、技巧从哪来
来自数学规律(等差数列求和)、来自数据特点(有序数组才能二分)、来自换角度(求和变配对)。 所以提速技巧不是【背捷径】,是多问一句:这个问题里藏着什么规律——它和要点 6(找数字间的规律)是一对。
三、优化的次序:先对,再快
次序铁律:先写正确的版本(哪怕笨),验证结果;再找规律优化;优化后拿暴力版对答案(要点 4 的用法)。 【⚠️ 2026 现状】现代编译器会自动优化常见写法,但【发现规律】这一层永远替代不了——它发生在程序员的脑子里。
四、动手 Demo:笨招与高斯公式对决
两种招式算同一题,比结果、比次数。
# 1+2+...+10000 的两种算法
N = 10000
s1, ops = 0, 0
for i in range(1, N + 1):
s1 += i; ops += 1
s2 = N * (N + 1) // 2
print("累加: %d (%d 次加法)" % (s1, ops))
print("公式: %d (3 步)" % s2)
实跑输出:
--------------------------------------------------------------------
要点 5——编程技巧提升执行速度
--------------------------------------------------------------------
机器快归快,招式好坏差得更远。经典对比:求 1+2+...+10000
[笨招] 从 1 逐个加到 10000:
结果 = 50005000, 加法 10000 次
[巧招] 高斯公式 n*(n+1)/2, 一次算完:
结果 = 50005000, 加法 1 次, 乘法 1 次, 除法 1 次
两种招结果相同 (50005000 == 50005000), 速度相差约 3333 倍
招式 操作次数(1 万) 思路
-----------------------------------------------------
逐个累加 10000 次 老老实实挨个加
高斯公式 3 次 发现规律, 三步出答案
要点 5 与要点 4 是一对:先大胆暴力,再按需优化——
优化靠的是找到规律(下一节的正主)。
注意 //(整除):n*(n+1) 必为偶数,整除不丢精度——用公式时连【会不会除不尽】都替你想好了。 循环一万次在这里瞬间完成,但在循环套循环、数据上亿的场景,倍数差距就是秒与小时的差距。
30 秒实验
- 用公式心算 1+2+…+100(答案 5050),体会三步出解。
- 把 N 改成 1 亿跑两个版本,看循环版肉眼可见地变慢。
常见误区
- 以为优化就是【把代码写紧凑】——真正的提速来自换算法,不是省几个字符。
- 一上来就追求最巧的招——先保证正确,再用暴力版对答案。
自测三问(点开对答案)
1. 高斯求和公式是什么? —— 1+2+…+n = n×(n+1)/2。 2. 提速技巧的本质是什么? —— 发现并利用问题里的规律,而不是把代码写得更紧凑。 3. 优化的正确次序? —— 先写正确版验证,再换招优化,最后用暴力版对答案。- ☐ 下一节(5.7 要点6:找出数字间的规律)
相关笔记
- 尝试估算程序的执行时间 — 拍数账正是【快慢】的度量衡
- 🌐 计算机网络 · 索引 — 那边算掩码也用到了规律速算
- 💻 计算机是怎样跑起来的 · 索引