Glib hash tables, how to create the hash for optiomal performance.
- From: "Ronnie Sahlberg" <ronnie_sahlberg ozemail com au>
- To: <gtk-app-devel-list gnome org>
- Subject: Glib hash tables, how to create the hash for optiomal performance.
- Date: Sat, 30 Aug 2003 12:28:09 +1000
Hi list
I use quite a lot of glib hashtables.
One thing I have found missing from the documentation is how the hash
function I provide should generate
the hash values for optimal performance. I would really like to know how i
should tune the calculation of hashes so that the hash table
in glib performs in an optimal way speed wise.
If I want to create a hash function to make the hash table as efficient and
fast as possible, how should
I calculate the hash?
Example:
If I have 5 items and four hash functions that hashes these 5 objects as
function 1: 1 2 3 4 5
function 2: 1 10 100 1000 10000
function 3: 1 2 4 8 16
function 4: 1000 1001 1002 1003 1004
Which hash function will provide the optimal performance?
I guess my question is, when i create the hash function, how should i
distribute the calcualted hash values in the range 0 to 2^32-1
in order to get optimal performance.
Second question is: how should I distribute collissions when calculating
the hash value?
Should I try to avoid collissions completely?
Should I try to completely avoid collissions? or should I try to
deliberately create some collissions in order to keep the number of hash
buckets down?
I.e. given n objects n commonly>100.000
for optional performance (speed) how many distinctly different hash values
should I compute and how many objects at most should I allow to collide.
nb=f(n): number of hash buckets how does it relate to n. what is f(n)
nc=g(n): number of objects that compute to the same hash value. should
g(n) == 1 ? or is it cheapre to have a small number of objects in
each hash bucket than having many more hash buckets?
How should the hash values in nb be distributed in the interval 0-2^32-1 ?
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]