Skip to content

Instantly share code, notes, and snippets.

View Hydra9268's full-sized avatar

Hydra9268

View GitHub Profile
Aspect Hash Block Perfect Hash Table
Memory Usage ~40 KB (with ~100 street names stored) ~143 KB (preallocated, including names).
Scalability Efficient for sparse data; scales dynamically. Preallocates all slots, wasteful for sparse data.
Lookup Time O(1) (array indexing). O(1) (direct indexing).
Insertion Time O(1) for most cases, O(k) if collisions. O(1) (no collisions by design).
Suitability for Sparse Datasets Excellent (only allocates necessary slots).
Aspect Hash Block Perfect Hash Table
Memory Usage (Slots) ~39,520 bytes (worst case) 140,608 bytes (fixed)
Memory Efficiency Scales with usage (lazy init) Preallocates all slots upfront
Lookup Time O(1) (array-based indexing) O(1)
Scalability Adapts to actual usage Fixed size for predefined keys
Collisions Handles with linked lists None
Using Two-Letter Keys (e.g., AA, AB, AC) Three-Letter Keys (e.g., AAA, AAB, AAC)
A hash table for two-letter keys could use a hash function like:

hash(key) = 26 × index_of(first_letter) + index_of(second_letter)

For AA, AB, AC:
- AA → 26 × 0 + 0 = 0
- AB → 26 × 0 + 1 = 1
- AC → 26 × 0 + 2 = 2

This maps each two-letter key to a unique slot in a table with size 26 × 26 = 676 spaces.
A hash table for three-letter keys might extend this idea:

`hash(key) = 26² × index_of(first_letter) + 26 × in