💻 第五章 与算法成为好朋友的七个要点
📄 一句话概括

同样的题,招式不同速度差千百倍——从 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. 用公式心算 1+2+…+100(答案 5050),体会三步出解。
  2. 把 N 改成 1 亿跑两个版本,看循环版肉眼可见地变慢。

常见误区

  1. 以为优化就是【把代码写紧凑】——真正的提速来自换算法,不是省几个字符。
  2. 一上来就追求最巧的招——先保证正确,再用暴力版对答案。
自测三问(点开对答案) 1. 高斯求和公式是什么? —— 1+2+…+n = n×(n+1)/2。 2. 提速技巧的本质是什么? —— 发现并利用问题里的规律,而不是把代码写得更紧凑。 3. 优化的正确次序? —— 先写正确版验证,再换招优化,最后用暴力版对答案。

相关笔记