程序员掌握的核心算法。快来学习吧。

程序员已经掌握了核心算法,并没有将其包括在内。

1,十大排序算法

简单排序:插入排序、选择排序和冒泡排序(必需)

分治排序:快速排序、合并排序(必选,快速排序也要注意中轴线的选择方法)

分配排序:桶排序和基数排序。

树排序:堆排序(必需)

其他:计数排序(必修)和希尔学习十大算法。如果你不懂它们,我还是推荐你去看书,因为看完书你可能不仅知道这个算法怎么写,还知道它是怎么来的。推荐的书是《算法第四版》,非常详细,很好理解,有很多插图。

3.搜索和回溯算法

贪婪算法(必需)

启发式搜索算法:A*寻路算法(理解)

地图着色算法,N皇后问题,最佳加工顺序。

旅行商问题之所以方便,只是因为它与某些算法有关。我想如果可能的话,我应该全部学会。就像贪婪算法的思想一样,你必须学会它。建议通过刷题学习,leetcode直接刷题目。

4.动态规划

树DP:01背包问题

线性DP:最长公共子序列,最长公共子串

区间DP:矩阵的最大值(和与积)

数字游戏

状态压缩DP:旅行推销员

这里建议先了解什么是动态规划,然后leetcode再刷题。反正一般都是上面的问题。我后面还会写下我学到的套路,有点类似于我之前写的递归,是一种体验。

5.字符匹配算法

正则表达式

模式匹配:kmp,博耶摩尔我想你差不多知道KMP和博耶摩尔。

6.流相关算法

最大流:最短增广路径,Dinic算法最大流最小割:最大收益问题,网格检索问题最小成本最大流:最小成本路径,消遣,我只学过一些算法,有兴趣的可以学学。