给大家解解闷,一个关于中位数的问题

boodweb 2002-08-26 05:06:29
大小为n的数组,其中的数各不相同,要求找出与中位数最接近的k个数,时间复杂度越小越好,看过这个问题的先不要答哦,让没想过的想想
...全文
22 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aliceZOOZ 2002-08-31
对不起,理解错题目了
如果是这样,我想用O(n)的复杂度找到中位数,然后求每个数对中位数的差的绝对值,然后再用O(n)求差的第k大,最后一次扫描就可以了。
回复
boodweb 2002-08-31
alice跟我想的一样,给分了
回复
boodweb 2002-08-30
To aliceZOOZ(alice):
这倒不一定哦,我要找的是最接近的数,比如9个数找5个,9个数是:
1 2 3 4 5 600 700 800 900(注:实际不一定排好序)
那最接近的5个就是1,2,3,4,5了,是第5大的到第9大的
回复
aliceZOOZ 2002-08-30
n=9,k=5
9个数,中位数是第5大的数,我们要找的是第3到第7大的数
先用O(n)找到第3大,再用O(n)找到第7大,
然后再用O(n),扫描一次,把>=第3大且<=第7大的数打印出来
复杂度为O(3n)=O(n)
回复
boodweb 2002-08-29
To aliceZOOZ(alice) :
可以啊,一次扫描只能得出各个数与中位数的大小关系,如果要找出k个最接近的数的话,估计要开一个大小为k的数组保存每个时刻最接近的k个数,然后再逐个调整,复杂度应该是O(n*k)吧?

能不能在O(n)内找出来呢?
回复
aliceZOOZ 2002-08-28
找第p大复杂度为O(n),与中位数最近的k个数就是第n/2-k/2大和第n/2+k/2之间的数,你找到这两个数,然后再一次扫描不就得了
回复
boodweb 2002-08-26
To Bonny_lj(刺猬) :排序的时间复杂度为O(nlogn),能不能把复杂度再降低呢?

quicmous(快鼠) :那只是找中位数,我现在要找与中位数最接近的k个数
回复
许野平 2002-08-26
参见http://www.csdn.net/expert/topic/837/837571.xml?temp=.5144922
回复
许野平 2002-08-26
有一个题目和这个差不多,starfish给出了解法。starfish讲应该用对手论证法来给出一般解法,但我始终没找到资料。
回复
Bonny_lj 2002-08-26
用一种排序方法的第一步不就行了!
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告