Раздельный перебор массива
Недавно столкнулся с задачей выборки одинаковых значений из массива с большим количеством элементов (больше тысячи). Задача была перебрать массив (например, ["green", "yellow", "blue", "green", "purple", "green"]) с помощью map и достать из него все green. Но через map довольно медленно. Есть какие-то более быстрые способы? Я слышал про какой-то метод располовинивания массива с большим количеством элементов, но гугл про это ничего толком не выдал :thanks:
|
Цитата:
Цитата:
Цитата:
|
Есть какая-нибудь ссылка на статью про метод деления пополам?
|
Бенчмарк производительности методов перебора: https://jsben.ch/6S3sP (у меня всегда разный результат).
Цитата:
|
Цитата:
Найти бинарным поиском первое попавшееся значение, потом от него пробежаться вправо и влево, пособирать все такие же. Если данная операция будет выполняться многократно, то имеет смысл на старте создать карту (значение -> массив) для всех значений. |
Цитата:
Цитата:
|
Цитата:
Я возможно неправильно выразился. Применить то его можно, вот только смысл в этом какой? У автора, насколько я понял, стоит задача максимально быстро найти в массиве все значения равные определенной строке. Разве бинарный поиск тут не будет медленнее, чем обычный перебор? |
Цитата:
Автор не уточнил эти моменты, к сожалению. |
Цитата:
log2 (N) сравнений. На 1000 элементов 10 сравнений. А если неотсортирован, то ничего, кроме перебора не поможет. Цитата:
|
Цитата:
Цитата:
К тому же имеет, скорее всего, до двух тысяч элементов. |
Часовой пояс GMT +3, время: 20:02. |