我需要构建一个文本编辑器作为我的迷你项目,我需要设计一个支持以下操作的数据结构或算法:
每次操作在O(log n)时间或更短时间内。搜索和替换操作将是可观的,但不是必需的。字符串的最大长度是常量。任何想法如何实现这一目标?
谢谢!
答案 0 :(得分:2)
这种应用程序的通用数据结构是Rope,其中Append和Prepend是O(1),尽管这取决于树是否平衡。但是,如Толя所述,搜索将是线性的。
肯定有数据结构可以使搜索更快,例如Suffix Tree,但它们可能不适合文本编辑器应用程序。
答案 1 :(得分:0)
我建议你改编Trie。在追加操作中,添加以新字符结尾的字符串的所有后缀,其长度最多为数据结构中字符串的最大长度。在prepend中添加从新char开始的字符串的所有前缀,其长度最多为字符串的固定长度。渐近两个操作都是常量 - 它们取O(k^2)
,其中k是字符串的固定长度。对于结构中的每个节点,跟踪在该节点处结束的所有字符串(可能是列表)。
搜索操作将再次保持不变:迭代字符串并输出存储在结束节点中的所有索引(如果您还没有“退出树”)。
我的方法的一个缺点是内存开销(大多数时候是单词的最大长度),但是如果允许的最大字符串长度是合理的并且你只插入真正的单词(例如来自英语字典),这不应该是一个大问题。