Я пишу общую хэш-карту в C ++, которая использует цепочку для обработки коллизий.
Скажите, если у меня есть хэш-карта с 11 корзинами, и я вставляю 8 элементов. Хеш-функция распределяет его следующим образом:
bucket[0] = empty
bucket[1] = 2 elements
bucket[2] = empty
bucket[3] = 1 element
bucket[4] = 1 element
bucket[5] = 3 elements
bucket[6] = empty
bucket[7] = 1 element
bucket[8] = empty
bucket[9] = empty
bucket[10] = empty
Расчет разброса по ведрам составляет 5/8 = 0,625.
Но как рассчитать спред с учетом глубины сегментов?
Я хочу знать это, потому что:
Скажем, если я добавил 20 элементов, и у каждого сегмента 1 элемент, а у последнего сегмента 11 элементов.
тогда спрэд будет равен 1, если я вычисляю его простым способом, но это явно не правильно! (таблица, конечно, изменяет размеры, чтобы избежать этого, но я хочу показать разброс) Я хочу использовать эту информацию для настройки хеш-функций.
Заранее спасибо!