【问题标题】:Space efficient way to search for substrings搜索子字符串的节省空间的方法
【发布时间】:2014-03-07 02:04:42
【问题描述】:

我有一组可变长度字符串,我想验证该组中至少一个字符串中是否存在可变长度前缀字符串。并且可以在连续搜索之间添加删除字符串。

困难在于我不想存储集合的字符串,而是存储集合的空间有效表示。

例如,假设我有以下一组字符串:

S = {"abcd","aaaaaaaaa","dcba"}

搜索a 应返回True,但搜索b 应返回False。我想搜索集合而不将字符串存储在内存中。

在不存储字符串的情况下,一种可能的解决方案是使用有限状态自动机 (fsa) 来表示构成集合中每个字符串的字符序列。换句话说,我将构建匹配集合中所有字符串的正则表达式。但是,我不确定它是否比存储字符串更节省空间(内存)。我还想在集合中添加和删除字符串,重新计算 fsa 可能在计算时间方面成本太高。

我正在考虑使用分类算法,例如 K-means 或 SVM,但想知道是否有任何节省空间的算法来解决这个问题。

【问题讨论】:

  • 你想要一个“trie”:en.wikipedia.org/wiki/Trie
  • 我无法存储字符串,所以我无法遍历集合。
  • 这个问题是关于如何在内存中压缩一个字符串,还是关于如何存储一组字符串[representation]以便高效搜索?
  • 感谢“trie”推荐,我不知道。
  • 你必须有你的字符串 somewhere :这些字符串的来源是什么,你可能想要搜索的最长前缀是什么?这个“集合”是什么,你不能迭代(但你想以某种方式迭代它)。也许更详细一点可能会使解决方案更明显。

标签: regex string algorithm


【解决方案1】:

用户 ruakh 在 cmets 中发起的对话表明,最好的答案是使用 trie,一种特定的树数据结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2020-10-15
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2016-08-02
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多