如何在C++中有效地比较两种模式

How to compare two patterns efficiently in C++

本文关键字:比较 两种 模式 有效地 C++      更新时间:2023-10-16
pattern 1: [(0,1)(2,4)] => [(2,3)(3,4)(4,5)] 
pattern 2: [(0,1)] => [(2,3)(4,5)]

在我的定义中,pattern 2pattern 1的子模式,因为pattern 2(0,1)包含在pattern 1(0,1)(2,4)中,而pattern 2(2,3)(4,5)包含在pattern 1(2,3)(3,4)(4,5)中。

实现这种比较的合适和有效的算法是什么?谢谢:)

概念上:计算模式 1 和模式 2 的最长公共子序列,并检查它是否等于模式 2。

实际上:你想测试模式 2 是否是模式 1 的子字符串。这可以通过对两个字符串的单次扫描更快地完成。

琐碎:pattern2 的每个字符都以 pattern1 的顺序出现。前面的一个微不足道的检查是 length(pattern2) <= length(pattern1),因此这是 O(length(pattern1))。这是最佳的,因为必须考虑所有字符。