Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Rationale

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 14. Boost.Functional/Hash

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Обоснование можно найти в оригинальном дизайне [2].

Quality of the hash function

Многие хэш-функции стремятся иметь небольшую корреляцию между входными и выходными значениями. Они пытаются равномерно распределить выходные значения для очень похожих входов. Эта функция хэша не делает такой попытки. Фактически, для целых чисел результат функции хэша часто является просто входным значением. Таким образом, аналогичные, но разные значения ввода часто приводят к схожим, но различным значениям вывода. Это означает, что это не подходит как общая функция хэша. Например, таблица хэша может отбрасывать биты от функции хэша, что приводит к вероятным столкновениям, или может иметь плохое разрешение столкновения, когда значения хэша сгруппированы вместе. В таких случаях эта хэш-функция будет плохо преобразовываться.

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

Для других случаев использования, если вам нужна более качественная функция хэша, то ни стандартная функция хэша, ни boost::hash не подходят. Есть несколько вариантов. Один из них - использовать второй хэш на выходе этой хэш-функции, такой как хэш-функция Томаша Ван. Это может не работать так хорошо, как хэш-алгоритм, предназначенный для ввода.

Для строк есть несколько быстрых, высококачественных хэш-функций (например MurmurHash3 и Google's CityHash), хотя они, как правило, более специфичны для машины. Они также могут быть подходящими для хэширования бинарного представления ваших данных - при условии, что все равные значения имеют равное представление, что не всегда так (например, для значений плавающей точки).


PrevUpHomeNext

Статья Rationale раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 14. Boost.Functional/Hash может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 14. Boost.Functional/Hash ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:56:24/0.028321027755737/1