“明显”的解决方案是建立一个索引。但是,如果您在内存中的二进制搜索不起作用,我不太确定索引是否能解决问题。它将占用大约相同数量的内存。
如果您可以搜索可能的匹配项,一次从外部内存中获取少量,然后快速进行比较,那不是很好吗?
这可以通过数据库实现。这个想法是创建一个“哈希”函数。具有相同哈希值的所有内容都将存储在单词表中。然后将其提取到内存中进行搜索。
一旦获得具有相同哈希的单词集,您就可以自己进行搜索,或者这可能有效:
select word
from (select word
from words
where hash(word) = hash(YOURWORD)
) t
where t.word = YOURWORD
关键是先“欺骗” SQL 编译器使用哈希索引,然后再进行比较。
一个非常简单的散列函数可能是前五个字母。因此,像“间谍”这样的词只有一个条目。但是,像“multi”这样的词会有很多。您的单词表将有两列,“word”和“hash”。然后,您将在 hash 上有一个索引。. . 为了获得最佳性能,请按哈希对单词表进行排序。对单词列表进行排序后,所有匹配的单词很有可能会在一页或两页上,从而最大限度地减少外部 I/O。
不幸的是,SQLite 没有任何内置的散列函数。您可以通过将字符串中的字符值成对相加来自己构建一个。