- PVSM.RU - https://www.pvsm.ru -

О новых алгоритмах хеш-таблиц

Хотелось бы прокомментировать публикацию Ильи Кабанова в Медузе [1] по поводу новых разработок в алгоритмах хеширования: "Optimal Bounds for Open Addressing Without Reordering [2]" (Farach-Colton, Krapivin, and Kuszmaul, 2025) и последующую "The Bathroom Model: A Realistic Approach to Hash Table Algorithm Optimization [3]" (Wang, 2025). И особенно кликбейтное: "в перспективе метод Крапивина и его коллег может ускорить многие процессы в интернете."

Я около 7 лет очень плотно занимался темой хеш-таблиц и написал много их вариантов: Koloboke [4], SmoothieMap [5], memory-mapped вариации [6].

Я потерял к теме интерес с выходом гугловской SwissTable [7] (2018), и ее фейсбучного варианта F14 [8], которые основаны на SIMD. Они проверяют загруженность ячеек и совпадения "тега" элемента сразу блоками по 8 соседних слотов. Поэтому на любых разумных загрузках таблиц (до 90%) - "цепочка проверки" очень редко превышает 1 (то есть, одну проверку 8-элементного блока).

В этих SIMD-based алгоритмах, ухищрения и теоретические по поводу "алгоритма шагания" просто не играют никакой роли -- алгоритм шагания можно сказать отсутствует, потому что если можно вставить элемент внутри 8-элементного блока, то это и стоит сделать.

Именно эти разработки, а не Кнут и не статья Yao, которую "опровергли" новые работы, стали "практическим концом теории" хеш-таблиц, на мой взгляд.

SwissTable стали стандартным алгоритмом хеш-таблиц в Расте, и, буквально в этом месяце, в Golang 1.24 [9].

В заключение, отвечая Илье Кабанову: к "ускорению интернета" новые теоретические алгоритмы не приведут :)

Автор: leventov

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/simd/412343

Ссылки в тексте:

[1] публикацию Ильи Кабанова в Медузе: https://meduza.io/feature/2025/03/01/molodoy-matematik-iz-ssha-oproverg-teoriyu-kotoraya-schitalas-nezyblemoy-40-let-potomu-chto-on-o-ney-ne-znal

[2] Optimal Bounds for Open Addressing Without Reordering: https://arxiv.org/abs/2501.02305

[3] The Bathroom Model: A Realistic Approach to Hash Table Algorithm Optimization: https://arxiv.org/pdf/2502.10977

[4] Koloboke: https://github.com/leventov/Koloboke

[5] SmoothieMap: https://leventov.medium.com/smoothiemap-2-the-lowest-memory-hash-table-ever-6bebd06780a3

[6] memory-mapped вариации: https://github.com/OpenHFT/Chronicle-Map

[7] SwissTable: https://abseil.io/about/design/swisstables

[8] F14: https://github.com/facebook/folly/blob/main/folly/container/F14.md

[9] Golang 1.24: https://tip.golang.org/doc/go1.24

[10] Источник: https://habr.com/ru/articles/887024/?utm_source=habrahabr&utm_medium=rss&utm_campaign=887024