KMP算法
目的:寻找最长子串
原理
- 当有目前的位置不匹配,且前面有一段恰好与模式串的开头一样,则那段开头后面开始对比;
因为不匹配的位置前面,是匹配的,所以只需要针对模式串处理,得出每个模式串位置的最长前后缀,从而的得出每个位置不匹配时开始处理的点(next函数值)
需要考虑三种情况了,第一个点不匹配,有前后缀,无前后缀
- 视频讲解:https://www.bilibili.com/video/BV1jb411V78H?share_source=copy_web
next函数值计算公式
经典算法思想
分治
分解->求解->合并;
回溯
深度优先搜索
动态规划
- 根据某些判定条件,舍弃肯定无法得到最优解的局部解,最终得到全局最优解
- 将复杂问题分成多个子问题,与分治的不同,分治的子问题时相同的
- 通常会在前期算出把各种可能的答案,然后逐步排查得出最优解
贪心
- 每一步都是最优选择
- 不需要穷尽所有解
- 不一定可是最优解,但是可以快速的得到满意的解
分支限界
- 广度优先搜索
- 利用队列实现
概率算法
- 前提,问题可以接受小概率错误
- 随机选择下一步,以此降低算法运行时间
近似算法
- 放弃精确的最优解,利用近似解,降低算法的运行时间,
- 比如求Π的值
数据挖掘算法
主要功能:分类、回归、关联规则、聚类
分类算法
分类步骤:建立学习模型:对现有数据进行处理;建立应用模型:对未知数据进行处理、预测
- 决策树归纳算法
- 朴素贝叶斯算法
- 向后传播BP
- 支持向量机SVM
关联规则算法
频繁模式和关联规则:频繁模式产生关联规则,不同事件频繁同时发生,挖掘其中关联性
- 类Apriori算法
- 基于频繁模式增长的方法
- 使用垂直数据格式的算法
聚类算法
聚类:无监督学习过程,将相似数据归到同一类中
- 基于划分的方法
- 基于层次的方法
- 基于密度的方法
- 基于网格的方法
- 基于统计模型的方法
智能算法
以数学为基础
- 人工神经网络ANN:模拟人脑神经元,建立神经网络
- 深度学习:基于ANN,是机器学习的一个新领域
- 遗传算法:模拟达尔文的“优胜劣汰”和孟德尔的遗传变异,寻找更好的结构
- 模拟退火算法SA:模拟物理退火过程(加温,等温,冷却)
- 禁忌搜索算法:向函数值变化最多的移动,避免陷入局部最优解
- 蚁群算法:优化路径的概率型算法,模拟蚂蚁在路径上留信息素,后面的蚂蚁更加信息素浓度,判断出最优路径
- 粒子群优化算法PSO:又称鸟群觅食算法,粒子追随最优粒子,在解空间搜索