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

boodweb 2002-08-26 05:06:29
大小为n的数组,其中的数各不相同,要求找出与中位数最接近的k个数,时间复杂度越小越好,看过这个问题的先不要答哦,让没想过的想想
...全文
69 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
用一种排序方法的第一步不就行了!

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧