《编程珠玑(第2版)》

《计算机程序设计艺术》和《算法》配套读本
薄薄的一本书,有算法数据结构,有程序优化,有编程思想,甚至有程序正确性验证。牛啊啊啊。

两分法和迭代法是简化问题的两个重要思想。

书中的最后一个探讨的问题(15.3生成文本)说的就是ChatGPT的原理啊

附录D 代码调优法则

简单的设计。Antoine de Saint-Exupery 是法国作家兼飞机设计师,他曾经说过:“设计者确定其设计已经送到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。”更多的程序员应该使用该标准来检验自己完成的程序。简单的程序通常比具有相同功能的复杂的程序更可靠、更安全、更健壮、更高效,而且易于实现和维护。

数据决定程序结构

由于预防远胜于治疗,我们应当牢记Gordon Bell在为DEC公司设计计算机时所观察到的事实:
计算机系统中最廉价、最快速且最可靠的元件是根本不存在的。

当程序性能问题无法回避时,考虑设计层面会有助于程序员集中精力解决问题。
如果仅需要较小的加速,就对效果最佳的层面做改进。
如果需要较大的加速,就对多个层面做改进。

快速检验。Polya 在他的 How to Solve It 一书中用了3页篇幅讨论“量纲检验”。他将该方法描述为一种“检验几何或物理等式的快速而有效的著名方法”。第一个法则是和式中各项的量纲必须相同,这个量纲同时也是最终求和结果的量纲——可以把英尺相加得到英尺,但是不能把秒和磅相加。第二个法则是乘积的量纲是各乘数量纲的乘积。上面的例子同时遵循这两条法则;如果不考虑常数,以下乘式具有正确的形式:
(英里+英里)× 英里 × 英里/天 = 英里³/天

Denning 和Buzen 介绍的“运筹分析”(参见 Computing Surveys 第10卷第3期,1978年11月,第225页~第261页)远比计算机系统中的排队网络模型具有普遍意义。他们的研究很出色,但是由于文章主题的限制,他们没有阐明Little 定律的一般性。他们的证明方法与队列或计算机系统都没有关系。考虑一个带有输入和输出的任意系统,Little 定律指出“系统中物体的平均数量等于物体离开系统的平均速率和每个物体在系统中停留的平均时间的乘积。”(并且如果物体离开和进入系统的总体出入流是平衡的,那么离开速率也就是进入速率。)
Peter Denning 简明扼要地将这条法则表述为“队列中物体的平均数量为进入速率与平均停留时间的乘积”。他将这条法则应用于他的酒窖:“在我的地下室里有150箱酒,我每年喝掉 25箱并买入25箱,那么每箱酒保存的时间是多长?Little 定律告诉我,用150箱除以25箱/年,得到答案6年。”

所谓稀疏数组是指其中大多数项都具有同一值(通常为0)的数组。

代码空间技术
函数定义。
解释程序。
翻译成机器语言。