3.0 KiB
3.0 KiB
Hash Tables References
SwissTable
- Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step
- Abseil blog announcement
- Abseil design notes
- Faultlore hashbrown-TLDR
- hashbrown source
- Faster Go maps with Swiss Tables
64-bit hash from 128-bit hash
MurmurHash3 and SipHash return 128 bits. SwissTable expects 64 bits. XOR folding is the approach to use:
uint64_t fold_128_to_64(uint128_t hash) {
return (uint64_t)(hash >> 64) ^ (uint64_t)(hash & 0xFFFFFFFFFFFFFFFF);
}
Robin Hood
- Celis (1986) — original paper proving O(1) variance, Θ(log n) max probe
- Gankra/Faultlore — clearest walkthrough from first principles
- On Worst Case Robin Hood Hashing
- Sebastian Sylvan — popularized Robin Hood in systems programming
- Emmanuel Goossaert — detailed C++ implementation + backward-shift deletion
- Martinus (Ankerl) — most widely used C++ implementation
- Tessil — clean header-only C++ implementation
- Malte Skarupke — Robin Hood with probe count limit
Robin Hood vs SwissTable
- Rust migration PR
- hashbrown deletion discussion
- Jackson Allan benchmark
- Richter et al. (VLDB 2015)
- Poblete & Viola (2018)
Hybrid Open-Addressing/Separate-Chaining
Double Hashing
- Knuth, TAOCP Vol. 3 §6.4 — definitive analysis of double hashing probe counts
- Guibas & Szemerédi (1978) — proved double hashing is asymptotically equivalent to uniform probing
- Heileman & Luo (2005) — "How Caching Affects Hashing" — cache-aware experimental comparison
- VT Hashing Tutorial — excellent pedagogical walkthrough
- Paul Khuong — "The Other Robin Hood Hashing" (original Celis double-hashing variant)