今天面试的三道题,大牛来看看~

w0911h 2011-03-08 12:24:49
今天面试某大公司,下面是三道面试题,求解答(每道题5分钟思考)...

1.设计一个函数,调用这个函数可以打印出某个目录下的所有子目录和文件,包括子目录的子目录,只有一个API可用,调用这个API可以获得某个目录下的目录和文件列表,文件夹可能非常多,层次可能非常深,考虑空间因素,不考虑时间因素.


2.假设上面的函数没有设计成功,现在要做个简化的树状资源管理器,让用户能看到目录结构并能展开子目录,要考虑空间和时间因素,考虑用户体验,应该怎么实现.


3.做个手机阅读器的搜索功能,能够根据关键字搜索到用户最近阅读到的某本书的相关位置,要求速度快,占用空间少,匹配较精确,书的字数可能达到百万级别,应该如何实现.
...全文
832 点赞 收藏 42
写回复
42 条回复
小光同学 2011年03月16日
额 这些题还是应该拿到纸上比较好说 有点麻烦
回复 点赞
lr2131 2011年03月14日
都是实战的问题,一会是搞不定的,算了
回复 点赞
fx397993401 2011年03月14日
第一提 BFS 应该可以
回复 点赞
陈思有 2011年03月14日
简直看呆了
回复 点赞
xjmlj2010 2011年03月10日
果然不是一般的题目
回复 点赞
lansong1 2011年03月10日
1,直接用递归可能会溢出,所以不予考虑;但是可以用堆栈模拟递归函数,另一种方法是把它看成一颗树,用bfs,广度优先搜索,一看到bfs就想到队列,:-)
2,考虑时间和空间因素,保存上一目录和并搜索下一目录且加载它,意思就是当你看这一目录的时候下一目录已经被加载进来了,只是未显示。这样时间和空间可适度考虑。

3,假如空间暂用小是指内存的空间的话.
a:提取所有关键字,用文件保存在T卡中,不考虑没有T卡的用户,这样既解决空间问题,也解决了时间问题,
不,关键字作为索引,指向的是最新看的书中的关键字位置。也就是说,只考虑用户最近看的那几页书上的关键字。

回复 点赞
willabc 2011年03月10日
算法真的很重要啊,该好好学学了啊!
回复 点赞
jianwei824 2011年03月10日
1.递归,类似findfistfile和findnextfile
2.哈弗曼树
3.将用户记录放入一个链表,对链表查找即可

这样回答不会得最高分,但是时间应该比较快的
回复 点赞
ericming200409 2011年03月10日
1 递归函数非常容易解决。 记得unix环境编程上有样例程序,不过好像不是递归的
回复 点赞
w0911h 2011年03月09日
不知楼上各位给出的算法,有没有计算过在目录很多层次很深的情况下,会占用多少内存,如果我告诉你只有几MB的内存,方法是否可行?
回复 点赞
庄鱼 2011年03月09日
[Quote=引用 27 楼 w0911h 的回复:]

不知楼上各位给出的算法,有没有计算过在目录很多层次很深的情况下,会占用多少内存,如果我告诉你只有几MB的内存,方法是否可行?
[/Quote]
1。方案内存消耗约200k左右,原理是依靠文件目录在存储地址上的相对连续性。本身及加载函数都不占多少资源,而算法所需的文件名及指针保存1k足以;
2。这是一个相对较耗资源方法,因为缓冲区的设立多少会占用一些,但若将多叉树转为二叉树,则M*N的缓冲区就可以相对简单,作为手机来说,由于屏幕的限制,一个20*5的缓冲区就一足够,即便每个文件占用1K的资源,100k也已足够了,加上算法本身的消耗,1M的内存是很宽裕的。
3。如果采用整形比对的话,资源占用仅在于额外的1K快表存储,算法本身的资源消耗很低仅几十K,只要手机尚有1M的可用内存,上述问题都可以解决。
回复 点赞
庄鱼 2011年03月09日
1. 既然不考虑时间,仅考虑空间的话,可以声明两个整形指针,其中一个用以指向目录的层数,一个标记当前层的第n个文件,api函数择选打开文件函数,毕竟无论dos/windows还是unix,目录都是一种文件。程序不需要任何树状结构或环状结构,因为文件名作为参数本身就可以解决一切。变更量增长是一个固定值。
2. 树状同样简单,定义一个M*N的多叉树,作为一个缓冲区,这样其它的可以采用遍历二叉树的方法,很简单的。
3. 手机书的加载量不会很大,否则,看得人也会腻味;-),手机内存也比较金贵,那么准备100个单元的整形数组应该足够了,用以记录最近十本书的十个标签,查找时先对标签处附近进行字符串比较匹配,不成功在进行全文查找、全局查找……
回复 点赞
Barbiegirl2010 2011年03月09日
哎,来学习的,面试怎么这么难额,情何以堪
回复 点赞
w0911h 2011年03月08日
递归显然是不行的了,内存不够用,层次很深的时候栈可能也会溢出

[Quote=引用 5 楼 bdmh 的回复:]
目录应该是考你递归吧,字符串查找,可以使用KMP算法
[/Quote]
回复 点赞
ysjyniiq 2011年03月08日
1。题目1,可以考虑广度优先遍历
1。1目录的下的子目录下入队列,打印目录,打印文件
1。2队列出队
1。3goto1.1
回复 点赞
bdmh 2011年03月08日
目录应该是考你递归吧,字符串查找,可以使用KMP算法
回复 点赞
w0911h 2011年03月08日
各位注意看题目的条件和限制,小儿科的算法或解决方案在这里没用
回复 点赞
haogeai123 2011年03月08日
文件扫描。递归。
网上有很多现成的代码。我以前写了一个,用栈实现的。
回复 点赞
李亚超 2011年03月08日
3:字符串匹配
用Rabin-Karp算法,平均时间较好,或者是用有限自动机
回复 点赞
不服输的小新 2011年03月08日
时间有点短,不好想
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告