本次作业大力感谢以下量 参考信息经典算法总结之线性时间做选择http://www.cnblogs.com/javaspring/archive/2012/08/17/2656208.html11.4 双重散列法:http://blog.csdn.net/zixiawzm/article/detail...
分类:
编程语言 时间:
2015-04-16 23:19:26
阅读次数:
159
线性时间排序
1.计数排序
2.基数排序
3.桶排序...
分类:
编程语言 时间:
2015-04-14 19:42:38
阅读次数:
249
这里利用直接寻址法去重,遍历链表,如果对应数组位置值为0,则修正为1,如果对应数组为1,则删除该节点。(数组初始化为0)链表的一些操作都简单的实现了一下。#include #include #include struct Node{ int key; Node *next;};struc...
分类:
编程语言 时间:
2015-04-14 14:26:36
阅读次数:
174
这里以小顶堆为例:思路:对于堆排序来说,首先需要做的是要建堆,建堆是一个不断调整堆的过程,能够在线性时间内完成。堆排序的过程1、建堆,建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程,从len/2到0处一直调用调整堆的过程,相当于o...
分类:
编程语言 时间:
2015-04-10 23:47:55
阅读次数:
175
题目大意给出一个字符串,求出这个字符串的最长回文子串。思路前来学习著名的Manacher算法。
这是一个线性时间求出回文子串的算法。具体来说,对于我们弄出的一个回文串,它对于后面的串并不是,没有用的,因为它的左右两侧是相同的,那么自然可以用左边的信息去更新右边。
设p[i]p[i]为第ii个字符的回文半径,_max\_max为max{p[i]+i}max\{p[i] + i\},也就是最远可以更...
分类:
其他好文 时间:
2015-04-07 09:47:35
阅读次数:
119
1 #include 2 #include 3 using namespace std; 4 void swap(int *a, int *b) 5 { 6 int *c = a; 7 a = b; 8 b = c; 9 }10 int Partition(int *A, ...
分类:
编程语言 时间:
2015-04-03 23:53:20
阅读次数:
356
采用Kadane算法求解最大子串和问题(线性时间复杂度情况下结题)...
分类:
编程语言 时间:
2015-03-31 09:20:34
阅读次数:
156
能否找到一个保证线性时间性能的算法,这个问题非常难。还有一些改进加权快速合并算法的简单方法。理想情况下,我们希望每个结点直接连到其树根,但又不想像快速合并算法那样改变大量连线。我们可以简单地把所检查的所有结点连到根上,从而接近理想情况。我们可以很容易地实现..
分类:
编程语言 时间:
2015-03-21 21:33:46
阅读次数:
180
1.计数排序基本思想:对于每一个输入元素x,确定小于(或等于)x的元素个数,就可以确定x的存放位置.特点:稳定排序#include#includeusing namespace std;void count_sort(vector A,vector &B,int k){ vector C(k+...
分类:
编程语言 时间:
2015-03-18 20:08:43
阅读次数:
249
对于以前,如果要我求第k小元素,或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,但是现在有了更好的思路。一.线性时间内求第k小元素
这个算法又是一个基于分治思想的算法。其具体的分治思路如下:
1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分,使得A[p,q-1]都小于A[q],A[q+1,r]都不小于A[q];
2.求解:如果A[q]恰好是...
分类:
编程语言 时间:
2015-03-18 14:08:46
阅读次数:
190