(c)大O记号
看清大O的形式化定义,区分五种渐近记号的边界,识破直觉中的常见陷阱
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
(c)大O记号
看清大O的形式化定义,区分五种渐近记号的边界,识破直觉中的常见陷阱
: 主流长远
两份代码跑了1000次都是几毫秒,看起来差不多。但当数据量从1000涨到100万、1亿,谁先扛不住?大O记号回答的就是这个长远问题。
摩天楼决定轮廓,小楼再多也看不清;n→∞ 时主导项决定增长形状
: 大O记号
算法世界里,比起"小数据谁更快",我们更关心"数据规模暴涨时,谁会失控"。大O记号就是用来回答这件事的语言工具。
载重上限≠实际装载,Big O承诺的是增长上限,不代表真实阶
: 高效解
大O记号回答了'多快'的问题,但要追问:多快才算'够快'?高效解在算法理论中有明确边界。
Dijkstra按边松弛(多项式);枚举所有路径是指数
: 有效解
前面我们看到大O把'高效'区分出来,但'高效'随硬件变。今天给一个更稳的概念:能在多项式时间内求出的解,称为'有效解'——这是计算机理论里最常用来划线的标准。
楼层多 1 层,工时多固定倍数,总能盖完;指数是每高 1 层要重盖所有楼
: 难解
高效解说的是多项式时间内能跑出来的问题。但现实中还有一类问题——目前找不到多项式算法,蛮力算到宇宙毁灭也算不完。这就是难解。
n=50就有10⁶⁴种走法,远超宇宙原子总数,根本算不完
: 2−Subset
前一页说「难解」只是一个标签。这一页把标签贴到具体问题上:2−SUBSET——给你一组整数,问能不能挑出几个加起来正好等于 2。
硬币堆就是输入,挑哪些硬币就是子集,凑齐 2 元就是目标
: 增长速度
上页说「难解」问题撑不住大输入——但这只是直觉。要把它说清楚,得回到一个更基础的概念:增长速度。
绝对人口不重要,关键是每年新增多少、未来如何翻倍——这才是发展潜力的核心指标
本节要点
- ✓大O刻画增长率上界,刻意忽略常数与低阶项
- ✓多项式时间=高效类,指数增长=难解类,分水岭清晰
- ✓O/Ω/Θ三件套:上界/下界/紧界,混用会失之毫厘
- ✓2-Subset等NP问题无已知多项式解,但未证不存在
- ✓选型时先看增长曲线,再考虑常数与硬件实现
课后思考
每题先自己在脑中转一转,再对照参考答案;三问覆盖回顾、应用、延伸三层。
参考答案忽略常数因子和低阶项。理由:n足够大时,增长最快的那一项决定一切,其它影响被淹没——这反映了大O关心'可扩展性'的本质。
参考答案差距被'放大'。n增10倍时,B近似增10倍,A却要增约33倍(10·log10)。规模一大,原来的'常数倍'会被撕开成'量级差'。
参考答案用Ω记下界,用Θ记'恰好'的上下界一致。大O单独存在时容易'骗人':O(n)算法未必最优,可能存在Ω(n²)的下界却无人企及——这也是难解问题的入口。