如何在C++中有效地比较两种模式
How to compare two patterns efficiently in C++
pattern 1: [(0,1)(2,4)] => [(2,3)(3,4)(4,5)]
pattern 2: [(0,1)] => [(2,3)(4,5)]
在我的定义中,pattern 2
是pattern 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))。这是最佳的,因为必须考虑所有字符。
相关文章:
- 在C++中将函数压缩为两种方式
- 如何在C++中比较两个char数组
- 比较两个大小不等的映射c++
- 如何比较两个同名的预处理器宏?
- C++通过数字比较两个数字
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 比较两个字符串后卡在无限循环中
- 如何使映射键具有两种不同的数据类型?
- 比较两个节点坐标的最佳方法是什么?
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 如何构造可以调用和返回两种不同类型的模板
- 比较两种类型的多组以保持平等
- 两种数字比较方法中哪一种更有效
- 如何在C++中有效地比较两种模式
- 请比较两种常见的比较算法及其大O帮助
- 在哪种情况下,我可以在C++中使用==直接比较两个浮点变量
- 比较两种声明数组的方法
- 这两种比较STL向量的方法有什么区别?
- 我可以比较c++中的两种结构吗?