Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перебор массива - вложенный цикл (https://javascript.ru/forum/misc/43832-perebor-massiva-vlozhennyjj-cikl.html)

ksa 25.12.2013 16:17

Какая жизненная тема оказалась! :D

Vlasenko Fedor 26.12.2013 21:39

Цитата:

Сообщение от okouser
3) когда достаточно найти лишь вхождение одного элемента из подмассива.

Новый Вариант №3. Хорошая тема,:)
var a1 = [2, 5, 2, 4, 5, 11, 5, 9, 9];
var a2 = [2, 7, 8, 6, 1, 1];
var a3 = [3, 1];
var a4 = [5];

alert(isValueInArray(a1, a2));
alert(isValueInArray(a1, a3));
alert(isValueInArray(a1, a4));

function isValueInArray(a1, a2) {

    var i = 0,
        j = 0,
        sl, el,
        l1 = a1.length,
        l2 = a2.length,
        len = l1 % 8,
        slen = Math.floor(l1 / 8);

    for (; i < l2; j = 0) {
        
        el = a2[i++];
      
        for (; 0 < len; len--) {
            if (el == a1[j++]) return true;
        }

        for (sl = slen; 0 < sl; sl--) {
            if (
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++] ||
                el == a1[j++])
                return true;
        }

    }
    return false;
}

Vlasenko Fedor 27.12.2013 03:53

Спасибо за ссылку плюсанул
http://jsperf.com/isvalueinarray
не знал, что while на 25% медленный
и по ходу на больших массивах for впереди

Antonius 27.12.2013 04:39

Poznakomlus,
Я правильно понимаю, что основная идея такой оптимизации лежит в сокращении количества итераций цикла за счет проверки группами?

Не уверен что правильно разобрал алгоритм.

Vlasenko Fedor 27.12.2013 04:51

Устройство Даффа,
но увы, это не приносит эффекта а еще и усугубляет
цикл фор рулит

Antonius 27.12.2013 05:06

Так, что-то сегодня или со мной, или не знаю с чем.

Уже второй раз сначала получаю неправильные результаты замеров производительности. Когда впервые запустил пример кода по вашей ссылке, получилось, что оптимизированный вариант был почти вдвое быстрее. Теперь не пойму, куда я смотрел или что это было.

А запись исходной реализации на C после долгого отсутствия практики на нем взрывает мозг.


Часовой пояс GMT +3, время: 21:12.