有多个由 id 组成的数组,例:
arr = [11, 34, 8, 7, 6, 2]
id 的取值没有限制,也会在 arr 内重复出现。
有一组待匹配的规则,每个规则划分为多个段,每段包含若干 id。
rule1 = [[11, 3, 19], [34, 56], [8], [7, 90, 57], [6, 8], [2]]
rule2 = [[11, 4], [56, 79], [8], [78], [6], [1, 33]]
规则之间,段之间 id 有交叉重叠。
现在要检查 arr 是否匹配某个规则。 如上面的 arr, 只要 arr 里对应位置的 id 在 rule 的段中存在,则该位置匹配。如果 arr 从头到尾匹配,则 arr 匹配该 rule。 上面的 arr 匹配 rule1, 不匹配 rule2。
现有的优化如下:
1、将所有 rule 首段的 id 汇总成表,只有 arr 首个 id 在表内时才尝试匹配。
2、记住每个 rule 的长度,匹配前先比较长度。
3、rule 以首段分组,只要首段不匹配, 那组内其他 rule 不必再尝试。这个思路再延伸,可以把 rule 做成树状结构,但与一般的树查找不同,感觉效率提升有限。
还有其他更好的优化思路吗。。