создать гистограмму:
unsigned histogram[tablesize] = {0};
генерирует некоторые (все) возможные строки и вычисляет их hashval, и соответственно обновляет гистограмму:
for(iter=0; iter < somevalue; iter++) {
hashval = hashfunc( string.iterate(iter) ); // I don't know c++
histogram[hashval] +=1;
}
Теперь вам нужно проанализировать хеш-таблицу для кусков / кластеров. Основное правило таково, что для (tablesize==iter)
вы ожидаете около 30% ячеек с числом = 1 и около 30% пустых; у остальных есть два или больше.
Если вы сложите все (count*(count+1))/2
и поделите на размер таблицы, вы должны ожидать около 1,5. Плохая хэш-функция дает более высокие значения, а идеальный хеш-код будет иметь только ячейки с числом = 1 (и, следовательно, с отношением = 1). При линейном зондировании вы, конечно, никогда не должны использовать tableize = niter, но увеличивать размер таблицы, скажем, в два раза. Вы можете использовать ту же метрику (количество проб / число записей), чтобы проанализировать ее производительность.
ОБНОВЛЕНИЕ: отличное введение в хэш-функции и их производительность можно найти по адресу http://www.strchr.com/hash_functions.