精华帖 (1) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-01
minimu 写道 原体的描述是什么样子的呢?
就是上面样子的···· |
|
返回顶楼 | |
发表时间:2009-10-02
我想的:
a. 3000w数据,分成3000组,每组1000条。分组不用占内存,前提是数据是顺序数据。 b. 每组数据找出最大值,并记录该组ID。找最大值的算法只需要1K内存,存各族最大值及组ID是3K内存。 c. 对各组的最大值进行排序,找出前50组ID。3K数据排序,内存需求也不高。 d. 排序前50组数据,总共就剩下5万条了,直接排序即可。 e. 5万条数据也可以再按之前方法细分一次。 |
|
返回顶楼 | |
发表时间:2009-10-02
最后修改:2009-10-02
应该是map/reduce模型 每个map记录最大的50个数(省了所有排序比较),最后一个reduce找前面所有最大的50个数。不知道可不可以。
|
|
返回顶楼 | |
发表时间:2009-10-02
恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据” 比如这字段全部都是数字(1~3000w升序) 那题目做出来的结果,是不是1~50? 如果是这样,那分段来做结果怎么会对呢? |
|
返回顶楼 | |
发表时间:2009-10-02
题目确实写的不太清楚
对于我们这些小菜,不理解其中的一些默认条件 高手常常会把问题往难了想 我们就常常会把问题往简单了想 |
|
返回顶楼 | |
发表时间:2009-10-02
lnaigg 写道 我想的:
a. 3000w数据,分成3000组,每组1000条。分组不用占内存,前提是数据是顺序数据。 b. 每组数据找出最大值,并记录该组ID。找最大值的算法只需要1K内存,存各族最大值及组ID是3K内存。 c. 对各组的最大值进行排序,找出前50组ID。3K数据排序,内存需求也不高。 d. 排序前50组数据,总共就剩下5万条了,直接排序即可。 e. 5万条数据也可以再按之前方法细分一次。 朋友这个是有问题的,1000条里面你每个只找一条 如果莫一个1000条的第二大的数是整个3000w数据第2大的数,那么你不是取不到了么? |
|
返回顶楼 | |
发表时间:2009-10-02
sky726 写道 恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据” 比如这字段全部都是数字(1~3000w升序) 那题目做出来的结果,是不是1~50? 如果是这样,那分段来做结果怎么会对呢? 朋友你看哈 分成1000段 我取出来的是每段的前50条数据 这个样子就是为了避免 前面那位朋友出现的情况 ···3000w的数据在数据库里面直接排序是不可能的~ |
|
返回顶楼 | |
发表时间:2009-10-02
J-catTeam 写道 sky726 写道 恕我愚昧,不是很清楚题目意思
“取某项字段前50项数据” 比如这字段全部都是数字(1~3000w升序) 那题目做出来的结果,是不是1~50? 如果是这样,那分段来做结果怎么会对呢? 朋友你看哈 分成1000段 我取出来的是每段的前50条数据 这个样子就是为了避免 前面那位朋友出现的情况 ···3000w的数据在数据库里面直接排序是不可能的~ 原来如此,我想说的就是前面那位朋友的情况 |
|
返回顶楼 | |
发表时间:2009-10-02
最后修改:2009-10-02
最小堆 大家知道吗? 分冶法呀!
按照pk顺序去取50(这样数据库不会排序,排序就是一个死)然后合并 砍掉50 继续去下面的50 复杂度 我就不说了。 这是简单的而且普遍的处理办法。 补充一点: 这里的3000W件 其实一个幌子,而且还是一个分支点。 如果 3000W条记录*行记录字节数>2G的临界 不能一次取得内存队列里 (注意伪列和排序问题) 分析问题要一步一步来,然后就是多线程问题 加什么该死的二分法呀什么的。 这道题目不值10K月薪。 |
|
返回顶楼 | |
发表时间:2009-10-02
GooHome 写道 最小堆 大家知道吗? 分冶法呀!
按照pk顺序去取50(这样数据库不会排序,排序就是一个死)然后合并 砍掉50 继续去下面的50 复杂度 我就不说了。 这是简单的而且普遍的处理办法。 补充一点: 这里的3000W件 其实一个幌子,而且还是一个分支点。 如果 3000W条记录*行记录字节数>2G的临界 不能一次取得内存队列里 (注意伪列和排序问题) 分析问题要一步一步来,然后就是多线程问题 加什么该死的二分法呀什么的。 这道题目不值10K月薪。 朋友能解释的再详细一点么? 在上面有一个朋友提到了 他说这道题是考验算法的 如果真是考验数据量的话,数据库分层,切分表什么的就能做的 ,是DBA考虑的东西, 所以这道题 ··我已经有点晕了 你最后说的不值10k还是不止10k啊? |
|
返回顶楼 | |