我正在为文本编辑器编写自动括号完成功能,我目前的方法是在每个换行符上调用一个括号匹配程序(假设它是正确和有效的),其中最后一个键入的符号是开放括号,从新的开始line(在堆栈顶部使用最后一个打开的括号),直到堆栈为空或它到达源的末尾,找不到匹配的闭括号。
但是,对于大型源文件(> 1 MB),此方法似乎很慢,尤其是在源行的前半部分添加换行符时(第一行的换行符=最坏情况=扫描整个文本) 。有些IDE具有此功能并且可以快速处理它,因此它们必须使用不同的方法。所以,我想知道他们使用什么算法或者比我更好的任何其他方法。
答案 0 :(得分:0)
如果匹配括号是一个重要问题,您可以使用辅助数据结构单独使用括号来处理它。
E.g。你可以构建一个树,它存储一个节点内的一对括号的begin_pos / end_pos,以及作为子节点的所有对括号。特别注意不匹配的括号(即它们在父母边界处开始/结束)。
添加额外的打开/关闭支架对于这样的结构非常舒适,因为您可以跳过所有的孩子和兄弟树。
适当的实现应该使用O(log(n))解决方案执行,n是括号对的数量。