Cuckoo hashing
zufallstee.blogspot.com
zufallstee.blogspot.com
I haven't completely understood the probability estimation, but doesn't the insertion algorithm have an infinite worst case running time (albeit not with "high probability")?
I'm trying to convince myself that a "second" hash function might be a reasonable cost even for modest n (e.g., when, as in perl, you use hashes to hold the attributes of an object, and the number of attributes will rarely exceed 50).
if f1(x0) = f1(x1), you don't want f2(x0) = f2(x1) to happen very much.