算法之道
文章平均质量分 79
dpkirin
这个作者很懒,什么都没留下…
展开
-
求三个排序数组的交集
void GetThreeArrayComm(int A[],int lenA,intB[], int lenB, int C[],int lenC){ assert(A!= NULL&&B != NULL&&C != NULL&&lenA > 0&& lenB >0&&lenC > 0); int i=0; i原创 2013-10-06 14:17:20 · 2050 阅读 · 0 评论 -
数组表示数的下一个比它大的最小的置换
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest possibl原创 2013-10-06 15:49:10 · 1572 阅读 · 2 评论 -
字符串匹配的KMP算法
作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Don转载 2013-10-07 13:05:44 · 1534 阅读 · 0 评论 -
KMP算法
int*next = NULL; void get_next(constchar * p){ assert(p != NULL); int m=strlen(p); next= (int*)malloc(m*sizeof(int)); if(next==NULL) {原创 2013-10-06 15:50:23 · 1141 阅读 · 0 评论 -
快速排序 改进快排的方法
快速排序法事应用最广泛的排序算法之一,最佳情况下时间复杂度是 O(nlogn)。但是最坏情况下可能达到O(n^2)。说明快速排序达到最坏情况的原因。并提出改善方案并实现之。答:改进方案:改进选取枢轴的方法1、选取随机数作为枢轴。但是随机数的生成本身是一种代价,根本减少不了算法其余部分的平均运行时间。2、使用左端,右端和中心的中值做为枢轴元。经验得知,选取左端,右端,中心元素原创 2013-10-07 11:32:42 · 25191 阅读 · 2 评论 -
字符串匹配的Boyer-Moore算法 BM算法详解
作者: 阮一峰日期: 2013年5月 3日上一篇文章,我介绍了KMP算法。但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Mo转载 2013-10-07 13:08:07 · 2030 阅读 · 0 评论 -
红黑树详解
前言: 之所以要写这篇文章,第一个目的是为了各位朋友在查看我写的源代码之前有一个可以理解理论的文章因为红黑树还是有点难的,如果不想搞懂理论,而直接看代码,那绝对是云里雾里,不知所云。第二个目的是我觉得网上虽然后不少我文章也在讲,但是我就是理解不上有点困难,在我参考了很多文章之后,认真阅读才慢慢摸透了其中的原理,所以我想用自己的方式来表达,希望有助于各位的朋友转载 2013-10-07 10:45:33 · 2206 阅读 · 0 评论 -
归并排序 笔试面试手写代码常考
归并排序是将两个或者两个以上的有序序列进行合并的一种排序算法。采用了分治的思想。它的主要思路是将序列分为两个子序列,对于两个最终有序的子序列进行合并,得到有序的整体序列。如何保证子序列有序呢?对子序列采用同样的方式进行划分,当子序列长度为1时,子序列有序,此时合并相邻的子序列。层层返回,不断地进行合并,最终完整的序列就是一个有序的序列。归并排序可以很清晰地以递归的方原创 2013-10-07 11:35:38 · 4398 阅读 · 3 评论