EfficientHashing
лучший алгоритм хеширования для Vec3i и BlockPos
- Загрузчики
- FabricNeoForgeForge
- Скачиваний на Modrinth
- 299 тыс.
- Подписчиков на Modrinth
- 16
- версии
- 32
- Обновлён
- 8 октября 20268 окт.
- Опубликован
- в 2025
Коротко о моде
Нужен и в игре, и на сервере
EfficientHashing
EfficientHashing заменяет алгоритм хеширования Vec3i (и его подклассов, таких как BlockPos) на гораздо более устойчивый к коллизиям, что даёт прирост производительности практически везде, где используется его хеш-код.
Устойчивость к коллизиям
Это можно доказать простым тестом. Тест выполняется путём хеширования каждой комбинации BlockPos между new BlockPos(-100, -20, -100) и new BlockPos(100, 50, 100) (включительно), при общем количестве объектов, достигающем 2 800 000+.
Ванильный алгоритм выдал всего 194 571 уникальный хеш-код. Это означает, что как минимум 93% всех хеш-кодов BlockPos конфликтуют друг с другом.
А PhiMix, алгоритм, используемый EfficientHashing, выдал 2 868 471 уникальный хеш-код. Это означает, что каждый уникальный объект BlockPos получает свой уникальный хеш-код, и НИ ОДИН из всех хеш-кодов BlockPos не конфликтует.
| Уникальный хеш-код | Коллизии | Частота коллизий | |
|---|---|---|---|
| Vanilla | 194,571 | 2,673,900 | 93.2% |
| EfficientHashing | 2,868,471 | 0 | 0% |
Если вам интересен сам код теста, смотрите: здесь
Производительность
Время бенчмарка:
Benchmark Mode Cnt Score Error Units
VecHashingBenchmark.mixin thrpt 5 47.012 ± 1.029 ops/s
VecHashingBenchmark.vanilla thrpt 5 49.326 ± 1.507 ops/sPhiMix показывает около 95.3% производительности оригинального алгоритма хеширования. Да, он медленнее, но этот разрыв в производительности относительно невелик по сравнению с другими решениями для хеширования, и его легко перекрывает значительное улучшение устойчивости к коллизиям хешей.
Если вам интересен сам код бенчмарка, смотрите: здесь
Совместимость с ваниллой
В ванильном алгоритме хеширования, если вы хешируете "стандартный" экземпляр BlockPos/Vec3i, то есть new BlockPos(0, 0, 0), полученный хеш-код будет равен 0, что совпадает со "стандартным" значением целого числа. Это особое поведение также присутствует в PhiMix, обеспечивая наилучшую возможную совместимость с ваниллой.
Частые вопросы
Как установить EfficientHashing?
Установите Fabric под свою версию Minecraft, скачайте EfficientHashing под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть EfficientHashing?
У EfficientHashing есть сборки для Minecraft 1.18–1.20.1, 1.21–1.21.1, 26.1.2.
Нужен ли EfficientHashing на сервере?
Нужен и в игре, и на сервере