下面的数组经过排序,没有小尺寸(小于 5000)的重复项(包含唯一的正整数),交集(见下文)被称为十亿次,因此任何微优化都很重要。这篇文章很好地描述了如何用语言加速下面的代码C
。
int i = 0, j = 0, c = 0, la = a.length, lb = b.length;
intersection = new int[Math.min(la, lb)];
while (i < la && j < lb) {
if (a[i] < b[j]) i++;
else if (a[i] > b[j]) j++;
else {
intersection[c] = a[i];
i++; j++; c++;
}
}
int[] intersectionZip = new int[c];
System.arraycopy(intersection, 0, intersectionZip, 0, c);
在 Java 中,我想调用那些低级指令是不可能的。但他们提到“可以使用无分支实现来改进这种方法”。一个人会怎么做?使用switch
? 或者可以替换a[i] < b[j]
,a[i] > b[j]
或者a[i] == b[i]
与整数操作数上的二进制操作进行比较?
二进制搜索方法(具有复杂性O(la log(lb))
)不是这种情况,因为la
不是。有趣的是如何更改语句。<<
lb
if