算法
郑万通
找工作找工作。。
展开
-
堆排序算法
堆排序(heapsort),在最坏情形和平均情形下,时间复杂度都为O(nlgn),具有空间原址性,只需常数个额外的元素空间存储临时数据。顾名思义,堆排序采用了“堆”这一数据结构,下面先简单介绍一下堆的知识。(参考算法导论第三版内容) (二叉)堆在内存中是一个数组的形式,可以看作一个完全二叉树,从左向右填充。n个节点的堆,高度为θ(lgn).设定树的根节点是A[0],这样给定一个下标i,它的原创 2017-05-16 16:10:56 · 275 阅读 · 0 评论 -
稳定排序之插入排序
插入排序(Insertion Sorting)就是每次都将一个无序的待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。比较顺序是有序部分的从右到左(从大到小)和有序部分比较,算法描述:将待排数组L[0..n-1](共n个数)分为两部分,L[0..i]为有序部分,L[i+1..n-1]为未排序部分。1.i=0. 2.把L[i+1]插入到L[0..i]中的正确位置,i++. 3.i原创 2017-05-16 08:56:44 · 748 阅读 · 0 评论 -
字符串匹配——KMP算法
字符串匹配——KMP算法KMP(Knuth-Morris-Pratt)算法分两部分,先计算Next[]数组,然后进行串匹配。 KmpNext算法描述如下: 输入:样本串P[0..m-1],m为样本长度。 输出:数组Next[0..m-1],即Next函数值。void KmpNext(char P[],int m,int&Next[]){ int i,j; Next[0]=-1; f原创 2017-05-15 22:42:02 · 258 阅读 · 0 评论 -
分治——大整数乘法
问题描述:设X和Y是两个n位的二进制整数,现在要计算它们的乘积XY,传统方法计算每2个1位数乘法或加法都看作一步运算,这样需要O(n2)次位运算,代价太高,现在运用分治法设计一个更有效的大整数乘法算法。当n=1时,计算X·Y就是一次位乘。现在对X、Y进行划分,把X和Y各分为两段,每段长为n/2(假设n=2k,k为正整数), X=A·2n/2+B Y=C·2n/2+D 那么XY=(X=A·2n/原创 2017-05-19 10:49:04 · 1163 阅读 · 2 评论 -
分治——归并排序
归并排序() java代码如下: package 分治技术; /*分治法——归并排序 * 二路归并排序的分治策略是: (1)划分:将待排序序列r1, r2, …, rn划分为两个长度相等的子序列r1, …, rn/2和rn/2+1, …, rn; (2)求解子问题:分别对这两个子序列进行排序,得到两个有序子序列; (3)合并:将这两个有序子序列合并成一个有序序列。 */原创 2017-05-19 10:56:24 · 739 阅读 · 0 评论