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

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

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


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


3.做个手机阅读器的搜索功能,能够根据关键字搜索到用户最近阅读到的某本书的相关位置,要求速度快,占用空间少,匹配较精确,书的字数可能达到百万级别,应该如何实现.
...全文
919 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
时间有点短,不好想
加载更多回复(13)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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