В таблице ниже обобщены характеристики различных хеш-функций, описанных выше, для трех наборов данных:
1) Все слова и фразы с записями во 2-м международном словаре Merriam-Webster без ограничений (311 141 строка, средняя длина 10 символов).
2) Все строки в / bin / , / usr / bin / , / usr / lib / , / usr / ucb /
и / usr / openwin / bin / * (66 304 строки, средняя длина 21 символ).
3) Список URL-адресов, собранных веб-сканером, который работал несколько часов вчера вечером (28 372 строки, средняя длина 49 символов).
Показатель производительности, показанный в таблице, представляет собой «средний размер цепи» по всем элементам в хэш-таблице (т. Е. Ожидаемое значение числа ключей сравнивается для поиска элемента).
Webster's Code Strings URLs
--------- ------------ ----
Current Java Fn. 1.2509 1.2738 13.2560
P(37) [Java] 1.2508 1.2481 1.2454
P(65599) [Aho et al] 1.2490 1.2510 1.2450
P(31) [K+R] 1.2500 1.2488 1.2425
P(33) [Torek] 1.2500 1.2500 1.2453
Vo's Fn 1.2487 1.2471 1.2462
WAIS Fn 1.2497 1.2519 1.2452
Weinberger's Fn(MatPak) 6.5169 7.2142 30.6864
Weinberger's Fn(24) 1.3222 1.2791 1.9732
Weinberger's Fn(28) 1.2530 1.2506 1.2439
Глядя на эту таблицу, становится ясно, что все функции, за исключением текущей функции Java и двух сломанных версий функции Вайнбергера, предлагают отличную, почти неразличимую производительность. Я твердо предполагаю, что эта производительность по сути является «теоретическим идеалом», который вы бы получили, если бы вместо хеш-функции вы использовали настоящий генератор случайных чисел.
Я бы исключил функцию WAIS, поскольку ее спецификация содержит страницы со случайными числами, а ее производительность не лучше, чем у любой из гораздо более простых функций. Любая из оставшихся шести функций кажется отличным выбором, но мы должны выбрать одну. Полагаю, я бы исключил вариант Во и функцию Вайнбергера из-за их дополнительной сложности, хотя и незначительной. Из оставшихся четырех я бы, вероятно, выбрал P (31), так как он является самым дешевым для расчета на RISC-машине (потому что 31 - это разность двух степеней двух). P (33) так же дешево вычислить, но его производительность немного хуже, а 33 сложная, что немного нервничает.
мистифицировать