Algorithm
文章平均质量分 74
Jeffrey-Heart
这个作者很懒,什么都没留下…
展开
-
用堆实现优先队列
#include using namespace std; int heap_length; int heap_size; void exchange(int &a,int &b){ int temp=a; a=b; b=temp; } int left(int i){ return 2*i+1; } int right(int i){ return 2*i+2; } int原创 2014-10-28 20:22:18 · 338 阅读 · 0 评论 -
桶排序
桶排序: 假设输入数据服从均匀分布, 平均情况下的它的时间代价为Ο(n)。与计数排序类似,因为对输入数据作了某种假设,桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。 桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。然后,将n个输入数据分配到各个桶中。因为输入数据原创 2014-11-02 19:50:55 · 376 阅读 · 0 评论 -
期望为线性时间选择算法
一般选择问题看起来要比我么找最小值这样的简单问题更难。原创 2014-11-04 20:18:17 · 1090 阅读 · 0 评论 -
Trie树详解
Trie树原创 2014-11-19 22:37:41 · 684 阅读 · 0 评论 -
BM算法详解
1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法:Boyer-Moore算法,简称BM算法。该算法从模式串的尾部开始匹配,且拥有在最坏情况下O(N)的时间复杂度。一般情况下,比KMP算法快3-5倍。BM算法在移动模式串的时候是从左到右,而进行比较的时候是从右到左的。常规的匹配算法移动模式串的时候是从左到右,而进行比较的时原创 2014-11-27 21:14:41 · 3414 阅读 · 1 评论 -
二分图最大匹配算法-匈牙利算法
#include #include using namespace std; int map[105][105]; int visit[105],flag[105]; int n,m; bool dfs(int a) { for(int i=1; i<=n; i++) { if(map[a][i]&&!visit[i]) {原创 2016-07-18 09:21:38 · 321 阅读 · 0 评论 -
取n个数中第k大数
#include #include #include using namespace std; int random_partion(int *arry, int n) { time_t t; srand((unsigned)time(&t)); int index=rand()%n; swap(arry[index], arry[n-1]); //起到随机原创 2016-07-19 21:24:00 · 490 阅读 · 0 评论 -
统计学习方法-隐马尔科夫模型
import numpy as np import math def HMM(): Pi = np.array([0.2, 0.4, 0.4]) print(Pi) A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]]) print(A) B = np.array([[0.5, 0.5], [0.4, 0.6]...原创 2018-02-28 09:59:28 · 297 阅读 · 0 评论 -
统计学习方法-逻辑斯蒂回归
梯度下降法import numpy as np import math """逻辑斯蒂回归算法 梯度下降方法""" def L_W(X, y, w, b): wx = np.dot(w, X.T) + b return np.dot(y, wx) - np.sum( np.log(1+np.exp(wx) ), axis=0) def update_w(X, y, w, b, delta=1...原创 2018-02-28 10:06:48 · 273 阅读 · 0 评论 -
统计学习方法-感知机
感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1 二值。感知机对应输入空间中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面。为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机是神经网络和支持向量机的基础。import numpy as np """感知机学习算法的原...原创 2018-02-28 10:09:00 · 174 阅读 · 0 评论 -
KMP算法
KMP算法 匹配时间为Θ(n) ,只用到辅助函数next ,它在Θ(m)时间内根据模式预先计算出来,并且存储在数组next[1.....m]中。数组next使得我们按需要“及时”有效计算转移函数δ。粗略的说,对任意状态q=0,1,2,....m和任意字符a∈∑ ,next[q]的值包含了与a无关当在计算δ(q,a)的信息。由于next只有m个元素,而δ有m|∑|个值,所以通过预先计算next而原创 2014-11-18 16:34:06 · 464 阅读 · 0 评论 -
字符串匹配算法扩展
扩展1:BM算法 KMP的匹配是从模式串的开头开始匹配的,而1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法:Boyer-Moore算法,简称BM算法。该算法从模式串的尾部开始匹配,且拥有在最坏情况下O(N)的时间复杂度。在实践中,比KMP算法的实际效能高。 BM算法定义了两个规则: 坏转载 2014-11-18 20:44:54 · 447 阅读 · 0 评论 -
AC算法原理与实现(模式匹配)
最近学习模式匹配知识,了解了KMP与BM算法后,AC的了解也必不可少。上网学习了下,把重要的知识总结一下。 Aho_Corasick自动机匹配算法是最著名的多模式匹配算法之一。AC自动机算法分为3步:构造一颗Trie树,构造失败指针和模式匹配过程。 1.建立一颗Trie的过程比较简单(可参考源代码) 2.构造失败指针 构造失败指针的过程概括起来就一句话:设这个节点上的字母为转载 2014-11-18 20:50:22 · 1607 阅读 · 0 评论 -
Rabin-Karp字符串匹配算法
Rabin-Karp字符串匹配算法原创 2014-11-13 16:41:34 · 1406 阅读 · 0 评论 -
Young氏矩阵
6-3 Young氏矩阵 一个m x n的Young氏矩阵(Young tableau)是一个m x n的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。Young氏矩阵中可能会有一些∞数据项,表示不存在的元素。所以,Young氏矩阵可以用来存放r≦mn个有限的数。 a)画一个包含元素{9,6,3,2,4,8,5,14,12}的4 x 4的Young氏矩阵。转载 2014-10-28 21:30:56 · 395 阅读 · 0 评论 -
利用HOARE_PARTITION重写QUICKSORT
#include using namespace std; void exchange(int &a,int &b){ int temp=a; a=b; b=temp; } int HOARE_PARTITION(int *arry,int p,int r){ int x=arry[p]; int i=p-1,j=r+1; while(true){ do{ j=原创 2014-10-30 20:04:07 · 697 阅读 · 0 评论 -
利用有限自动机进行字符串匹配
利用有限自动机进行字符串匹配原创 2014-11-15 20:31:00 · 3621 阅读 · 0 评论 -
基数排序
基数排序原创 2014-11-01 19:58:24 · 534 阅读 · 0 评论 -
计数排序
计数排序原创 2014-11-01 17:27:16 · 285 阅读 · 0 评论 -
快速排序三种实现方法
1、快排 分解:数组A[p..r] 被划分为两个子数组A[p..q-1]和A[q+1,r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的没个元素,所以其中A[q]位置是排好序的,不用再改变了 解决:通过递归调用快熟排序,对字数组A[p..q-1]和A[q+1,r]进行排序 合并:因为字数组都是原址排序的,所以不需要合并操作:数组A[p..原创 2014-10-29 19:29:22 · 538 阅读 · 0 评论 -
快速排序随机化版本
#include #include #include #include using namespace std; void exchange(int &a,int &b){ int temp=a; a=b; b=temp; } int PARTITION(int *arry,int p,int r){ int x=arry[r]; //主元,划分子数组 int i=p-1;//记原创 2014-10-29 21:04:53 · 392 阅读 · 0 评论 -
【模式匹配】之 —— Sunday算法
Sunday算法思路 Sunday算法的思想和BM算法中的坏字符思想非常类似。 差别只是在于Sunday算法在失配之后,是取目标串中当前和模式串对应的部分后面一个位置的字符来做坏字符匹配。 如下图: 下标数:01234567890 目标串:abcdefghijk 模式串:bxcd BM算法在b和x失配后,坏字符为b(下标1),在模式串中寻找b的转载 2014-11-18 20:48:43 · 1279 阅读 · 0 评论 -
牛顿法和拟牛顿法
牛顿法和拟牛顿法是求解无约束最优化问题的常用方法,收敛速度快。牛顿法是迭代算法,每一步需要求解目标函数的海塞矩阵(Hesse matrix)的逆矩阵,计算复杂。拟牛顿法通过正定矩阵近似海塞矩阵的逆矩阵或海塞矩阵,计算速度快。 牛顿法 考虑无约束优化问题 min f(x) 其中x* 为目标函数的极小值点 假设f(x)具有二阶连续偏导数,若第k次迭代值为x^(k),...原创 2018-02-23 15:17:28 · 335 阅读 · 0 评论