【问题标题】:String matching algorithm design字符串匹配算法设计
【发布时间】:2016-07-19 07:35:17
【问题描述】:

给定一个文本 t[1...n] 和 k 个模式 p1,p2,...pk,每个长度为 m,n=2m,来自字母表 [0, Sigma-1]。设计一个有效的算法来查找 t 中任何模式 pj 匹配的所有位置 i。

所以我有一个字符串 t = "1 2 3 4 5 2 2 9" 和模式 p = "4 5 2 2"。我知道会有 m+1 个位置我可以找到一个模式(从“1 2 3 4”、“2 3 4 5”等......)。

然后我们在模式中有 k 个字符,所以 bigO 为 O(k(m+1))。

我的算法是搜索字符串,检查每个字符与模式中的字符。这将为 m+1 个位置运行 k 次迭代。

希望我解释正确。我只想知道我是否做得对,以及我的逻辑是否有任何缺陷。谢谢!

【问题讨论】:

标签: string algorithm pattern-matching


【解决方案1】:

我的算法是搜索字符串,检查每个 字符与模式中的字符。那会让我跑 m+1 个位置的迭代次数。

这意味着对于每个模式,你可以做到 O(m+1),对吧?

虽然有一些算法可以实现这种性能,但你的蛮力算法却不是。你有 m+1 个位置,每个位置都需要检查 m 个字符,所以每个模式的总复杂度是 O(m(m+1))。

【讨论】:

  • 我对你的问题的意思有点迷茫。我不是试图实现 O(m+1),而是 O(k(m+1)) 或 O(m(m+1))(基本上相同)。你是说我的蛮力方式不会是 O(k(m+1))?
  • @m.o 我的意思是每个模式都是 O(m(m+1)),你有 k 个模式,总数是 O(k(m(m+1)))。所以 O(k(m+1)) 是无法通过蛮力实现的。
  • 哦,我明白了。你能帮我理解我将如何实现 O(k(m+1)) 吗?我不知道我还能怎么做。
  • @m.o 我建议你从 KMP 算法开始,对于每个长度为 m 的模式和长度为 n 的文本,最差的匹配复杂度是 O(n)。 en.wikipedia.org/wiki/…
  • @m.o 而且没有一个高效的字符串匹配算法可以用几句话来描述。所以花点时间阅读一下。 en.wikipedia.org/wiki/String_searching_algorithm
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 2013-12-24
  • 2021-11-06
  • 2012-07-24
  • 2010-09-08
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多