KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。 1.kmp算法的原理: 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"AB ...
分类:
编程语言 时间:
2016-06-30 06:23:31
阅读次数:
206
线性时间排序 各种排序算法总结已经介绍了几种能在O(n*log(n))时间内培训n个数的算法。归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。这些算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。这类算法为比较算法,还有一类算法是线性时间复杂度的排 ...
分类:
编程语言 时间:
2016-06-21 09:16:48
阅读次数:
183
各种排序算法总结已经介绍了几种能在O(n*log(n))时间内培训n个数的算法。归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。这些算法都有一个有趣的性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。这类算法为比较算法,还有一类算法是线性时间复杂度的排序算法,有计数 ...
分类:
编程语言 时间:
2016-06-19 15:33:42
阅读次数:
181
时间复杂度计算实例 表示时间复杂度的阶有: O(1) :常量时间阶 O (n):线性时间阶 O(㏒n) :对数时间阶 O(n㏒n) :线性对数时间阶 O (nk): k≥2 ,k次方时间阶 例1 两个n阶方阵的乘法 for(i=1,i<=n; ++i) for(j=1; j<=n; ++j) { c ...
分类:
其他好文 时间:
2016-06-15 10:29:39
阅读次数:
281
扩展KMP: 给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0 k,所以又有A[i..p] == B[i - k..p - k],设L = next[i - k],则根据next的定义有B[0..L - 1] == B[i - k..i - k + L - ... ...
分类:
其他好文 时间:
2016-06-14 23:52:17
阅读次数:
219
问题描述: https://leetcode.com/problems/single-number-iii/ 在一个数组里面,只有两个元素仅出现过1次,其余都出现过两次。找出出现仅一次的那两个(a, b)。 要求常量空间,线性时间。 问题解决: 这题用到“神奇的位运算”。 1.因为除了特殊的两个元素 ...
分类:
其他好文 时间:
2016-06-10 17:46:05
阅读次数:
109
计数排序:最差运行时间复杂度:,平均:,k是数字范围区间长度,n是数组长度。 这是一种稳定的线性时间排序 如果要排序的内容已知其范围,比如要排序的所有数字都是1~100之间的数(使用计数排序是最好的选择) KEY-IDEA:由于计数的范围已经确定,因此,可以开辟一个额外的空间来记录所有数字出现的次数 ...
分类:
编程语言 时间:
2016-06-05 18:56:32
阅读次数:
263
一个有n个元素的序列A中,出现次数大于n/2的元素称为主元素。现给定一个序列(保证存在主元素),求其主元素。 一种思路是Boyer和Moore提出的减治法,可以在线性时间内求得主元素。如果不确定序列是否存在主元素,还需要再加一个线性的判断。 以下假设A的主元素存在,且出现了k次,则其他元素出现的次数 ...
分类:
其他好文 时间:
2016-05-29 23:02:28
阅读次数:
373
MP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表next过程中进行了多个层面的优化和抽象,使得KMP算法进行模式匹配的原理显得不那么直白。本文希望能够深...
分类:
编程语言 时间:
2016-05-27 13:07:47
阅读次数:
277
问题: 求解数组中连续一段子数组和的最大值。例如:{31,-41,59,26,-53,58,97,-93,-23,84},最大值为59+26-53+58+97=187 思路: 计算出任意i到j之间连续子数组的和再比较必然能得到最大值,但时间复杂度为O(n^2),我们希望能找出线性时间的算法。 我们注 ...
分类:
编程语言 时间:
2016-05-19 21:15:47
阅读次数:
178