我有一个阵列a
10布尔(或相当于数字< 1024的二进制表示)。我想将这个数组与以下方式的大小相同的布尔值数组b[i]
进行比较: 函数compare(a,b[i])
应该返回true
如果数组a
的元素从不为true
当元素位于相同位置时b[i]
是false
。什么是比较两个布尔数组最有效的方法?
类似于Java
boolean compare(boolean a1, boolean a2){
for (int j = 0; j<10; j++)
if (a1[j] && !a2[j])
return false;
return true;
}
个例有没有更好的实现这个功能呢?如果一个考虑相应的二进制数是一个整数A1(和A2)的素数分解的系数,等同功能将是
boolean compare (int A1, int A2){
if (gcd(A1,A2)==A1)
return true;
else
return false;
}
与例如(http://www.java-tips.org/java-se-tips/java.lang/finding-greatest-common-divisor-recursively.html)
int gcd(int a, int b) {
if (b==0)
return a;
else
return gcd(b, a % b);
}
但我认为这不是更有效率(但我可能是错的)。
有没有人有想法?欢迎所有建议!
编辑:我会回来一些分析以后...感谢您的所有建议!
只有一种方法可以知道 - 描述它们! – Jeremy
在你做这件事之前,请分析整个应用程序,以确定是否真的值得花费精力优化此计算。 –
在Java中调用compare方法equals是常规的,因为compareTo用于排序而不是相等的概念。该方法的签名有布尔值,而不是布尔数组作为参数,我想这是一个错误。我不知道你用布尔阵列表示什么,但大多数情况下这些都不好,考虑使用字节来提高空间效率和可能的比较速度。你可以用2个字节表示10个布尔值的数组,并用'&'和'〜'运算符来比较它们,而不是10个比较。 –