簡體   English   中英

模式匹配算法

[英]Algorithm for pattern matching

背景

我正在設計一個應用程序,它將文本從一種語言轉換為另一種語言。 例如,輸入文本hello將轉換為指定的語言文本。 通過為每種語言提供查找表來完成此操作。 轉換算法具有以下步驟。

  1. 尋找完全匹配。 整個單詞“ hello將是模式。 如果找到任何匹配項,請停止處理並返回匹配項。
  2. 否則,從左至右開始查找每個字符,直到完成所有組合。 例如:Iteration1:pattern = h ,2nd- he ,3rd- hel等。 匹配的令牌將保留在臨時緩沖區中,並在沒有更多匹配項時返回。 這就像最大的munch規則
  3. 如果找到匹配項,則匹配的文本將從原始文本中刪除,並繼續處理其余文本。

該算法將必須遍歷輸入文本多次,並導致二次復雜度。 我正在嘗試通過將查詢表安排在樹形結構(非常類似於后綴樹)中來對此進行優化。 如果存在用於hhello查找文本,則其組織方式如下

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

這將幫助我避免不必要的查找。 匹配h ,僅當h節點有孩子h ,才需要轉到下一個字符。 這樣可以大大減少迭代次數。

問題

  1. 這種數據結構的名稱是什么? 是否有適用於C或C ++的現成實現?
  2. 您認為上述算法或數據結構有任何可能的改進嗎?

有什么想法嗎...?

您正在談論的是三元搜索樹。 它類似於一個特里,但據我所知,其空間利用率更高。

查看“ Trie”數據結構。

為什么不使用Lucene快速索引文本,甚至更多-索引包含用於

  • 詞干
  • 保險絲匹配

等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM