中位数(第k大数)快速求法

您所在的位置:网站首页 求平均数最快的方法 中位数(第k大数)快速求法

中位数(第k大数)快速求法

2024-07-14 10:26| 来源: 网络整理| 查看: 265

本文为twenz根据个人经验整理,转载请注明来源,谢谢!

 

中位数即为一系列数中的大小在中间位置的数,快速找中位数的有效方法有:

1.排序法:先对数组进行排序,时间复杂度为O(nlogn),然后选择中间的数

2.快排的筛选法(类似于找第k大的数):思想是选定一个数,找比它大的数和小的数,然后根据数量再在大的部分或者小的部分循环递归找,时间复杂度应该为O(n)

 

如果给定两个有序的系列,需要查找他们共同的中位数,时间复杂度又会是多少呢?

1. 直接对两个有序系列进行逐个元素比较,时间复杂度为O(m+n)

2. 采用二分查找(类似于找第k大点),先以一个序列的基准点(二分来确定)来在另外一个系列中二分查找,再不断更新两系列的上下界限,时间复杂度应该在O(logm*logn). 下面是一个程序的基本框架,不一定正确,只是提供架构思想,待以后碰到类似问题我将更新该代码:

double findMid(int pm,int m){     if(pm == 0 || pm == m){         if(m%2)return a[m/2]*1.0;        else return (a[m/2]+a[m/2-1])/2.0;    }    int low1=0,up1=pm-1,low2=pm,up2=m-1,mid1,mid2,num;    while(low2



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3