【发布时间】: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 :这些字符串的来源是什么,你可能想要搜索的最长前缀是什么?这个“集合”是什么,你不能迭代(但你想以某种方式迭代它)。也许更详细一点可能会使解决方案更明显。