使用哪种数据结构



我的系统的本地驱动器(例如:c,d,e)中有数百万个文件。现在,我们可以使用Windows的内置工具或linux中的"find"命令来搜索文件。如果我想设计自己的"查找"程序,应该首先扫描所有目录并将信息存储在一些文件或数据库中。现在,每当我想搜索一个文件时,我们首先需要从数据库或文件中加载信息,然后搜索。

我需要建议来决定使用哪种数据结构来存储目录结构,然后可以为给定的文件名加载和查询目录结构。

由于搜索是基于文件名的,我想到使用Hashmap,其中键将是文件名,值将是全路径。使用Trie会使搜索变慢。另一种方法是使用倒排索引。但不确定哪一次更好。

谢谢。

哈希表将非常适合于此,因为它有0(1)查找(以及插入和删除)。但问题是,你不能使用哈希表来进行"范围搜索"。"范围搜索"类似于"查找所有以扩展名cpp结尾的文件"。如果这对你来说不是问题,那么我建议实现哈希表。

不能使用基于内存的结构(如普通散列表)。内存结构适合搜索,但是为了搜索一条记录,您必须将整个数据集加载到内存中。它非常慢,有时数据集太大,内存无法容纳。

我建议你尝试一些基于磁盘的结构,如B-Tree或外部内存哈希图。它们针对磁盘进行了优化,您可以在不加载整个数据集的情况下搜索记录。

如果你不想自己写一个基于磁盘的搜索结构,试试Google的LevelDB。

最新更新