Реализация хеш-таблицы на C++ с собственными алгоритмами хеширования.
Мне долгое время не давала покоя старая лабораторная работа из универских годов с хэш таблицей и мне кажется, что в прошлой ее реализции 6 лет назад https://github.com/ignavan39/hashtable
проект был написан без особого энтузиазма и полного понимания стандартных алгоритмов хеширования.
Я постарался сделать это проект более удобным и понятным, чтобы не забыть о стандартных алгоритмах хеширования и понять, как они работают. еще хочется больше практики в c++
В проекте реализованы 3 алгоритма:
-
DJB2 (Daniel J. Bernstein)
- Формула:
hash = hash * 33 + char - Быстрый, хорошее распределение для строк
- Формула:
-
FNV-1a (Fowler-Noll-Vo)
- Формула:
hash = (hash ^ byte) * prime - Отличное распределение, используется во многих системах
- Формула:
-
Simple Multiplicative
- Формула:
hash = key * constant - Учебный алгоритм, демонстрирует основы
- Формула:
# Release сборка (оптимизированная)
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
# Debug сборка (с отладочной информацией)
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build buildзапуск src чтобы поиграться и проверить работоспособность
./build/hash_table_demo // С хеш-функцией по умолчанию (DJB2)
HashTable<std::string, int> table1;
// С конкретной хеш-функцией
HashTable<std::string, int, FNV1aHash> table2;