使用每个字符搜索字符串表

时间:2012-11-03 14:27:53

标签: string macos sqlite data-structures

我遇到了字符串问题。我有很多(比如说更多)带有字符串的二维数组。我需要在它们中搜索匹配字符串的出现(通过搜索栏输入)。如果出现任何情况,则必须在表视图中显示包含匹配字符串的行。对于搜索栏中输入的每个字符,必须优化结果并在表格视图中显示。

必须保存所有字符串数据,并且必须打开以供以后使用。有什么人可以建议以下事项吗?

  1. 保存数据库中所有二维字符串数组是否正常。(SQLite)?或xml文件中的每个数组?或任何其他更好的主意?

  2. 如何有效地搜索所有字符串?我正在考虑创建一个trie数据结构以便更好地搜索。

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

鉴于您有多达20,000,000个字符串,我不建议使用XML作为您的文件格式。它会在磁盘空间和解析时间上增加很多开销。一个数据库听起来像是一个更好的方式去找我。如果字符串都是最大长度,那么仅仅是字符串的5GB数据,所以你甚至可能希望以某种方式压缩它们,具体取决于最终用户的机器。

对于搜索它们而言,trie听起来也是一个很好的数据结构选择。虽然,它会很大。它可能不需要是内存中的整个5GB,但是有了实现它所需的各种指针和内容,它可能仍然会非常大。多大可能取决于字符串前缀之间的重叠量。如果数据证明太大,您可以使用compact prefix tree

另一种选择是对它们进行排序,并在用户输入时进行二进制搜索。但是,对它们进行动态排序可能效率不高,因此您可能希望保存字符串的预先排序索引。 (不确定您是否可以这样做,或者在运行应用程序时数据是否发生变化。)