我的系统本地驱动器(例如:c,d,e)中有数百万个文件。现在要搜索文件,我们可以使用Windows的内置工具或linux中的“find”命令。 如果我想设计我自己的“查找”程序,它应首先扫描所有目录并将信息存储在某个文件或数据库中。现在,无论何时我想搜索文件,我们首先需要从数据库或文件中加载信息,然后进行搜索。
我需要建议来决定用于存储目录结构的数据结构,然后可以加载和查询给定的文件名。
由于搜索基于文件名,我想到了使用Hashmap,其中key是filename,value是full-path。使用Trie会使搜索速度变慢。另一个想法是使用Inverted索引。但不确定哪一次更好。
感谢。
答案 0 :(得分:0)
哈希表对此非常有用,因为它有查找的O(1)(以及插入和删除)。但问题是你不能使用哈希表来进行“远程搜索”。 “远程搜索”将类似于“查找以扩展名cpp结尾的所有文件”。如果这对您来说不是问题,那么我建议实现哈希表。
答案 1 :(得分:0)
您不能使用基于内存的结构(如普通哈希表)。内存结构适合搜索,但您必须将整个数据集加载到内存中才能搜索一条记录。它非常慢,有时数据集太大而无法存储在内存中。
我建议您尝试一些基于磁盘的结构,如B-Tree或External Memory Hashmap。它们针对磁盘进行了优化,您可以在不加载整个数据集的情况下搜索记录。
如果您不想自己编写基于磁盘的搜索结构,请尝试使用Google的LevelDB。