Какая жизненная тема оказалась! :D
|
Цитата:
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;
}
|
Спасибо за ссылку плюсанул
http://jsperf.com/isvalueinarray не знал, что while на 25% медленный и по ходу на больших массивах for впереди |
Poznakomlus,
Я правильно понимаю, что основная идея такой оптимизации лежит в сокращении количества итераций цикла за счет проверки группами? Не уверен что правильно разобрал алгоритм. |
|
Так, что-то сегодня или со мной, или не знаю с чем.
Уже второй раз сначала получаю неправильные результаты замеров производительности. Когда впервые запустил пример кода по вашей ссылке, получилось, что оптимизированный вариант был почти вдвое быстрее. Теперь не пойму, куда я смотрел или что это было. А запись исходной реализации на C после долгого отсутствия практики на нем взрывает мозг. |
| Часовой пояс GMT +3, время: 19:31. |