免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5294 | 回复: 21
打印 上一主题 下一主题

[算法] 大家都出来动动脑子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-01 17:14 |只看该作者 |倒序浏览
现有n个数(n很大),内存最多容纳n/5个数,求这n个数的中位数。(中位数是指从小到大排序后,(1)若有奇数个,即为中间那个数;(2)若有偶数个,即为中间位置偏左的那个数)

论坛徽章:
0
2 [报告]
发表于 2007-11-01 17:57 |只看该作者
说出思路就行了, 可以不用给出代码

论坛徽章:
0
3 [报告]
发表于 2007-11-01 18:02 |只看该作者
把数组分5组,求出每组的最大的元素,然后将这些最大的元素进行比较,取在中间的一组,再求这组的中间值.

论坛徽章:
0
4 [报告]
发表于 2007-11-01 20:24 |只看该作者
这个算法应该还有点问题....我有时间再想想.

论坛徽章:
0
5 [报告]
发表于 2007-11-01 20:50 |只看该作者
应该还有外存储器吧??要是有的话应该是可以的,否则就困难多了..

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2007-11-01 20:55 |只看该作者
先作这么一个假定: 假定所有的n个数都不相同. 然后就可以用bitmap在n/5的空间里保存下n个数. 具体做法: 假设n个数都是32位整数(其余情况类推), 我们把n/5的内存空间看作一个长为n / 5 * 4 * 8 的位串.  现在如果整数x 出现在这n个数中, 那么把位串的第x位设为1, 否则设为0. 这样找中位数从左向右一个一个地数就行了.

如果n个数中有相同的, 目前还没有办法.

论坛徽章:
0
7 [报告]
发表于 2007-11-02 09:07 |只看该作者
貌似还没有人解答出来哦

论坛徽章:
0
8 [报告]
发表于 2007-11-02 09:40 |只看该作者

easy

读2个,留下小的,
读1个,留下大的,
读1个,留下小的,
读1个,留下大的,
读1个,留下小的,
……

最后留下的一个,就是要的那个,

论坛徽章:
0
9 [报告]
发表于 2007-11-02 09:47 |只看该作者
原帖由 yuanchengjun 于 2007-11-1 17:40 发表
读2个,留下小的,
读1个,留下大的,
读1个,留下小的,
读1个,留下大的,
读1个,留下小的,
……

最后留下的一个,就是要的那个,


如果数据是1,2,3,...,5000000,你最后留下什么?呵呵。

论坛徽章:
0
10 [报告]
发表于 2007-11-02 09:55 |只看该作者
原帖由 yuanchengjun 于 2007-11-2 09:40 发表
读2个,留下小的,
读1个,留下大的,
读1个,留下小的,
读1个,留下大的,
读1个,留下小的,
……

最后留下的一个,就是要的那个,

如果只是1 2 3 三个数,留下的是3,而不是2.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP