【发布时间】:2010-02-09 13:58:40
【问题描述】:
背景
我正在设计一个将文本从一种语言转换为另一种语言的应用程序。例如,输入文本hello 将被转换为指定语言文本。这是通过对每种语言都有一个查找表来完成的。转换算法有以下步骤。
- 寻找完全匹配。整个单词
hello将成为模式。如果找到任何匹配项,则停止处理并返回匹配项。 - 否则从左右开始并查找每个字符,直到完成所有组合。例如:迭代 1:模式 =
h,第二个 -he,第三个 -hel等等。匹配的令牌将保存在临时缓冲区中,并在没有更多匹配项时返回。这类似于最大咀嚼规则。 - 如果找到匹配,匹配的文本将从原始文本中删除并继续处理剩余的文本。
此算法必须多次迭代输入文本并导致二次复杂度。我试图通过在树结构中安排查找表来优化这一点(非常类似于后缀树)。如果有h、hel、lo 的查找文本,则会像这样组织
root
--h
----hel
--lo
这将帮助我避免不必要的查找。匹配h 后,只有当h 节点有孩子时,我才需要转到下一个字符。这大大减少了迭代次数。
问题
- 这种数据结构叫什么名字?是否有适用于 C 或 C++ 的现成实现?
- 您认为上述算法或数据结构有什么可能的改进吗?
有什么想法吗...?
【问题讨论】:
-
让我想起了尝试en.wikipedia.org/wiki/Trie
标签: c++ c algorithm data-structures