【问题标题】:Search the table of strings with each character搜索每个字符的字符串表
【发布时间】:2012-11-03 14:27:53
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 我不确定我是否理解问题 1。是的,这两个都是合理的选择。或者您也可以将它们保存到平面文件中。没有更多信息,很难告诉您保存它们的正确方法是什么。
  • 感谢您的回复。我忘了提一下,每个 2*2 维数组中的字符串数据非常庞大,看起来就像一个有很多行和列的表。请让我知道在这种情况下您还需要哪些其他信息。
  • 这个怎么样 - 你的数据中的平均字符串有多大?平均二维数组有多大?你有多少个二维数组? (我猜最后一个是“超过 100”,但它是否小于 1000?)我只是想了解您的数据的数量级,但我认为我根据您的情况做出了一些不正确的假设'到目前为止已经写了。
  • 字符串的最大长度可以是 256 个字符。两个暗淡数组的最大大小可达 20000 * 5,这意味着 20,000 行和 5 列。并且数组的数量可以达到200个。

标签: string macos sqlite data-structures


【解决方案1】:

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

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

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

【讨论】:

  • 我会使用 SQLite 数据库将字符串数据保存在磁盘上。并使用 trie 或紧凑前缀树来执行搜索。如果我在 mac osx 应用程序中实现它,您如何看待性能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 2018-04-12
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多