ad 2: in most measurable stats fnv1 is better than djb.
practical throughput, time if inlined, cachegrind cost model (4x!).
fnv also produces less collisions with average keys.
only in pure cycle/hash djb is a bit better.
> ad 3: Is hash function efficiency that important when neither of the hash functions DJB or FNV1 posses good distributive qualities?
It depends entirely on the use case. Usage in hash tables is totally different to usage as file or block checksum or crypto.
Besides looking how many bis of the keys are really used or how easy it is to create collisions, it also depends if the keys are random length strings, aligned buffers or plain integers.
Both DJB and FNV1 are considered bad regarding their stats. But they are small and fast.
ad 2: in most measurable stats fnv1 is better than djb. practical throughput, time if inlined, cachegrind cost model (4x!). fnv also produces less collisions with average keys. only in pure cycle/hash djb is a bit better.
https://github.com/rurban/smhasher#smhasher https://github.com/rurban/perl-hash-stats#perl-hash-stats
> ad 3: Is hash function efficiency that important when neither of the hash functions DJB or FNV1 posses good distributive qualities?
It depends entirely on the use case. Usage in hash tables is totally different to usage as file or block checksum or crypto. Besides looking how many bis of the keys are really used or how easy it is to create collisions, it also depends if the keys are random length strings, aligned buffers or plain integers. Both DJB and FNV1 are considered bad regarding their stats. But they are small and fast.