Size: a a a

JavaScript.Ninja

2021 February 04

AK

Artem Kobzar in JavaScript.Ninja
Вообще, по хоорошему
источник

AI

Arthur Irgashev in JavaScript.Ninja
ну конечно
источник

AK

Artem Kobzar in JavaScript.Ninja
В среднем будет O(1 + α), где α  - это мат. ожидание, которое считается в зависимости от n.
источник

t

th.witness in JavaScript.Ninja
Arthur Irgashev
ты об этом ?

const set = new Set();
items.forEach(() => {
 if(item.prop) set.add()
})
Для этого, кстати, существует редьюс.
источник

AI

Arthur Irgashev in JavaScript.Ninja
th.witness
Для этого, кстати, существует редьюс.
так, и ? зачем ?
источник

S

Sergei in JavaScript.Ninja
Тут наверно и правда тонкости совсем. Из серии что бытрее set(Array.from(a[n])) или n раз set.add(1)
источник

AI

Arthur Irgashev in JavaScript.Ninja
Sergei
Тут наверно и правда тонкости совсем. Из серии что бытрее set(Array.from(a[n])) или n раз set.add(1)
дак под капотом в конструкторе set наверняка add вызывается :D
источник

AK

Artem Kobzar in JavaScript.Ninja
Arthur Irgashev
вот здесь даже в худшем случае поиск будет быстрее, чем O(N)
Нет, не будет. В худшем случае будет зависимость от N.
O(N) не значит, что Вы обязательно будете просматривать все элементы в какой-то структуре данных. Это значит, что время работы зависит от количества элементов внутри стркуктуры данных.
Представьте, что мы выбрали замечательную хэш-функцию: x => x % 4, и решили в нашу хэш-таблицу положить числа от 0 до 16, тогда структура хэш-таблицы будет такая:
[
0 : [0, 4, 8, 12],
1 : [1, 5, 9, 13],
2 : [2, 6, 10, 14],
3 : [3, 7, 11, 15],
]

Тогда, распределение у нас будет +- равномерным и мы получим, что поиск будет занимать в среднем O(N/4), а в худшем, если нам поступают только числа кратные 4 - O(N).
источник

S

Sergei in JavaScript.Ninja
Arthur Irgashev
дак под капотом в конструкторе set наверняка add вызывается :D
Ну вдруг там хитрая оптимизация? 8)
источник

t

th.witness in JavaScript.Ninja
Arthur Irgashev
так, и ? зачем ?
Что "зачем"?
источник

AK

Artem Kobzar in JavaScript.Ninja
И это мы говорим только про бакетные хэш-таблицы
источник

AK

Artem Kobzar in JavaScript.Ninja
А есть еще реализация с открытой адресацией
источник

S

Sergei in JavaScript.Ninja
th.witness
Что "зачем"?
Вроде reduce тут не в тему 8)
источник

AK

Artem Kobzar in JavaScript.Ninja
И там тоже куча стратегий адресаций (двойное хэширование, инкриментальная адресация и тд)
источник

AI

Arthur Irgashev in JavaScript.Ninja
Ну вот по ссылке выше двойное хеширование и используется
источник

AI

Arthur Irgashev in JavaScript.Ninja
th.witness
Что "зачем"?
Я к тому, что зачем его туда лепить ?
источник

AI

Arthur Irgashev in JavaScript.Ninja
Sergei
Вроде reduce тут не в тему 8)
Ну можно редьюсом сделать... но зачем ? Кода будет даже больше
источник

AK

Artem Kobzar in JavaScript.Ninja
Arthur Irgashev
Ну вот по ссылке выше двойное хеширование и используется
источник

AI

Arthur Irgashev in JavaScript.Ninja
Так ты почитай дескрипшн )
источник

t

th.witness in JavaScript.Ninja
Sergei
Вроде reduce тут не в тему 8)
const set = items.reduce(
             (set, item) => item.prop ? (set.add(item), set) : set,
             new Set()
           )
источник