核心算法版
‘壹’ 程序员必须掌握的核心算法
程序员掌握核心算法,还不收录
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)最小费用最大流:最小散漏费用路、消遣。
‘贰’ 大数据核心算法有哪些
1、A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。
2、集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。
3、二分查找(Binary Search)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。
4、分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。
5、Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。
6、数据压缩——采取特定编码方案,使用更少的字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。
7、Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥。该密钥以后可与一个对称密码一起,加密后续通讯。
8、Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。
9、离散微分算法(Discrete differentiation)。