我能想到的一个优化是记住第一组和其余组之间的交集大小,然后使用数据来削减一些案例。
如何使用它:
如果你有长度为A, B,的集合Cn
intersection(A,B) = p
intersection(A,C) = q
Run Code Online (Sandbox Code Playgroud)
然后
intersection(B,C) <= n - abs(p - q)
Run Code Online (Sandbox Code Playgroud)
对于您的情况的集合:
S0 = { 1 2 3 }
S1 = { 4 2 3 }
S2 = { 5 6 7 }
Run Code Online (Sandbox Code Playgroud)
你计算intersection(S0,S1) = 2并记住结果:
[ i(0,1)=2 ]
Run Code Online (Sandbox Code Playgroud)
那么intersection(S0,S2) = 0,所以
[ i(0,1)=2; i(0,2)=0 ]
Run Code Online (Sandbox Code Playgroud)
当您intersection(S1,S2)在比较第一个元素后进行计算时
(S1[0]=4 != S2[0]=5)
Run Code Online (Sandbox Code Playgroud)
你可以说intersection(S1,S2) <= 2这是迄今为止最好的结果。
可以进一步改进的是记住更准确的交叉点结果,但仍然不计算所有结果。
我不确定这是否是最好的选择。也许存在完全不同的方法。