我发现一个有趣的problem据说在Google面试中被问到,我很好奇它的解决方案。这个问题陈述很长并且有一点点抽象,所以我只在这里包括它的摘录(完整的问题在上面的链接中):打印图像文件的路径
给你一个文件中的目录和文件的列表系统。每个目录和文件都有一个名称,该名称是由字母数字字符组成的非空 字符串。此外,每个文件的名称都包含一个点号字符;名称以点开头的部分 称为扩展名。目录名称不包含任何点。所有的名字都是这种情况 - 敏感。 每个条目在一个单独的行中列出。每个目录后面跟着一个空格 字符的内容列表。根目录的内容不缩进。
文件系统列表的格式似乎是this。本质上,目标似乎是搜索输入文件,并将绝对路径的总长度(以字符为单位)以模1,000,000,007为单位返回到所有直接包含至少一个图像文件的目录。由于文件系统本质上是树,我正在考虑将输入文件读入解析它的函数,并创建类似B-Tree的东西(因为每个目录可以有不同数量的子目录/文件)。然后,您可以对树进行深度遍历来查找带有图像扩展名的文件,然后打印它们的路径。但是,使用B/B +树更适合在数据库中维护排序索引,而在这里,文件不一定需要排序。对帖子的一些评论(来自第一个链接)提供了不会在输入文件中创建树的解决方案,但是由于该问题指出预期O(N)时间和空间复杂性,似乎构建树只会有所帮助。
所以这里的问题是:
如果树是在这种情况下使用,这将是树的最佳类型以及它将如何解决问题帮助?
如果不应该使用树,那么更有效的替代方法是什么?
树会是O(N log N),不是? – jxh
@jxh你的意思是深度优先搜索需要多少时间?那不是O(n)吗? – loremIpsum1771
树插入是O(log N)。你这样做了N次。 – jxh