永发信息网

100万个32位整数,如何最快找到中位数.能保证每个数是唯一的,如何实现o算法

答案:1  悬赏:30  手机版
解决时间 2021-03-03 22:06
100万个32位整数,如何最快找到中位数.能保证每个数是唯一的,如何实现o算法
最佳答案
比如 1-9 这9个数字的中位数是 5

这些数的和是 45
temp = 5*0.618=3.09
比如现在的顺序是 189234675
然后 temp每次修正 temp= temp * n/2(n-m) n是 数组 个数 m 是 小于 temp 的 个数
一遍下来 big = {8,9,4,6,7,5}
samll = {1,2,3}
现在 修正 temp = 3.09*9/6 =4.635

一遍下来 big = {8,9,6,7,5}
samll = {1,2,3,4}
temp = 4.635*9/8=5.214375

一遍下来 big = {8,9,6,7}
samll = {1,2,3,4,5}
temp = 5.214375 * 9/8

边界是 count(big) - count(samll) < =1
这样 最后 可以得到 中位数 但是 效率
不高

用的 原来就是 中位数 的 大于他的 和小于他的 个数 一样

对应算法是 search_zhong.php

$arr = array();//定义数组
for($i=0;$i<=1000;$i++){//假设有 1001个数字 现在随机生成
$arr[] = rand(0,10000);
}
$arr_s = $arr;
$time = time();//排序前开始计时
sort($arr);//对数组 排序

$zhongwei = $arr[501];//中位数
echo '中位数是:'.$zhongwei.'找到中位数用了'.time()-$time.'秒
';
$time2 = time();

echo '中位数是:(用马乙说的方法)'.mayiFunc($arr_s,0,0).'找到中位数用了'.time()-$time2.'秒
';

function mayiFunc($arr,$temp,$m){
$n = count($arr);
if($temp == 0){
$sum = array_sum($arr);
$agv = $sum/count($arr);
$temp = $agv*0.618;
}else{
$temp = $temp * $n/(2*($n-$m));
}

$big = array();
$small = array();
foreach($arr as $a){
if($a>$temp){
$big++;
}
else{
$small++;
}
}
if($big>$small){
if($big-$small<=1){
echo $temp;
exit;
return $temp;
}
else{
mayiFunc($arr,$temp,$small);//迭代调用
}
}else{
if($small-$big<=1){
echo $temp;
exit;
return $temp;
}
else{
mayiFunc($arr,$temp,$big);//迭代调用
}
}

}

这样感觉效率还是不高!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
顺兴百货花都分店地址有知道的么?有点事想过
什么是自然对流、强制对流?
走过多少路脚知道,下句是什么
福泉斯瑞医药有限公司这个地址在什么地方,我
蓟县的电视台哪个频道的哪个时段收视率较高?
初三数学找规律题求解答
鑫辉制衣我想知道这个在什么地方
中国太平保险超市地址有知道的么?有点事想过
本人在看守所手机在派出所,别人能拿的出来吗
在现实世界里如何辨别出这个女孩子是纯loli类
天津大学兰州函授站在什么地方啊,我要过去处
广州匡威折扣店在哪里、一般要多少钱
虾有哪些种类?除了对虾还有没有其他种类?
电信手机如何增加当月流量
刘腾副食批发在哪里啊,我有事要去这个地方
推荐资讯
某企业使用标准成本法,某一产品的预算产量为
沈阳盛京医院有手外科嘛 手外科技术如何 或者
淮河西路/民生路(路口)怎么去啊,有知道地址
1号花店(秦汉唐天幕广场)我想知道这个在什么
宝恒百货地址有知道的么?有点事想过去
给一个可以缴水电费或生活用费的卡号,我来缴
风湿性心脏病最常见的瓣膜病变是()。
禁抢群里的抢包手怎么解决
一半径为R,电荷量为Q的均匀带点球体,设无穷远
有谁一起去浙一医院打瘦脸针
最近邮市行情怎么样啊?邮币通想了解下
适利达拉坦前列素滴眼液一个月用不完还能继续
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?