讨论一个算法问题的优化
给定两个有序正整数数组a,b,长度都为n(n大概在20k~200k左右)。要找i,j,k使得a[i]+a[j]=b[k]。只求速度最快。优化复杂度最好,优化常数也行。
我现在是O(n^2)的。
for(i=0,k0=0;i<n;i++)
{
while(b[k0] < a[i]) k0++;
for(j=i,k=k0;j<n;j++)
{
while(b[k] < a[i] + a[j]) k++;
if(b[k] == a[i] + a[j]) return result;
}
}
实际数据的话a,b都是__uint128_t。最后是要在3930上跑,可以12线程。但是n>64k的时候会爆L3(32*200k=6.4M>2M)。所以如果能优化成方便多线程并且cache friendly的话最好。