模式匹配算法

时间:2010-02-09 13:58:40

标签: c++ c algorithm data-structures

背景

我正在设计一个将文本从一种语言转换为另一种语言的应用程序。例如,输入文本hello将转换为指定的语言文本。这是通过为每种语言提供查找表来完成的。转换算法包括以下步骤。

  1. 寻找完全匹配。整个单词hello将成为模式。如果找到任何匹配项,请停止处理并返回匹配项。
  2. 否则从左右开始并查找每个字符,直到完成所有组合。例如:迭代1:模式= h,第二 - he,第三 - hel等等。匹配的令牌将保存在临时缓冲区中,并在没有更多匹配时返回。这类似于最大蒙克规则
  3. 如果找到匹配项,匹配的文本将从原始文本中删除,并继续使用剩余文本进行处理。
  4. 此算法必须多次迭代输入文本,并导致二次复杂度。我试图通过在树结构中安排查找表来优化它(非常类似于后缀树)。如果有hhello的查找文字,则会将其组织为

    root
    --h
    ----hel
    --lo
    

    这有助于我避免不必要的查找。匹配h后,只有h节点有子节点时才需要转到下一个字符。这大大减少了迭代次数。

    问题

    1. 这种数据结构的名称是什么?是否有适用于C或C ++的现成实现?
    2. 您认为上述算法或数据结构有任何可能的改进吗?
    3. 有什么想法......?

2 个答案:

答案 0 :(得分:2)

三元搜索树可能就是你所说的。它类似于特里,但从我理解的空间效率更高。

答案 1 :(得分:1)

查看'Trie'数据结构。

为什么不使用Lucene以非常快的方式索引文本,甚至更多 - 索引包括算法

  • steming
  • 保险丝匹配

等等。