【发布时间】:2015-12-08 17:08:09
【问题描述】:
我有一个 3GB 大小的文本文件(一个包含 DNA 序列的 FASTA 文件)。它包含大约 5000 万行不同的 长度,尽管大多数行是 70 个字符宽。我想从这个文件中提取一个字符串,给定两个字符索引。困难的 部分是,换行符不应被视为字符。
为了获得良好的速度,我想使用seek() 到达字符串的开头并开始读取,但我需要以字节为单位的偏移量。
我目前的方法是编写一个新文件,删除所有换行符,但这需要另外 3GB 磁盘空间。我想找到一个需要更少磁盘空间的解决方案。
使用字典将每个字符计数映射到文件偏移量也不可行,因为每个字节都有一个键,因此至少使用 16 字节*30 亿个字符 = 48GB。
我想我需要一个数据结构,它允许检索某个索引字符之前的换行符的数量,然后我可以将它们的数量和字符索引相加以获得以字节为单位的文件偏移量。
【问题讨论】:
-
“给定两个字符索引”是什么意思。你的意思是你想从
begin..end获取子序列? -
你不能只存储每行的长度,然后使用该信息来计算字节偏移量吗?
-
@dkatzel 正是这样。
-
@heathobrien 是的,这是一种方式。我的问题集中在如何最有效地做到这一点。例如,对于每个字符索引,我可以遍历所有存储的字符索引,直到第一个大于我正在寻找的那个。我的问题可能针对一些数据结构,这是存储这些信息的好方法,并且可能比简单的字典更有效
标签: text indexing data-structures bioinformatics