数据结构与算法学习一
推荐书籍 数据结构:严蔚敏版《数据结构与算法》《大话数据结构》
算法:基础级:刘汝佳 算法竞赛入门级
进阶级:刘汝佳黑书 算法导论;注:很难,非算法行业慎入 刷题网站:(1)力扣(2)POJ(北京大学)或者HDU(杭州电子科技大学)
为什么要学习数据结构和算法
·1.BAT一线互连网公司面试必问技术
数据结构与算法是所有计算机类的基础。大企看中的是潜力。
·2.如果你不想做一辈子的CRUD(增删改查)工程师:业务工程师,CURD工程师
统计功能 :排序+循环。
·3.架构师必备: 写出框架级的代码 :API,写出开源级代码
·4.提升自己的能力 ,不被行业淘汰
基础知识
算法的五个特性:有穷性、确定性、可行性、有输入、有输出
设计原则:正确性、可读性、健壮性
高效率与低内存: 内存+CPU
内存占用最小,CPU占用最小 ,运算速度最快
评价算法的两个最重要的指标:.
时间复杂度 :运行一个程序所花费的时间 O()
空间复杂度:运行程序所需要的内存OOM
时间复杂度
1.时间复杂度的表示方法:大O表示,O(n),O(nlogn),O(1),O(n), O(n^2), O(logn), O(n!);
计算时间复杂度往往是计算比较大的而且是不确定的数,如果已经确定就不用计算,也就是常量
计算时只算最高阶!
几种常见的时间复杂度:
常数:O(1) 1表示常数,所有确定的数都用O(1)
对数:O(logn)
线性:O(n)
线性对数:O(nlogn)
平方:O(n^2)
N次方:O(n^n)
效率对比:O(1) > O(logn) > O(n) > O(nlogn) > O(n^2)
2.时间复杂度如何来分析
(1)找for while 递归。而且要找循环量最大的那一段
(2)找有网络请求的地方(RPC 远程调用,分布式,数据库请求)
空间复杂度
1.空间复杂度:找花了内存的地方,数据
2.如何找:开了空间的地方,比如数组,链表,缓存对象,递归
小结:
什么是数据结构?什么是算法?
数据结构就是能组在一起的集合对象。比如数组 链表,队列等
算法:就是解决问题的
如何学习(学习目的)
(1)提升能力的:全部学
(2)突击面试的:经典:链表,排序,二叉树,红黑树,B-tree ,B+tree
(3)进阶的:树论+图论+专项+每节课理论