【发布时间】:2010-09-08 08:46:25
【问题描述】:
我有一个想要索引的文件(具体是fasta文件),这样我可以快速找到文件中的任何子字符串,然后在原始fasta文件中找到位置。
这在许多情况下很容易做到,使用 Trie 或子字符串数组,不幸的是我需要索引的字符串是 800+ MB,这意味着在内存中执行它们是不可接受的,所以我正在寻找一种合理的方法以最少的内存使用在磁盘上创建此索引。
(编辑澄清)
我只对蛋白质的标题感兴趣,所以对于我感兴趣的最大数据库来说,这大约是 800 MB 的文本。
我希望能够根据输入字符串在 O(N) 时间内找到准确的子字符串。这必须可以在 32 位机器上使用,因为它将被随机发送给不会拥有 64 位机器的人。
我希望能够针对一行中的任何断字进行索引,直到行尾(尽管行可能有几 MB 长)。
希望这可以阐明需要什么以及为什么给出的当前解决方案没有启发性。
我还应该补充一点,这需要在 java 中完成,并且必须在各种操作系统的客户端计算机上完成,所以我不能使用任何特定于操作系统的解决方案,它必须是程序化解决方案。
【问题讨论】:
-
您可能需要详细说明一下。什么是快?您要查找的子字符串(大小)是否有任何限制?文件是否包含需要单独搜索的一个大字符串或几个较小的字符串?磁盘大小? “最少”内存使用?
-
操作系统?您需要在搜索字符串中进行正则表达式还是要查找整个字符串匹配项?
标签: indexing substring on-disk