社区
数据结构与算法
帖子详情
百度的一道笔试题,求思路
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
打赏
收藏
百度的一道笔试题,求思路
2.算法 在一个文件中,N个无序数,但是存在一个整数M,有R1 <R2 <R3 <... <RM 和RM+1 <RM+2 <RM+3 <... <RN,现在需要对文件排序 (1)读取文件次数复杂度为O(N),内存不限 (2)读取文件次数复杂度为O(N),内存为O(1),可以为与M,N不相关的常量 第一小题我感觉用排序网络可以实现,不知道对不对 第二小题没什么思路
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
天下第一好大人
2010-01-30
打赏
举报
回复
LS确定in-place merge的空间复杂度是O(1)并且读取文件复杂度是O(N)吗?
因为如果读取文件复杂度是O(N),那么每个数据只能读取常数次。
绿色夹克衫
2010-01-30
打赏
举报
回复
原地归并么?挺复杂的,有用块儿处理的,详细的不太了解。
估计百度不会考这么有难度的题吧!
jcrsjcrs
2010-01-30
打赏
举报
回复
学习中
天下第一好大人
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]
天下第一好大人
2010-01-30
打赏
举报
回复
[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,
不是有序了么
我怎么读不懂题目啊
2021华为 HCIE 数通 LAB 题库 版本 视频 讲解赠
笔试题
库
本课程可以帮助大家顺利通过HCIE数通方向 LAB考试,LAB版本解法视频配套讲解,讲解细致,通俗易懂,资料完整,可以帮助打开理解HCIE3.0考试的方法
思路
,顺利通过HCIE LAB考试。1、HCIE数通 LAB考试上午3小时考 TS排错 和 TAC诊断。 备考标准: TS在一个半小时内全部做完排出所有错点,出现象。 TAC 在 1个半小时内完成诊断的写作2、下午5小时考实验LAB备考标准: LAB 在 3个半小时内全部敲熟练出现象。自学备考达到以上标准即可参加HCIE LAB考试。课程课件附件中包含赠送的HCIE
笔试题
库、LAB拓扑解法、TS拓扑解法、TAC解法,适合自学备考HCIE LAB
一道
简单的
百度
笔试题
一、引言 试着做了一下
一道
百度
笔试题
,做着还蛮有意思的,贴出来和大家一起分享一下 二、题目 懒一回,就不敲了,直接贴截图了,哈哈。 三、我的解法 首先考虑编程语言,我最熟悉的莫过于java,那就用java来编写吧。 我的
思路
:输入都是成组的,第一个是n,第二个是m,因此可以用这一点做为数据分割的原则。不多说,看代码: for(int i=...
一道
百度
笔试题
的思考
前几天参加了
百度
的笔试, 就 AC 了
一道
题(留下菜鸡的泪水). 第三题没怎么花时间, 但是第二题是花了时间没做出来, 今天在牛客上学习了一下大佬们的代码, 居然还是没太明白(怀疑人生了). 就又去请教了东哥. 题目 输入两行数 : 第一行 : n (表示数组元素个数, 规模不大, 2 <= n <= 50 如果没记错的话) 第二行 : n 个数 (数值很大, 需要用 lon...
百度
的
一道
笔试题
一个数组由正数和负数组成,把所有的负数全部放到正数前面,并且要
求
负数之间,正数之间的相对位置不变。 首先可以肯定的是基于快排思想的方法是不行的,因为快排的不稳定的,鉴于此我们可以采用冒泡的方式,对每一个数,如果是负数就向左冒泡,如果是正数就向右冒泡 下面给出的是另一个
思路
void arraydivsort(int a[],int n) { int temp=0; i
每日
一道
编程题 --> 摘自于曾经
百度
的
一道
笔试题
利用宏定义来完成二进制奇数偶数的互换 --> 摘自于曾经
百度
的
一道
笔试题
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章