风也温柔

计算机科学知识库

数据结构链表底层数据结构路径算法与删除数据匹配(一)

  常用数据结构链表

  底层数据结构由链表和哈希表组成。

  添加和删​​除数据很方便,但访问起来很耗时。

  大批

  访问数据很容易,添加和删除数据很费力

  堆

  回溯算法代码_回溯算法 讲解_java回溯算法

  

  堆栈 (LIFO) 队列 (FIFO) 哈希表

  推荐观看:

  二叉树

  删除数据时数据结构链表底层数据结构路径算法与删除数据匹配(一)
,如果节点没有子节点,直接删除。如果删除一个,则将添加子节点。如果有两个,从左子树中删除最大的一个并添加它。

  比较的次数取决于树的高度。所以如果节点数为n,并且树的形状比较平衡,那么最大比较和移动的次数是log2n。所以时间复杂度是O(logn)。但是,如果树的形状在一侧纵向延伸,树就会变得非常高,时间复杂度变为 O(n)。

  常用算法 排序 数组 搜索 安全算法 查找图 其他算法

  【扩张】

  图的表示:邻接矩阵和邻接表

  遍历算法:深度搜索和广度搜索(必填)最短路径算法:Floyd,(必填)最小生成树算法:Prim,(必填)实际常用算法:关键路径,拓扑排序(原理与应用)二分图匹配:配对,匈牙利算法(原理与应用)扩展:中心性算法、社区发现算法(原理与应用)

  2.图还是比较难的,不过我觉得图里面涉及的很多算法还是挺实用的,比如最短路径的计算等等。对于图,还是推荐看这里的书。第四版。

  回溯算法 讲解_java回溯算法_回溯算法代码

  3、搜索和回溯算法

   贪心算法(必学)

    启发式搜索算法:A*寻路算法(了解)
    地图着色算法、N 皇后问题、最优加工顺序

  这个方便的知识与一些算法有关。我觉得如果可以java回溯算法,就学吧。必须学习诸如贪心算法之类的想法。建议刷题学习,直接刷题。

  4、动态编程

  回溯算法 讲解_java回溯算法_回溯算法代码

   树形DP:01背包问题

    线性DP:最长公共子序列、最长公共子串
    区间DP:矩阵最大值(和以及积)
    数位DP:数字游戏

  我认为动态规划是最难的算法思想。记得第一次接触动态规划的时候,是看01背包问题的。我不会做这个问题,但我能理解答案。一气之下,连续刷了几十个话题,掌握了动态编程套路,也有了自己的一套模板。但说实话java回溯算法,动态编程真的是很多测试。学习算法和刷题一定要掌握。建议先了解一下什么是动态规划,再刷题。反正一般都是以上几类题。

  5、字符匹配算法

   正则表达式

  6、流相关算法

   最大流:最短增广路、Dinic 算法

    最大流最小割:最大收益问题、方格取数问题

  文章来源:https://zhuanlan.zhihu.com/p/309664151