1.如何有效学习算法与数据结构?
算法与数据结构并不是要你记忆背诵,而是理解与训练。如果我们想要精通一个领域,我们按照以下三个步骤:
Chunk it up(切碎知识点):把一个大的知识体系切碎成相应的知识点,这一点大部分的书籍都已经帮我们做好了。
Deliberate practicing(刻意练习):这一点是我们需要去下功夫的地方,需要把每一块的知识点拿出来刻意反复练习,比如说游戏中反复练习某一个微操作。
Feedback(反馈):如github和leetcode上面去看别人写的代码,然后与自己的对比,发现优缺点。还有一种是高手给你指点,这一点可遇不可求。
2.如何计算算法的复杂度?
时间复杂度
空间复杂度
符号的表示如下所示:
一、下面代码的意思是n=1000,输出n本身。这里只需要做一次运算,我们把它叫做O(1)。
二、下面这段代码也是O(1)的时间复杂度。
三、下面这段代码循环n次输出,并且只会循环n次。我们把这种复杂度叫做O(n)。
四、下面这个程序写了两个嵌套的循环。外层是i从1到n;内层是j从1到n。随着n的增大,它的工作量是n平方地增长。
五、下面这个程序,i从1到n,但是i的增加是每次乘2,在意的是计算这个循环能计算多少次。所以时间复杂度是O(log(n))
六、下面这个程序,i从1到2的n次方,算法的复杂度就是O(K^n)。
七、下面这个程序,i从1到n的阶乘进行循环,算法复杂度就是O(n!)
总括来说就是对于任何的输入n,你的程序要跑多少次,就是他的时间复杂度。
维基百科对算法的分析:
https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)