一、线性时间排序算法历史概览 计数排序首先是由 Harold H. Seward 于1954年提出,而且他还提出将计数排序和基数排序进行结合的思想;基数排序是L.J.Comrie于1929年首次在一篇描述卡片穿孔机文档中提出的一种方法,它是从最低有效位开始,对一个有多位数组成的数进行排序的方法;而桶...
分类:
编程语言 时间:
2015-09-29 14:29:24
阅读次数:
374
题目出自算法导论第三版,4.1-5.该题中提出“在已知A[1...j]中最大子数组的情况下,可以在线性时间内找出形如A[i...j+1](1<=i<=j+1)的最大子数组”,这一点让我大惑不解。如果这样是线性的话,那遍历数组,总的解法不又是O(N²)了么?又何谈O(N)?必然得在常量时间内找出A[i...
分类:
编程语言 时间:
2015-09-21 19:11:51
阅读次数:
199
扩展KMP问题给定母串S,子串T。定义n = len(S), m = len(T), exend[i] = S[i....n-1]与T的最长公共前缀,在线性时间复杂度内,求出所有的extend[0....n-1].如果有某个位置i满足extend[i] = m,那么T就肯定在S中出现过,并且进一步知...
分类:
其他好文 时间:
2015-09-20 00:18:53
阅读次数:
184
计数排序是一种能够达到运行时间能够线性时间θ(n)的排序算法。在排序算法里算是最快的算法之一,当然,他有很强烈的前提。下面开始介绍一下技术排序(Counting Sort)。算法思想计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。这样可以用一个数组C[0..k]来记录待排序数组里元素的数量。当k=O(n)时,计数排序的运行时间为θ(n).
注:关于C[0..k],用...
分类:
编程语言 时间:
2015-09-18 12:03:25
阅读次数:
209
1 public class MaxSub 2 { 3 public static void main(String[] args) 4 { 5 int[] a ={5,7,3,1,6,2}; 6 System.out.println(maxSub(...
分类:
编程语言 时间:
2015-09-17 19:35:42
阅读次数:
171
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排序,外部排序)数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理)指针(...
分类:
其他好文 时间:
2015-09-01 21:16:57
阅读次数:
241
基数排序前面的算法有一个公关特点,就是基于比较大小来排序的。最坏情况NlogN,除了比较外,在做个些别的事情。桶排序假设我们有N个学生,他们的成绩是0到100之间的整数(于是有M=101个不同的成绩值)。如何在线性时间内将学生按成绩排序?建立101个桶void Bucket_Sort(Element...
分类:
编程语言 时间:
2015-09-01 10:20:42
阅读次数:
343
快速排序算法其实只做了两件事:寻找分割点(pivot)和交换数据。 ????所谓寻找分割点,既找到一个预计会在中间位置附近的点,当然尽量越接近中点越好。 ????所谓交换数据,就是把比这个分割点小...
分类:
编程语言 时间:
2015-09-01 01:54:12
阅读次数:
641
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。举个例子来说,如果我想在字符串s(BBCABCEFABCDACEABCDACD)找是否存在子串t(ABCDABD)。1....
分类:
编程语言 时间:
2015-08-31 23:15:10
阅读次数:
280
这道题目的意思大概是这样: 给我一个整型数组,里面的元素都出现两次,但是有一个元素只出现一次,你要把这个只出现一次的元素给找出来。并且要求算法的时间复杂度为线性,即O(N)。 一开始我思考了很久,始终没有找到方法。若是不限定元素类型为整型,那么根本不可能在线性时间内找到这个只出现一次的元素。...
分类:
其他好文 时间:
2015-08-26 19:40:03
阅读次数:
181