- 博客(9)
- 收藏
- 关注
原创 两个栈模拟一个数列
问题:如何使用两个栈实现一个数列,并写出入队和出队的函数。栈是后进先出,队列是先进先出。为了模拟先进先出,可以使用两个栈A,B,A栈专门管理入队的元素,B栈专门管理出队的元素。比如要将将1 2 3 4 5入队,则全部压入A中,此时A:1 2 3 4 5。如果要出队,则将A中先全部导入到B中,此时B :5 4 3 2 1 ,这时候再从B栈中出来的就是队列出队的顺序。#include#inclu
2016-02-29 12:49:24 440
原创 求两个有序数组的中位数
设两个有序数组X[1...n],Y[1...n],每个包含n个有序元素,设计一个O(logn)的算法来找出X和Y中2n个数的中位数。
2016-02-29 09:55:49 508
原创 确定集合S中与S中位数最接近的k个数
问题描述:设计一个O(n)时间的算法,对于一个给定的包含n个不同元素的集合S和一个正整数K问题分析,我们前面已知Select算法求n个数集合中第k大的数算法复杂度为O(n),解决此问题可以分为以下几步: 1.求出中位数x(可以利用Select函数求集合中第(n+1)/2小的数就是中位数。 2.用x减去集合中的每个数得到差的绝对值储存在数组b[n]中
2016-02-28 21:11:54 2766
原创 求k分位数的k-1个顺序统计量
问题:对于一个包含n个元素的集合来说,k分为数就是指能把有序集合分成k个等大小集合的“k-1个顺序统计量”,给出一个能找出某一集合的k分位数的O(nlogk)的算法。 首先k要整除n,这样才可以分为k个等大小的集合。若将一个大小为n的集合按照顺序排好,我们所要求的这k-1个数就是要把这个集合平均分为k个集合。例如集合A= { 8, 4,0, -89, -12, 0, 36, 7
2016-02-28 16:59:36 2041
原创 最坏情况为线性时间的选择算法
输入:一系列数a[0]...a[n-1]和一个整数K输出:这列数中第k小的数同样的问题在上篇文章中用快速排序模型,我们得到的平均时间复杂度是O(n),但是遗憾的是最坏情况会达到O(n^2)。这篇文章中我们还是使用快速排序的模型,但是改变了划分的方式,这个算法会保准得到一个很好的划分。将该算法叫做Select,具体如下: 1.将输入数组划分为n/5组,每组有5个元素,且剩下的至多
2016-02-28 14:37:13 5214 1
原创 最小与最大值
输入:一个包含n个数的集合A输出:集合A的最大值最小值 单一求解最大值与最小值可以通过打擂台的方法来实现,求解最大值或者最小值需要比较n-1次,若同时要求求出最大值与最小值比较的次数为2*n-2次.事实上我们有比这个更快的算法,比较次数为3n/2.具体做法为:记录已知的最小值与最大值,对输入·的元素成对进行处理,首先比较输入的这对元素,再将小的与当前最小值比较,将大的与当前最
2016-02-27 21:17:57 629
原创 平均时间复杂度为O(n)的选择算法
问题:求一列数中第i小的数求解第k小的数,使用的是快速排序的模型。描述:输入一列数a[0],a[1]...a[n-1]共n个和一个整数i,求第i小的数。分析:对于数组a[p..r]中寻找第k小的数,首先设置一个键值key,比如key=a[p],然后扫描数组一次将数组a[p...r]分解为小于或等于key和大于key的两部分,设key此时所在位置下标为position,于是小于或者等于key
2016-02-27 20:47:39 1603
原创 桶排序
桶排序:假设输入·数据服从均匀分布,平均情况下他的时间代价为O(n).桶排序假设输入是一个随机过程,该过程元素都均匀独立分布在[0,1)区间。桶排序将区间[0,1)划分为n个大小相同的区间或称为桶,然后将n个数据分别放入桶中,我们先对每个桶进行排序,然后再遍历所有桶将结果串起来。比如对double a[10] = { 0.79, 0.13, 0.16, 0.64, 0.39, 0.20, 0.
2016-02-27 15:01:57 469
原创 基数排序应用
问题:设计一个算法在O(n)时间内,对0到n^3-1区间内的数进行排序。 此问题是基数排序的应用,也用到了桶排序。思路如下: 可以将数字用n进制表示,那么0到n^3-1中的数最多是n进制的三位数。这样可以建立n个桶按照次位优先的规则排序3次即可。所以总时间是O(n+n+n)=O(n);例如当n=4时,n^3-1=63,有4个数的数列为54,2,63,15;在排序时首先用4进制表示该数
2016-02-27 12:59:49 2573 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人