有多个由 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 做成树状结构,但与一般的树查找不同,感觉效率提升有限。
还有其他更好的优化思路吗。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.