比较两个布尔数组的最有效方法是什么?

发布于 2024-11-28 12:22:34 字数 1068 浏览 0 评论 0原文

我有一个由 10 个布尔值组成的数组 a(或者相当于数字 <1024 的二进制表示形式)。我想通过以下方式将此数组与一大组相同大小的布尔数组 b[i] 进行比较: 如果数组 a 的元素永远不是 true,函数 compare(a,b[i]) 应返回 true code> 当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);
}

但我不认为这更有效(但我可能是错的)。

有人有想法吗?欢迎所有建议!

编辑:我稍后会进行一些分析...感谢您的所有建议!

I have an array a of 10 booleans (or equivalently the binary representation of a number < 1024). I want to compare this array to a large set of arrays b[i] of booleans of the same size in the following way:
The function compare(a,b[i]) should return true if the elements of the array a are never true when the element of at the same position in b[i] is false.

As an exemple in java

boolean compare(boolean a1, boolean a2){
for (int j = 0; j<10; j++) 
   if (a1[j] && !a2[j]) 
      return false;
return true;
}

Is there a better implementation of this function? If one consider the corresponding binary number to be the coefficients of the prime decomposition of a integer A1 (and A2), an equivalent function would be

boolean compare (int A1, int A2){
if (gcd(A1,A2)==A1) 
   return true;
else
   return false;
}

with for example, (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);
}

but I don't think that this is more efficient (but I may be wrong).

Does anyone has an idea ? All suggestions are welcome!

EDIT: I will go back with some profiling later... Thanks for all your propositions!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

世界等同你 2024-12-05 12:22:35

我不确定 BitSet 更高效,但它应该出现在要分析的简短实现列表中。

I'm not sure BitSet is more efficient, but it should be on the short list of implementations to profile.

表情可笑 2024-12-05 12:22:35

如果您可以使用整数而不是数组,为什么不直接:

return ((a1 & ~a2) == 0)

If you can use integers instead of arrays, why not just:

return ((a1 & ~a2) == 0)
下壹個目標 2024-12-05 12:22:35

如果您可以将这些布尔数组作为整数,则可以使用按位运算:

boolean compare(int a1, int a2) {
  return (a1 | a2) == a2;
}

我认为这应该可行......

If you could have those boolean arrays as integers instead, you could use bitwise operations:

boolean compare(int a1, int a2) {
  return (a1 | a2) == a2;
}

I think that should work...

心的憧憬 2024-12-05 12:22:35

如果您有数据的 int 表示,则可以使用按位运算符:

boolean compare(int a, int b) {
    int c = ~b ^ a;
    return c == 0;
}

如果发生 Øb[i] ^ a[i] ,则 c 将不为零。

If you have int representation of the data, you may use bitwise operators:

boolean compare(int a, int b) {
    int c = ~b ^ a;
    return c == 0;
}

If any ocurrence of ¬b[i] ^ a[i] happens, c will not be zero.

鹿童谣 2024-12-05 12:22:35

我可能听起来有点离题。然而,似乎有一种java内置的方法可以做到这一点。

java.util.Arrays.equals(blnArray1,blnArray2)

参考: http://www.java-examples.com/compare -two-java-boolean-arrays-example

它对我有用。

I might sound kinda off point. However, there seem to be a java inbuilt way of doing this.

java.util.Arrays.equals(blnArray1,blnArray2)

Reference: http://www.java-examples.com/compare-two-java-boolean-arrays-example

It works for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文