Open ShannonChenCHN opened 3 years ago
理解+训练
书:《异类》 ---> 一万小时定律
随着 n 的增加,不同时间复杂度之间的差距会越来越大。所以,我们自己在工程实践中对大数据场景下的性能要有意识。
1+2+3+...+n
的两种算法用递归方法计算的时间复杂度是以n的指数的方式递增的,时间复杂度约等于O(2^n)
遗留问题:出了上面的递归解法之外,还有其他的哪些解呢?(提示:解法一循环累加,解法二矩阵) LeetCode 原题:https://leetcode-cn.com/problems/fibonacci-number/
这几个公式的推导比较复杂,记住就行。
Q: 老师,o(logN)这个,为什么不写底数啊? A: O都是估算复杂度的数量级,所以没底也差不多。
Q: 老师,为啥说递归的时间复杂度是2的n次方呢? 就如您所举例子,n为6的时候是20多次计算,n^2也才36,2^n都已经64了。那复杂度不是最接近O(n2)么。 A: 是指数级的复杂度,但是并不代表就是正好等于 2^n,时间复杂度本来就是数量级上的粗略估计。 针对你上面的例子:6的时候的确如你所说没有 n^2 大,但是如果10或者20的时候,整体复杂度肯定高于 n^2
养成一个习惯,要让“切题四件套”变成自己的条件反射:
用熟悉的编辑器练习。
获取反馈:做完后看 Solution 和 Discussion。
第一遍,看题目,想解法,如果十几分分想不出来直接看题解,看看别人的解法,最好能够默写出来 第二遍,自己尝试写出 第三遍,隔几天后再次写一下,体会+上自己的优化 第四遍,一周过去后,再来一一遍 第五遍,复习,例如面试前。 这里说的五遍不一定刚好是五遍,而是要做出来自己的体会和思考才是最重要的。
刻意练习不是简单重复,而是跳出自己的舒适圈,不断扩大自己的舒适圈,同时在练习的过程也是需要不断反馈和改进。
Q: 老师,链表增删应该也得先查询到指定的位置吧,这样算上查询的时间,链表对数组感觉也没优势啊 A: 你这样理解是对的,也正是因为这样,在平时项目里我们很难会实际使用链表。但是有一种情况,比如区块链或者比特币,我们很少随机访问中间位置的节点,而绝大部分时候我们就在尾部叠加新节点。
要点:
Big-O Cheat Sheet: https://www.bigocheatsheet.com/
课程地址:https://time.geekbang.org/course/detail/100019701-41518 ppt 地址:https://github.com/ShannonChenCHN/algorithm-1
课程介绍
课程结构