百度的一道笔试题,求思路

hhxkss 2010-01-27 05:17:06
2.算法
在一个文件中,N个无序数,但是存在一个整数M,有R1 <R2 <R3 <... <RM 和RM+1 <RM+2 <RM+3 <... <RN,现在需要对文件排序
(1)读取文件次数复杂度为O(N),内存不限
(2)读取文件次数复杂度为O(N),内存为O(1),可以为与M,N不相关的常量


第一小题我感觉用排序网络可以实现,不知道对不对
第二小题没什么思路
...全文
592 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?

因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。
绿色夹克衫 2010-01-30
  • 打赏
  • 举报
回复
原地归并么?挺复杂的,有用块儿处理的,详细的不太了解。
估计百度不会考这么有难度的题吧!
jcrsjcrs 2010-01-30
  • 打赏
  • 举报
回复
学习中
  • 打赏
  • 举报
回复
我呆了,那个空间是本身的一部分,呵呵。

[Quote=引用 14 楼 mysword 的回复:]
你再搜搜,还有O(1)的

引用 13 楼 gogdizzy 的回复:
引用 12 楼 mysword 的回复:
当然,merge的比较次数是O(n),每次拿两个数据比较,所以读文件的次数当然是O(n)了
引用 11 楼 gogdizzy 的回复:
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?

因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。


我读了一篇文章,里面好像说辅助空间要sqrt(N),这样就不是O(1)了。

[/Quote]
gnefuil 2010-01-30
  • 打赏
  • 举报
回复
你再搜搜,还有O(1)的

[Quote=引用 13 楼 gogdizzy 的回复:]
引用 12 楼 mysword 的回复:
当然,merge的比较次数是O(n),每次拿两个数据比较,所以读文件的次数当然是O(n)了
引用 11 楼 gogdizzy 的回复:
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?

因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。



我读了一篇文章,里面好像说辅助空间要sqrt(N),这样就不是O(1)了。
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mysword 的回复:]
当然,merge的比较次数是O(n),每次拿两个数据比较,所以读文件的次数当然是O(n)了
引用 11 楼 gogdizzy 的回复:
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?

因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。

[/Quote]

我读了一篇文章,里面好像说辅助空间要sqrt(N),这样就不是O(1)了。
gnefuil 2010-01-30
  • 打赏
  • 举报
回复
当然,merge的比较次数是O(n),每次拿两个数据比较,所以读文件的次数当然是O(n)了
[Quote=引用 11 楼 gogdizzy 的回复:]
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?

因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。
[/Quote]
gnefuil 2010-01-29
  • 打赏
  • 举报
回复
我觉得如果能够把数据先拷贝到别的地方,再把原来的数据改掉,那么这两问根本没什么区别。你只是把硬盘当内存用而已。
真正的难点在于如果不许在硬盘上开辟任何新的存储空间,如何做到归并
这个地方就需要in-place merge,有兴趣可以搜一下这个,算法比较复杂。

[Quote=引用 7 楼 michael122 的回复:]
第二题我的想法:
第一遍读取时,生成两个文件,一个存放R1 <R2 <R3 <... <RM,另一个存放RM+1 <RM+2 <RM+3 <... <RN,只需内存中一个变量即可;
第二遍,对两个文件归并,写回第一个文件,需要2个变量

楼主看看行不行,我觉得多建2个文件没关系吧,不知道有没有理解错
[/Quote]
bigc2000 2010-01-29
  • 打赏
  • 举报
回复
百度的题目,确实晦涩难懂,不知道是不是我的理解力的问题。
这个题目,完全不懂

是说
R1,。。。Rm
与Rm+1。。。Rn可能 不可比较 么?

R1<Rm+1
R1>Rm+2
hhxkss 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lenovo_ 的回复:]
楼主说的文件,是什么类型的文件?
操作系统意义上的,还是数据库上的?

第一个题目,只要把文件从头读到尾,读到内存中,排序后再写入文件。

第二个不好办,要求空间复杂度为O(1)

外排序 都是先把数据送到内存,排好序后在送到磁盘上。

归并排序也是的啊。空间复杂度肯定要大于O(1)
[/Quote]

我的理解应该是指操作系统意义上的文件,可以简单的认为是文本文件
hhxkss 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 michael122 的回复:]
第二题我的想法:
第一遍读取时,生成两个文件,一个存放R1 <R2 <R3 <... <RM,另一个存放RM+1 <RM+2 <RM+3 <... <RN,只需内存中一个变量即可;
第二遍,对两个文件归并,写回第一个文件,需要2个变量

楼主看看行不行,我觉得多建2个文件没关系吧,不知道有没有理解错
[/Quote]

我觉得这方法可行
michael122 2010-01-28
  • 打赏
  • 举报
回复
第二题我的想法:
第一遍读取时,生成两个文件,一个存放R1 <R2 <R3 <... <RM,另一个存放RM+1 <RM+2 <RM+3 <... <RN,只需内存中一个变量即可;
第二遍,对两个文件归并,写回第一个文件,需要2个变量

楼主看看行不行,我觉得多建2个文件没关系吧,不知道有没有理解错
gnefuil 2010-01-27
  • 打赏
  • 举报
回复
需要写回同一个文件么?是的话,就需要in-place merge了
LENOVO_ 2010-01-27
  • 打赏
  • 举报
回复
楼主说的文件,是什么类型的文件?
操作系统意义上的,还是数据库上的?

第一个题目,只要把文件从头读到尾,读到内存中,排序后再写入文件。

第二个不好办,要求空间复杂度为O(1)

外排序 都是先把数据送到内存,排好序后在送到磁盘上。

归并排序也是的啊。空间复杂度肯定要大于O(1)
q3745960 2010-01-27
  • 打赏
  • 举报
回复
R1 ,R2 ,R3 ... RM ,RM+1 ,RM+2 ,RM+3 ... RN
是对应开始文件中的无序数列还是经过排序后的数列?

即RM是否表示无序数列的第M的数吗?
hhxkss 2010-01-27
  • 打赏
  • 举报
回复
RM 和RM+1的关系不知道,是两个递增序列
keeya0416 2010-01-27
  • 打赏
  • 举报
回复
R1 <R2 <R3 <... <RM 和RM+1 <RM+2 <RM+3 <... <RN,
不是有序了么
我怎么读不懂题目啊

33,006

社区成员

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

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