程序员掌握的核心算法。快来学习吧。
程序员已经掌握了核心算法,并没有将其包括在内。
1,十大排序算法
简单排序:插入排序、选择排序和冒泡排序(必需)
分治排序:快速排序、合并排序(必选,快速排序也要注意中轴线的选择方法)
分配排序:桶排序和基数排序。
树排序:堆排序(必需)
其他:计数排序(必修)和希尔学习十大算法。如果你不懂它们,我还是推荐你去看书,因为看完书你可能不仅知道这个算法怎么写,还知道它是怎么来的。推荐的书是《算法第四版》,非常详细,很好理解,有很多插图。
3.搜索和回溯算法
贪婪算法(必需)
启发式搜索算法:A*寻路算法(理解)
地图着色算法,N皇后问题,最佳加工顺序。
旅行商问题之所以方便,只是因为它与某些算法有关。我想如果可能的话,我应该全部学会。就像贪婪算法的思想一样,你必须学会它。建议通过刷题学习,leetcode直接刷题目。
4.动态规划
树DP:01背包问题
线性DP:最长公共子序列,最长公共子串
区间DP:矩阵的最大值(和与积)
数字游戏
状态压缩DP:旅行推销员
这里建议先了解什么是动态规划,然后leetcode再刷题。反正一般都是上面的问题。我后面还会写下我学到的套路,有点类似于我之前写的递归,是一种体验。
5.字符匹配算法
正则表达式
模式匹配:kmp,博耶摩尔我想你差不多知道KMP和博耶摩尔。
6.流相关算法
最大流:最短增广路径,Dinic算法最大流最小割:最大收益问题,网格检索问题最小成本最大流:最小成本路径,消遣,我只学过一些算法,有兴趣的可以学学。