Memory usage of AAs?

spir denis.spir at gmail.com
Tue Mar 29 17:02:11 PDT 2011


On 03/30/2011 01:24 AM, Nick Sabalausky wrote:
> My understanding of hash tables is that they allocate a fixed size array and
> map keys to indicies within the range 0..predefined_length_of_the_AA.
>
> So I've been wondering, how many elements do D's built-in AAs have? And
> what's the content of each one, just a single pointer?

Each element is a data structure, often called bucket (typically a link list), 
storing (key:value) pairs for which the key, once hashed and modulo-ed, maps to 
the given index. That's why the famous O(1) lookup time for hash tables is very 
theoretic: the constant part holds average time for hashing which is very 
variable, plus another average time for linearly traversing the bucket. The 
latter part depends on table load factor (= number of elements / number of 
buckets) and proper statistical repartition of keys into buckets.

The key (!) points are finding a good hash func to "linearize" said repartition 
(which depends on actual key-data domain, not only on their type...), but 
better ones rapidly eat much time (ones used in practice are rather simple & 
fast); and finding optimal load factor, and growth scheme. In practice, all of 
this tends to make hash tables an implementation nightmare (for me). I'd love 
to find practicle alternatives, but efficient binary trees also are complex and 
even more depend on kind of keys, I guess.

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d-learn mailing list