问题陈述:有个需要动态更新(插入或删除)的数列L,现在需要随时获取到该数列的中位数,请设计相应的数据结构和算法。
算法:令L的中位数为m,用一个大顶堆存储数列L中不大于m的元素(即L按从小到大排列时的前半部分),用一个小顶堆存储数列L中不小于m的元素(即L按从小到大排列时的后半部分),其中这两个大小顶堆均不包含中位数m。每次往数列L插入新元素x时,若x<m,则将其插入大顶堆,否则插入小顶堆。若插入新元素后导致m不再是中位数(即两个堆的元素数目相差2个或2个以上)ÿ
问题陈述:有个需要动态更新(插入或删除)的数列L,现在需要随时获取到该数列的中位数,请设计相应的数据结构和算法。
算法:令L的中位数为m,用一个大顶堆存储数列L中不大于m的元素(即L按从小到大排列时的前半部分),用一个小顶堆存储数列L中不小于m的元素(即L按从小到大排列时的后半部分),其中这两个大小顶堆均不包含中位数m。每次往数列L插入新元素x时,若x<m,则将其插入大顶堆,否则插入小顶堆。若插入新元素后导致m不再是中位数(即两个堆的元素数目相差2个或2个以上)ÿ