常见的数据结构链表
底层数据结构由链表和哈希表组成。
数据的添加和删除都较为方便,就是访问比较耗费时间。
数组
访问数据十分简单,而添加和删除数据比较耗工夫
堆
栈 (LIFO)队列 (FIFO)哈希表 二叉树
删除数据的时候 如果节点没有子节点 直接删 如果有一个 删了后子节点补上,如果有两个数据结构与算法java语言 Java程序员必会之数据结构与算法全梳理,删掉后从左子树中中找最大的补上
比较的次数取决于树的高度。所以如果结点数为n,而且树的形状又较为均衡的话数据结构与算法java语言,比较大小和移动的次数最多就是log2n。因此,时间复杂度为O(logn)。但是,如果树的形状朝单侧纵向延伸,树就会变得很高,此时时间复杂度也就变成了O(n)。
常见的算法整理排序数组查找图的搜索安全算法其他算法
【拓展】
图的表示:邻接矩阵和邻接表
遍历算法:深度搜索和广度搜索(必学)
最短路径算法:Floyd,(必学)
最小生成树算法:Prim,(必学)
实际常用算法:关键路径、拓扑排序(原理与应用)
二分图匹配:配对、匈牙利算法(原理与应用)
拓展:中心性算法、社区发现算法(原理与应用)
2.图还是比较难的,不过我觉得图涉及到的挺多算法都是挺实用的数据结构与算法java语言,例如最短路径的计算等,图相关的,我这里还是建议看书的,可以看《算法第四版》。
3、搜索与回溯算法
贪心算法(必学)
启发式搜索算法:A*寻路算法(了解)
地图着色算法、N 皇后问题、最优加工顺序
旅行商问题
这方便的知识都是一些算法相关的,我觉得如果可以,都学一下。像贪心算法的思想,就必须学的了。建议通过刷题来学习, 直接专题刷。
4、动态规划
树形DP:01背包问题
线性DP:最长公共子序列、最长公共子串
区间DP:矩阵最大值(和以及积)
数位DP:数字游戏
状态压缩DP:旅行商
我觉得动态规划是最难的一个算法思想了,记得当初第一次接触动态规划的时候,是看01背包问题的,看了好久都不大懂,懵懵懂懂,后面懂了基本思想,可是做题下不了手,但是看的懂答案。一气之下,在专题连续刷了几十道,才掌握了动态规划的套路,也有了自己的一套模板。不过说实话,动态规划,是考的真他妈多,学习算法、刷题,一定要掌握。这里建议先了解动态规划是什么,之后 专题刷,反正就一般上面这几种题型。
5、字符匹配算法
正则表达式
模式匹配:KMP、Boyer-Moore
6、流相关算法
最大流:最短增广路、Dinic 算法
最大流最小割:最大收益问题、方格取数问题