私は10ブール値のa
の配列を持っています(またはそれに相当する数値は< 1024です)。この配列を、次のように同じサイズのブール値の配列b[i]
と比較したいと思います。 配列a
の要素が決してtrue
の要素である場合、関数compare(a,b[i])
はtrue
を返します。 b[i]
はfalse
です。 Javaのブール値の2つの配列を比較する最も効率的な方法は何ですか?
boolean compare(boolean a1, boolean a2){
for (int j = 0; j<10; j++)
if (a1[j] && !a2[j])
return false;
return true;
}
でexempleよう
は、この機能の優れた実装がありますか?一つは整数A1(及びA2)の素数分解の係数であることに対応する2進数を考慮した場合、同等の機能は、例えば持つ
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);
}
私はこれがより効率的だとは思わない(しかし、私は間違っているかもしれない)。
アイデアはありますか?すべての提案は大歓迎です!
編集:私は後でいくつかのプロファイリングに戻ります...あなたのすべての提案をありがとう!
これを知る方法は1つだけです。 – Jeremy
これを実行する前に、アプリケーション全体をプロファイルして、この計算を最適化するための努力を実際に費やす価値があるかどうかを判断します。 –
Javaでは、compareToメソッドがequalityよりもむしろ順序付けの概念に使用されるため、compareメソッドをequalsと呼びます。メソッドのシグネチャにはブール値の配列ではなくブール値がありますが、これは間違いでした。私はブール値の配列で何を表現しているのか分かりませんが、そのほとんどは悪いです。空間効率とおそらく比較速度のためにバイトを使うことを検討してください。 2バイトの10個のブール値の配列を表現し、10個の比較の代わりに '&'と '〜'演算子を使って比較することができます。 –