程序员必须掌握的核心算法
程序员掌握核心算法,还不收录
1、十大排序算法
(1)简单排序:插入排序、选择排序、冒泡排序(必学)。
(2)分治排序:快速排序、归并排序(必学,快速排序还要关注中轴的选取方式)。
(3)分配排序:桶排序、基数排序。
(4)树状排序:堆排序(必学)。
(5)其他:计数排序(必学)、希尔排序。
对干十大算法的学习,假如你不大懂的话,那么推荐你去看书,因为看了书,你可能不仅仅知道这个算法怎么写,还能知道他是怎么来的。推荐书籍是《算法第四版》,这本书讲的很详细,而且配了很多图演示,还是挺好懂的。
2、搜索与回溯算法
(1)贪心算法(必学);
(2)启发式搜索算法:A*寻路算法(了解);
(3)地图着色算法、N 皇后问题、最优加工顺序;
(4)旅行商问题。
这方便的只是都是一些算法相关的,像贪心算法的思想,就必须学的了。建议通过刷题来学习,leetcode 直接专题刷。
3、动态规划
(1)树形DP:01背包问题;
(2)线性DP:最长公共子序列、最长公共子串;
(3)区间DP:矩阵最大值(和以及积);
(4)数位DP:数字游戏;
(5)状态压缩DP:旅行商。
这里建议先了解动态规划是什么,之后 leetcode专题刷,反正就一般上面这几种题型。
4、字符匹配算法
(1)正则表达式;
(2)模式匹配:KMP、Boyer-Moore。
5、流相关算法
(1)最大流:最短增广路、Dinic 算法。
(2)最大流最小割:最大收益问题、方格取数问题。
(3)最小费用最大流:最小费用路、消遣。