У меня есть массив 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);
}
но я не думаю, что это более эффективно (хотя я могу ошибаться).
У кого-нибудь есть идея? Все предложения приветствуются!
РЕДАКТИРОВАТЬ: я вернусь к профилированию позже... Спасибо за все ваши предложения!
compareequals, потому чтоcompareToиспользуется для обозначения порядка, а не равенства. В сигнатуре метода в качестве аргументов используются логические значения, а не массивы логических значений, я думаю, это была ошибка. Я не знаю, что вы представляете массивами логических значений, но в большинстве случаев это плохо, подумайте об использовании байтов для эффективности использования пространства и, возможно, скорости сравнения. Вы можете представить массив из 10 логических значений с 2 байтами и сравнить их, используя операторы&и~вместо десяти сравнений. - person Gabriel Ščerbák   schedule 08.08.2011