上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.1 学习算法需要数学知识吗
首先来看一个读者问的比较多的问题,学习算法需要数学知识吗?
不得不承认学习算法确实需要一些数学知识。除了实现某种具体的算法,后面讲到的复杂度分析也需要一些数学知识。
不过这些内容涉及的数学知识大多比较简单,一般不会涉及高等数学的内容。其实学习大部分的算法知识,尤其是解力扣(LeetCode)题目,并不需要你在高等数学、几何学、概率统计等方面有多深的造诣,掌握基础的数学知识,具备逻辑分析的能力足矣。当然如果你要从事算法岗位或者进行理论研究,情况会有所不同,不过这不在本书的讨论范围内。
个别题目的复杂度分析特别难,比如本书个别回溯类型的题目,通常对于这种题目的复杂度,大家只需要知道大致量级即可。
退一步讲,面对一道数学题目,即便我们无法借助数学思维解决,通常来说,也可以采用变通的方式来解决,比如力扣(LeetCode)有一道水壶倒水的问题:
给你一个 8L 的装满水的水壶和两个分别是5L、3L的空壶,请想出一个“优雅”的办法,使其中一个水壶恰好装4L水,每一步操作只能是倒空或倒满。
这道题可以运用最大公约数(Greatest Common Divisor,GCD)定理解决,想不到这一点也没有关系,我们也可以通过广度优先遍历(Breadth First Search,BFS)来解决。