Pull to refresh

Comments 11

Что-то Sparse Set память не сильно экономит.
Например, используя 10-ти битные числа, нужно положить значения 1,10,100,1000
В обычном векторе: 4 числа и 3 указателя.
sdt::bitset: 1024 бита. (32 числа)
Sparse Set: 2049 чисел.

Там вопрос не столько в экономии памяти, сколько в том, что ты операции быстрее. Просто другой подход.

Да, спарссет скорее отъедает память чем экономит. Его плюс в быстрой итерации (в вашем примере у битсета придется обходить все значения, а вектор не обеспечит быстрого поиска и удаления).

Ну и да, в entt к примеру используется модификация sparseset, чтобы не выделять кучу пустых элементов. Бьём массив sparse на блоки скажем по 128 элементов, аллоцируем только блоки в которых есть элементы.

UFO just landed and posted this here

Замечательно! Подписался на ваш канал !

Разряженный список немного напоминает skip list. Там тоже создаются разряженные ссылки через много элементов, но используются они для реализации поиска в остортированном списке за O(log n). Фактически, это альтернатива балансированному бинарному дереву.

и вот там это какой-то смысл имеет. А в описанном списке я смысла не вижу. Сэкономить 33% на указателях (а с интрузивным списком может ещё меньше) ценой усложнения алгоритма и периодической балансировки? Не проще ли взять вместо указателей индексы в массиве длиной в 4/2/1 байт.

Ну я и не говорил, что в нём есть смысл : ) Вот такое придумали. Дальше идеи я бы не двигался, ага.

Для значений, которые в нашем сете не находятся, мы проверим мусорные ячейки (если ранее там ничего не лежало) и вряд ли наше условие пройдёт (там всё-таки мусор).

Чтение неинициализированной переменной это ub. Компилятор рано или поздно заметит что Contains либо возвращает true либо триггерт ub и просто заменит ее тело на return true

На самом деле в плюсах такое использовать можно только на свой страх и риск. И у меня нет понимания, почему всё же на это закрывают глаза.

В условном Golang неинициализированной памяти нет. Там всё ок.

Sign up to leave a comment.

Articles