学习算法的时候,让我想起看过的小说《三体》的黑暗森林,在罗辑与叶文洁的那段对话中,大意就是叶文洁让罗辑去研究宇宙社会学,但是开创一个新学科,需要一些先决条件,也就是我们大家普通认可的公理,叶文洁提出了宇宙社会学的两条公理:第一、生存是文明的第一需要;第二、文明不断增长和扩张,但宇宙中的物质总量保持不变。
由此可见,要从一门科学入门,必须要认识它的基本公理,这些是大家认可的基本条件。这样的方式是整个科学史里最重要的思想之一,也是为什么西方可以在整个科学发展上起到决定性作用的原因。比如几何学,就是假定了几条公理,就可以推导出整个严密的几何体系。因而在算法这门学科里,也需要引入几个公理,或者引用数学上的推理或证明,才可以严密地推导出算法所有结论。从而要学习好算法,需要提前学习组合数学、概率论、代数和公式证明。在这里主要引入循环不变式,它有三条性质必须证明:
- 初始化:循环的第一次迭代之前,它必须为真。
- 保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍然为真。
- 终止:在循环有终止的时间,不