平时工作中写了太多的业务代码,数据结构与算法这块都差不多还给老师了。。。
但意识到想要更深入的进行程序设计,数据结构和算法可以说是灵魂,在一些情况下一个优秀的算法可以将性能提升几个数量级,举个简单的例子:
问题:从n个数中找出第k个最大值。
这个问题一种解法就是将这n个数读取到一个数组中,再通过某种简单的排序算法进行排序,最后返回位置为k上的元素;
或者稍微更好一点解法,就是先把前k个元素读入数组并排序(递减),接着将剩余的元素逐个读取,当新元素被读到时,如果它小于数组中的第k个元素,则忽略。否则就将其放入到数组正确的位置上,同时将数组中的一个元素移除。当算法结束时,将第k个位置上的元素作为结果返回。
以上2中方法,不可否认都可以计算出结果,但是否都是最优的呢?假如有1亿条数据,需要找出第5千万大得数据,这2中算法是否又适用呢?可以想象,以上2种算法都可以计算出结果,只是时间问题,在合理的时间内都无法结束。
要解决上面例子中的问题,短时间内计算出结果就需要涉及到数据结构中的一些相关的算法。我自己也是重新捡起了这块,于是决定写些东西记录下来,一起交流学习!首先从数据结构中的一些基本数学知识开始。
1、指数
2、对数
3、级数
4、证明的方法
数学归纳法
-
- 证明基准情形,确定定理对于某些小的值是正确的;
- 进行归纳假设,假设定理对于某个值为n是正确的;
- 证明定理在n+1的情况下也是正确的;
反例证明法
以上截图内容来自《数据结构与算法分析》一书。