我想为动态字符串实现一个字符串查找数据结构,它将支持有效的搜索和插入。目前,我正在使用 trie,但如果可能的话,我想减少内存占用。 这篇 Wikipedia 文章描述了一个 DAWG/DAFSA,它通过压缩后缀显然会比 trie 节省大量空间。然而,虽然它会清楚地测试一个字符串是否合法,但我不清楚是否有任何方法可以排除非法字符串。例如,使用单词“cite”和“cat”,其中“t”和“e”是终端状态,DAWG/DAFSA 将如下所示:
c
/ \
a i
\ /
t
|
e
并且“cit”和“cate”将被错误地识别为没有一些元信息的合法字符串。
问题:
1) 是否有一种首选方法可以在 DAWG/DAFSA 中存储有关字符串/路径(例如合法性)的元信息?
2)如果 DAWG/DAFSA 与要求(高效搜索/插入和存储元信息)不兼容,那么最好使用什么数据结构?最小的内存占用会很好,但也许不是绝对必要的。