avatar
h*r
1
版上曾经出现的一道题,没想出正确解法,大牛们讨论讨论,指点一下
给两个部分排序的文件和partially sorted的值m,部分排序是定义为比如1 2 4 5
6 7 3, 3应该在2后面,那么3的partially sorted的值就是4.因为最多放在该点前面
4个index的位置。要实现两个file merge的输出,要输出的file是排序的。限制是file
很大很大,不能放在内存里面处理。
avatar
r*3
2
只有最后一个数字是乱序的么?
如果m不是很大,可以每次读m+1个数字,在缓存中,如果发现最后一个数字小于第一个
数字,就把最后一个数字先比较。

file

【在 h***r 的大作中提到】
: 版上曾经出现的一道题,没想出正确解法,大牛们讨论讨论,指点一下
: 给两个部分排序的文件和partially sorted的值m,部分排序是定义为比如1 2 4 5
: 6 7 3, 3应该在2后面,那么3的partially sorted的值就是4.因为最多放在该点前面
: 4个index的位置。要实现两个file merge的输出,要输出的file是排序的。限制是file
: 很大很大,不能放在内存里面处理。

avatar
a*a
3
应该是两个size为m的min-heap(这样能确保min再其中一个heap里面)
heap 1 负责 file 1, heap 2 负责 file 2
每次extract min(root1, root2) 写到 f3, 然后insert new value into the heap
直到file读完 heaps 都为空
至于内存限制.... f3 写的差不多了 就存到disk一下
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。