模拟文件系统的最优算法和数据结构

4
我有一个面试问题(简短且易于理解): 我需要构建一个文件系统。 我需要创建一个文件对象,比如说它有一个id。 我需要创建一个目录,它有一个id和一些辅助数据。 我不能使用任何java.util.Collections并且需要自己创建所有数据结构。 问题是找到最优的目录层次结构实现。 我需要实现的函数有:addDirectory(parentDirectoryId)、removeDirectory(DirectoryId)、printAll() - 按逻辑方式打印文件夹和文件的层次结构。
我想到的方法是先有一个根目录Directories,然后在其下方放置文件和子目录。 这个实现的具体方法是,每个目录D都有一个列表记录所有直接子目录,同时每个目录也有一个列表记录其直接或间接的子目录ID集合 - 因此,如果我想要删除一个目录,我会遍历其子Dids列表,并检查它是否存在。如果存在,则会继续往下遍历子目录,直到找到我想要删除的目录为止。 问题在于,使用这种实现方式,我需要递归地更新id列表,这一点非常麻烦。因为每次添加或删除之后,我都需要返回上一级并更新列表。而且,运行时间可能不高效,因为如果我的树非常宽且深,并且我需要删除或添加的目录正好位于整个树的叶子节点,则我需要遍历整棵树才能完成操作。
请帮我找到更好的DirectoryFile系统实现方法。我可以自由选择实现方式,但时间非常紧迫。我提出的树结构只是一个想法,我卡在这上面了。

2
嗯,听起来你现在被分配了这个任务,并且基本上是在作弊。 - Matt Ball
1
你为什么只有很短的时间来完成这个任务? - Amir Afghani
3
“Optimal”——针对什么进行优化?无论如何,有大量关于文件系统和最佳数据结构的研究。我不确定你所说的递归是指什么;除非您要实现符号链接,否则您只需要更新包含该目录的目录。一个目录只能出现在一个位置。 - Dave Newton
2
@mary 你说每个目录都有其直接子目录的列表;如果你删除 c,唯一需要更新的是 c 的父目录。哦,不对,你说它两者都有;算了吧。嗯,好运——还剩1分45秒。 - Dave Newton
我认为他们想要测试我的面向对象思维能力以及设计和实现的能力。你可以将其看作是一项练习,让你设置一个最佳描述操作系统中文件夹之间关系的设计。例如,你可以考虑一棵树或其他结构,比如列表。你需要知道的是,一个文件可以存在于某个文件夹中,而一个文件夹又可以有子文件夹,就是这样。我的问题是,是否有更好的实现方式,而不必涉及后代列表——我认为我需要这些列表,否则…… - mary
显示剩余9条评论
2个回答

0

我不确定这个问题是否有一个快速的答案,但您可以查看此页面上的下载链接,它们为 MOSS 提供了用 Java 编写的文件系统模拟器的源代码。

MOSS 应该有一个很好的方法来处理您所需的任务。既然面试问题只需要您完成 MOSS 的子集,那么您只需阅读实现您所需功能的部分,并从中开发出自己的解决方案。


0

嗯,考虑到 Map 不属于 Collection,这可能是一个好的漏洞开始 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接