一、实验目的:熟悉掌握分治算法设计技术。二、实验要求:1、按教材所授内容要求,完成“线性时间选择问题”算法。得到一个完整正确的程序。2、问题规模:不少于20003、输出最终结果。三、实验设备:PC机一台四、问题描述:运用分治法的原理,对随机生成的数进行查找,找出其中第K大小的数,找出之后输出所找到的...
分类:
编程语言 时间:
2014-11-15 21:37:28
阅读次数:
629
数组a中含有N个元素,其元素属于[0,N]之间,且不存在重复的元素,请你找出数组中缺失的元素(因为[0,N]之间有N+1个元素,而数组只能存储N个元素,所以必然缺少一个元素)。其中对数组的操作满足下列的条件:不能在常数时间内读取数组中的元素,但是可以读取数组中元素的某一个bit值,能够在常数时间内交换数组的两个元素的位置。请设计一种算法使其能够在线性时间内找出数组中缺失的元素。(N=2^k)
A...
分类:
编程语言 时间:
2014-11-08 15:16:47
阅读次数:
250
给一个整数数组,其中只有一个数字成单,其他数字都是成对出现,要在线性时间且不花费额外存储空间的条件下找出成单的数字。解决起来出奇的简单,主要运用到异或运算的两个基本性质:交换律:a^b^c=a^(b^c)a^a=0 a^0=a所以得到以下代码:public class Solution { p...
分类:
其他好文 时间:
2014-11-08 07:05:40
阅读次数:
183
摘要: 本章先回顾了前面介绍的合并排序、堆排序和快速排序的特点及运行运行时间。合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O(n^2),平均情况下达到O(nlgn),因此合并排序和堆排序是渐进最优的。这些排序在执行过程中各元素的次序基于输入元素间的比较,称这种算法为比较....
分类:
编程语言 时间:
2014-11-03 14:15:19
阅读次数:
301
题目链接:http://poj.org/problem?id=1200分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的;使用hash可以在常数时间内查找,可以常数时间内判重,可以再线性时间内解决问题;问题关键在与Hash函数的选择,使得子串之间的Hash值不同;由于NC的提示,使用...
分类:
其他好文 时间:
2014-10-31 20:29:34
阅读次数:
245
计数排序(Counting sort)是一种稳定的线性时间排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据.....
分类:
编程语言 时间:
2014-10-28 19:35:34
阅读次数:
218
目录 1、问题的引出-求第i个顺序统计量2、方法一:以期望线性时间做选择3、方法二(改进):最坏情况线性时间的选择4、完整测试代码(c++)5、参考资料内容 1、问题的引出-求第i...
分类:
编程语言 时间:
2014-10-24 00:02:48
阅读次数:
640
randomized_select函数的期望运行时间是Θ(n),这里假设输入数据都是互异的.它返回数组A[p, r]中第i小的元素.该函数最坏情况运行时间为Θ(n2),即使是找最小元素也是如此,以为在每次划分时可能极不走运地总是按余下的元素中最大的来进行划分,而划分操作需要Θ(n)时间.我们也将看到...
分类:
编程语言 时间:
2014-10-16 13:07:52
阅读次数:
264
求给定输入中第k大的数的算法。这是一个常见面试题,通常的解法也很明显,使用类似快排的思想。每趟运行,把数组的值分成两部分,一部分比pivot大,一部分比pivot小,因为我们知道pivot在数组中的位置,所以比较k和pivot的位置就知道第k大的值在哪个范围,我们不断的进行recursion, 直到...
分类:
编程语言 时间:
2014-10-16 13:02:32
阅读次数:
404
最大子序列积问题??
leetcode
Find the contiguous subarray within an array (containing at least one number)
线性时间算法...
分类:
其他好文 时间:
2014-10-13 23:44:27
阅读次数:
254