我有一個陣列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個比較。 –