有两个有序数组A和B,设计算法求出A和B的中位数。情况1. 数组A、B长度相等,设为n。1)分别计算A和B的中位数m1和m2。2)比较m1和m2。如果m1等于m2,那么最终结果就是m1(m2)。3)如果m1大于m2,那么中位数必定在和两个子数组中。4)如果m1小于m2,那么中位数必定在和两个子数组中...
分类:
编程语言 时间:
2015-03-31 14:13:57
阅读次数:
203
双堆求中位数
算法描述:
1、创建两个堆(一个小根堆、一个大根堆),堆大小至少为给定数据个数的一半,向上取整;
2、假定变量mid用来保存中位数,取定第一个元素,赋值给mid,即作为初始的中位数;
3、依次遍历后面的每一个数据,如果比mid小,则插入大根堆;否则插入小根堆;
4、如果大根堆和小根堆上的数据个数相差为2,则将mid插入到元素个数较少的堆中,然后从元素个数较多的堆中删除根节点,并将跟节点赋值给mid;
5、重复步骤3和4,直到所有的数据遍历结束;
此时,mid保存了一个数,再加上两...
分类:
其他好文 时间:
2015-03-31 10:50:03
阅读次数:
140
方法类似于快速排序,只是它只处理单侧的情况。
Erlang:这里对于奇数和偶数都是求下中位数find_median([]) ->error;
find_median(A) ->find_median(A,(len(A)+1) div 2).
find_median([H|T],Idx) ->Len=len([X||X<-T,X<H]),...
分类:
其他好文 时间:
2015-03-31 00:52:47
阅读次数:
117
Java集合中二分查找算法实现
Arrays.binarySearch实现了对有序数组特定区间的二分查找,虽然我们觉得很简答,但是阅读源码的确能看到实现这些库的优秀技巧,总是在追求完美和高效。
值得学习的地方有:
(1)边界检查;
(2)求中位数的时候使用位移操作,而不是 x/2;
(3)如果查找的元素不在数组中,通过返回值昭示了应该插入的位置,而不是直接返回-1;...
分类:
编程语言 时间:
2015-03-30 18:50:14
阅读次数:
165
题意:从C有奶牛中选N头,给出它们的分数scores和资助aid,要是这N头牛的总资助不超过F,同时它们中分数的中位数最大。求这个最大的中位数。
思路:按照分数排序,枚举每头牛作为中位数,计算牛i前面N/2头牛的最小资助和后面N/2牛的最小资助(用到优先队列)。最后从后往前找第一个满足l[i]+r[i]+cow[i].second<=F的即为答案。...
分类:
其他好文 时间:
2015-03-21 17:13:09
阅读次数:
247
题意:
给n个士兵的坐标,要把他们移动到水平且相邻的一行,求最小步数。
分析:
中位数法,y方向易求,x方向x0->n+i与x0-i->n是对应的,故也可以转换成y方向的情况。
代码:
//poj 1723
//sep9
#include
#include
using namespace std;
const int maxN=10024;
int x[maxN],y[maxN];
...
分类:
其他好文 时间:
2015-03-19 20:22:24
阅读次数:
131
题目:给你一个数字问将他写成连续的数字的和的形式,有几种写法。
分析:数论。设拆成的序列个数为k,我们分两种情况讨论:
1.拆成奇数个连续数,那么设中位数是a,则有n = k * a;
2.拆成偶数个连续数,那么设中位数是a与a+1,则有n = k / 2 *(a+a+1);
综上所述,本问题就是将n拆成2个数的乘积的...
分类:
其他好文 时间:
2015-03-19 16:30:48
阅读次数:
104
在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。一个中位数是它所属集合的“中点元素”。当n为奇数时,中位数是唯一的,位于i=(n+1)/2处;当n为偶数时,存在两个中位数,分别位于i=n/2和i=n/2+1处。如果不考虑n的奇偶性,中位数总是出现在i=?(n+1)/2?处(下中...
分类:
编程语言 时间:
2015-03-19 16:13:17
阅读次数:
187
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分 成两部分,一部分大于该数值,一部分小于该数值。...
分类:
其他好文 时间:
2015-03-17 21:37:19
阅读次数:
112
中位数即是排过序后的处于数组最中间的元素。 不考虑数组长度为偶数的情况。设集合元素个数为n。简单的想了下:思路1) 把无序数组排好序,取出中间的元素 时间复杂度 采用普通的比较排序法O(N*logN) 如果采用非比较的计数排序等方法, 时间复杂度 O(N), 空间复杂度也是O(N).思路2) 2.1...
分类:
编程语言 时间:
2015-03-17 21:34:15
阅读次数:
185