最近开始学习王争老师的《数据结构与算法之美》,通过总结再加上自己的思考的形式记录这门课程,文章主要作为学习历程的记录。
广义来说,数据结构是指一组数据的存储结构,算法则是操作数据的一组方法。算法复杂度分为时间复杂度和空间复杂度,在计算算法复杂度时一般用到大O符号。
一、时间复杂度
所有代码执行时间T(n)=O(f(n)),其中f(n)表示每行代码执行的次数总和,O表示T(n)与f(n)表达式成正比,n通常表示数据的规模。
① def cal(n):
② sum = 0
③ i =1
④ for j in range(n):
⑤ sum += 1
⑥ return sum
以上面的程序为例,②,③都执行了一次,④,⑤都执行了n次,故T(n)=O(2n+2)=O(n)
接下来说一下时间复杂度分析的三种方法:
1.在分析算法和代码时间复杂度时,只需要关注循环执行次数最多的一段代码以上面的程序为例,当 n 很大时,你可以把它想象成 10000、100000,而公式中的低阶,常数和系数都不左右增长趋势,都可以忽略,因此上题的时间复杂度为O(n)。又比如 5 n 4 + 3 n 3 + 2 n 2 + 4 n + 1 5n^4+3n^3+2n^2+4n+1 5n4+3n3+2n2