我有一条线和一套规则(其他线)。匹配的行(line = rule)可能很长;规则集可能很大,每个规则可能很长。较短的规则可能是较长的一部分(需要选择更长的时间)
目前,我有大约70条规则,长度<30个字符,组织在一个长if-else-if链中
有没有办法预测性能会有什么降低?
是否有更快的方法将比较线与每个规则进行匹配?
编辑:没有文字文件。我有一个编码的字符序列,我通过if-elses比较“规则”,然后采取相应的行动。
答案 0 :(得分:1)
如果您只想检查输入行是否等于任何行规则,那么使用std::set
(或std::map
,如果您希望每个规则有不同的行为)来存储它们。这将匹配复杂度降低到O(lg N ),其中 N 是规则数。
更好的是,使用unordered_set
(C ++ 11)来表现O(1)。
如果行为不依赖于匹配的规则,那么您也可以使用RE2之类的工具从规则(例如(niVVVd__xniVVd__)|(niVVVdxniVVd)
)编译正则表达式,以获得最坏情况的O(< em> n )行为,其中 n 是输入字符串的长度。
由于您正在比较相等性,因此您无需先匹配最长的规则。