Как увеличить скорость сравнения двух массивов? - PullRequest
0 голосов
/ 22 декабря 2011

у меня есть два целочисленных массива, каждый размером 95700. Я хочу сравнить с двумя целочисленными массивами, я получил максимальный размер целого числа, используя Integer.MAX_VALUE (2147483647).

я использовал следующий код,

for(int i=0;i<array1.length;i++) {
    if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
        matched++;              
    } else {
        unMatched++;
    }
}

этот код занимает много времени (50 с). Как уменьшить время сравнения ... пожалуйста, помогите мне

EDIT:
это мой logcat:

12-22 15:20:29.638: INFO/System.out(1660): start time-----18041173568804 
12-22 15:20:29.638: INFO/System.out(1660): time-----40981116222 
12-22 15:20:29.688: INFO/System.out(1660): The array comparison toook an average of 40.981116 second

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Вы должны предоставить более подробную информацию, потому что нет никакого способа, чтобы сравнение массивов занимало 50 секунд или даже 50 миллисекунд, как описано

public static void main(String... args) {
    int[] array1 = new int[95700];
    int[] array2 = new int[95700];
    for (int j = 0; j < array1.length; j += 3) {
        array1[j] = 0xFF0000FF;
        array2[j] = 0xFFFFFFFF;
    }
    long start = System.nanoTime();
    int runs = 10000;
    int matched = 0, unMatched = 0;
    for (int r = 0; r < runs; r++) {
        matched = unMatched = 0;
        for (int i = 0; i < array1.length; i++) {
            if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
                matched++;
            } else {
                unMatched++;
            }
        }
    }
    long time = System.nanoTime() - start;
    System.out.printf("The array comparison to an average of %.6f second, matched=%,d, unmatched=%,d%n",
            time / 1e9 / runs, matched, unMatched);
}

печатает

The array comparison to an average of 0.000109 second, matched=31,900, unmatched=63,800

Этоодна десятая одной миллисекунды.

1 голос
/ 22 декабря 2011

На какой платформе / системе это работает?

Как объявляются переменные?
Integer вместо int вызовет некоторую задержку, но все же недостаточно, чтобы получить 50 секунд.

Я протестировал этот фрагмент кода на своем очень старом ноутбуке (отладчик, режим клиента), и это заняло менее 1 миллисекунды.

Есть одна оптимизация, которую вы можете попробовать, но не ожидайте многого:

for (int i=0; i<array1.length; i++) {
    if (array1[i] == 0xFF0000FF && array2[i] == 0xFFFFFFFF) {
        matched++;
    }
}
unMatched = array1.length - matched;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...