求多个有序数组的中位数

该博客探讨了一种仅依赖中位数性质来求解多个有序数组中位数的算法。通过利用对称性、确定性、不变性和关联性等性质,逐步缩小中位数的搜索范围,直至找到满足条件的中位数。算法通过计算各数组的中位数、最小值和最大值,以及在特定区间内的中位数,递归地进行搜索和排除,以达到高效求解的目的。
摘要由CSDN通过智能技术生成

题目:求解多个有序数组的中位数


题目的意思是如果多个有序数组能在一起排序,则取位置为中间的数字,如果有奇数个数字则中位数只有一个;若为偶数个则有两个,一般取第一个,也称下中位。但不能把数组合在一起做插入或快速排序,因为数据可能是海量的。


该题目可能有很多种实现方法,而我们给出一种仅依赖中位数性质的算法。如果存在一个已经排好序的大数组(有序数列),则会发现几个性质:

  1. 对称性:中位数前面的数字与后面的数字一样多(在偶数元素情况下或相差1)
  2. 确定性:若某个数字前后的数字数量相同(或相差1)则为该数列的中位数
  3. 不变性:删除前N个元素与后N个元素后,中位数不变
  4. 关联性:从大数组中按顺序任意取走n-1组元素,与剩下的元素共构成n个子列,每个子列存在中位数:m1,m1...mn,min,max分别为其中最小者与最大者,则原数列的中位数m满足:min<=m<=max
    该性质可通过反证法获得
根据上述性质构造下面基于3分查找的算法:
  1. 输入多个有序数组查找其中位数m
  2. 计算个数组的中位数,并计算其最小者min与最大者max,则m必满足min<=m<=max
  3. 计算min之前所有的数字lTripCount(在所有数组)及max之后所有的数字rTripCount,如果二者相同,则min与max都为中位
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值