Size: a a a

Scala User Group

2020 December 13

R

RAFIZ in Scala User Group
у иммутабельного хэшсета везде константы
источник

λ

λoλdog in Scala User Group
eC != C
источник

R

RAFIZ in Scala User Group
и. или эта как раз та структура, которая при больше чем 5 элементах (иди другом кол-ве) меняет хэш на дерево?
источник

R

RAFIZ in Scala User Group
λoλdog
eC != C
ну так и в классической хэштаблице не чистая константа))0))
источник

R

RAFIZ in Scala User Group
λoλdog
eC != C
мы этот момент как-бы автоматически опускаем
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
тут коллега выше кинул ссылку на стандартные документ (который я 100 раз видел, но почему-то в этот раз решил написать сюда) и вот что в нём нарисовано
источник

λ

λoλdog in Scala User Group
+
источник

λ

λoλdog in Scala User Group
eС в том случаем это O(log32(n))
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну т.е. это такая дурная практика, т.к. мы ограничены интами, давайте считать всё константой
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а обычный хештейбл со связными списками в бакетах - линейным
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
некоторые вообще говорят, что он O(1), это спорный момент, просто там константный множитель 32 / 5 = log (bitlen(Int)) / log(329
да, всё. понял. спасибо
источник

λ

λoλdog in Scala User Group
Oleg ℕizhnik
а обычный хештейбл со связными списками в бакетах - линейным
до какого-то момента там связный список, а потом дерево
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λoλdog
до какого-то момента там связный список, а потом дерево
не понял, там просто связный список, есть у тебя 2^32 * X элементов, поиск будет C * X сравнений делать, так что класс сложности O(1 + n/ 2^32) = O(n)
источник

λ

λoλdog in Scala User Group
Oleg ℕizhnik
не понял, там просто связный список, есть у тебя 2^32 * X элементов, поиск будет C * X сравнений делать, так что класс сложности O(1 + n/ 2^32) = O(n)
я про j.u.HashMap
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λoλdog
я про j.u.HashMap
так и там то же самое
источник

Oℕ

Oleg ℕizhnik in Scala User Group
или не то же самое?
источник

λ

λoλdog in Scala User Group
в джава хэшмепе есть оптимизация, которая превращает бакет потом в дерево
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λoλdog
в джава хэшмепе есть оптимизация, которая превращает бакет потом в дерево
что за дерево
источник

λ

λoλdog in Scala User Group
/**
    * The bin count threshold for using a tree rather than list for a
    * bin.  Bins are converted to trees when adding an element to a
    * bin with at least this many nodes. The value must be greater
    * than 2 and should be at least 8 to mesh with assumptions in
    * tree removal about conversion back to plain bins upon
    * shrinkage.
    */
   static final int TREEIFY_THRESHOLD = 8;
источник

Oℕ

Oleg ℕizhnik in Scala User Group
λoλdog
/**
    * The bin count threshold for using a tree rather than list for a
    * bin.  Bins are converted to trees when adding an element to a
    * bin with at least this many nodes. The value must be greater
    * than 2 and should be at least 8 to mesh with assumptions in
    * tree removal about conversion back to plain bins upon
    * shrinkage.
    */
   static final int TREEIFY_THRESHOLD = 8;
ну так сравнений всё равно линейное количество
источник