前言: KMP算法是一种字符串匹配算法,由Knuth,Morris和Pratt同时发现(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.比较流行的做法是实现一个next()函数,函数本身包含了模式串的局部匹配信息.由于next函数理解起来不太容易,本文同样是基于空间换时间的做法,但将采用另一种代码实现,希望可以更方便读者理解! 测试数据 aseeesatba esat as330kdwejjl_8 jjl_ faw4etoesting…
1.八皇后问题 public class EightQueen { private static final int ROW = 16; private static final int COL = 16; private static int count = 0; // 八皇后的解的个数 private static boolean[][] maps = new boolean[ROW][COL]; // 初始化二维数组,模拟8*8棋盘,默认值是false表示没有皇后 // 如何去放皇后? /…
0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序. 0.2 算法复杂度 0.3 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面.…
本文总结十大经典排序算法及变形,并提供Java实现. 参考文章: 十大经典排序算法总结(Java语言实现) 快速排序算法—左右指针法,挖坑法,前后指针法,递归和非递归 快速排序及优化(三路划分等) 一.排序算法概述 1.定义 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序. 2.分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较…
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经典数据挖掘算法]系列的收尾篇,是因为本人是Google脑残粉.因了PageRank而Google得以成立,因了Google而这个世界变得好了那么一点点. 1. 引言 PageRank是Sergey Brin与Larry Page于1998年在WWW7会议上提出来的,用来解决链接分析中网页排名的问题.…
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maximum Likelihood)估计为用于已知模型的参数估计的统计学方法.比如,我们想了解抛硬币是正面(head)的概率分布\(\theta\):那么可以通过最大似然估计方法求得.假如我们抛硬币\(10\)次,其中\(8\)次正面.\(2\)次反面:极大似然估计参数\(\theta\)值: \[ \ha…
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensemble learning)通过组合多个基分类器(base classifier)来完成学习任务,颇有点"三个臭皮匠顶个诸葛亮"的意味.基分类器一般采用的是弱可学习(weakly learnable)分类器,通过集成学习,组合成一个强可学习(strongly learnable)分类器.所谓…
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector Machines)是分类算法中应用广泛.效果不错的一类.<统计学习方法>对SVM的数学原理做了详细推导与论述,本文仅做整理.由简至繁SVM可分类为三类:线性可分(linear SVM in linearly separable case)的线性SVM.线性不可分的线性SVM.非线性(nonlin…
经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行.   图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入. 以下代码仅供参考,欢迎指正 /// <summary> /// 插入排序 /// </summary> /// <param na…
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes)属于无监督学习的一种,实现简单,没有迭代,学习效率高,在大样本量下会有较好的表现.但因为假设太强--假设特征条件独立,在输入向量的特征条件有关联的场景下并不适用. 1. 朴素贝叶斯算法 朴素贝叶斯分类器的主要思路:通过联合概率\(P(x,y) = P(x|y) P(y)\)建模,运用贝叶斯定理求解后…