标题:今天遇到一个有意思的问题,有关大数据的算法
只看楼主
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
结帖率:96.08%
已结贴  问题点数:20 回复次数:13 
今天遇到一个有意思的问题,有关大数据的算法
问题背景:有一个非常大的二维数组N,尽可能地找出其中最大的n个数,n为变量但远远小于N的数据规模。
注意:这个数组非常之大,以至于无法在合理的时间范围内对其进行遍历。暂且不讨论存储问题,假设数组已经完全存储在内存中了。
根据问题背景,允许运行结果不是最优解,但要在程序的运行时间合理的范围内尽可能接近最优解。
例如:要求找出前10个最大的数,最后可以只找到相对比较大的10个数(当然越接近正确答案越好)。
也允许这样的算法:即便给的时间无限长,最终也不能找到最优解,但可以快速地给出次优解。
问题是我根据实际情况抽象出来,自己描述的,可能有所偏差,如果对题目本身的叙述有问题,请继续提问。

补充1:这个二维数组描述的是一个地区的地形,每个点的数值都是表示海拔高度,所以变化相对平缓。

--------------------
有没有人有点想法?

[ 本帖最后由 蚕头燕尾 于 2015-6-19 20:05 编辑 ]
搜索更多相关主题的帖子: 正确答案 最大的 规模 
2015-06-19 20:00
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
倒数M个数值为相对较大的值   不遍历 如何获取到

DO IT YOURSELF !
2015-06-19 20:02
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
得分:0 
回复 2楼 wp231957
已经补充了问题背景,请看一楼的:
补充1

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2015-06-19 20:06
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:5 
直觉感觉这种问题用数组来存储可能不好.  第六感, 没有依据, 错了莫怪.

换一种存储方式, 造个等高线,是不是会好一些?

代码测试环境:  WinXP+C-Free5.0.
2015-06-19 22:37
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
得分:0 
做一个环行的12`个元素的指针数组,放10个大数据排序
做 2个指向数组的指针,1个指大,1个指小
遍历数组一遍
比小指针小的,跳过
比大指针大的,无条件存入上面数组,两数组指针均加1
介于两指针之间的,插入上面数组,小指针加1
2015-06-19 22:47
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
得分:5 
随机选取一些点(或是根据情况划定一间隔取点),找出最大的,在最大的周围搜一圈


莫问前尘有愧,但求今生无悔
2015-06-19 22:56
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:5 
很简单,百度 快速选择

我就是真命天子,顺我者生,逆我者死!
2015-06-20 06:22
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:735
专家分:3478
注 册:2013-1-26
得分:5 
可以考虑采用梯度下降法,或者直接用标准的遗传算法。

大开眼界
2015-06-20 07:35
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
得分:0 
回复 4楼 vvvcuu
这个二维数据是已知的唯一数据,要想从这个数据转换成登高线存储,
要先遍历这个数据?

要是只遍历一遍还好说,但是这个数据是动态变化的(变化频率相当可观),
所以动态绘制登高线是不是就有点不太划算了?

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2015-06-20 13:00
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
得分:0 
回复 5楼 实际应用
做一个环行的12`个元素的指针数组,放10个大数据排序-----环行是什么意思?
做 2个指向数组的指针,1个指大,1个指小
遍历数组一遍----------------请仔细看一楼,数据规模很大,单是遍历就已经相当耗时了。
比小指针小的,跳过
比大指针大的,无条件存入上面数组,两数组指针均加1
介于两指针之间的,插入上面数组,小指针加1

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2015-06-20 13:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-446803-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.161997 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved