Expiring cached data?

Tom Pledger Tom.Pledger at peace.com
Wed Nov 5 15:36:02 EST 2003


ajb at spamcop.net writes:
 | G'day all.
 | 
 | Tom Pledger wrote:
 | 
 | > How about adapting splay trees so that their pointers become weak
 | > after a certain depth?  The advantage for caching is that the more
 | > frequently used elements move closer to the root, so you wouldn't have
 | > to add much code for tracking recent use, just a depth threshold.
 | 
 | Nice idea, but I think it wouldn't be generally useful.  Splay trees
 | optimise themselves for static frequency distributions.  Caches, on
 | the other hand, are generally used more for changing working sets (i.e.
 | dynamic frequency distributions).  It seems to me that splay trees are
 | therefore not necessarily a good fit.

Hi.

It sounds like the term "splay tree" means different things to
different people.  I was thinking in particular of one which, whenever
it finds a key it was looking for, does some rotation so that the
key's node's depth is reduced.

e.g. finding g in this initial tree    causes this rotation

                  d                              d
                 / \                            / \
               T1   h                         T1   h
                   / \                            / \
  weak            f   T2                         g   T2
  pointer ------ / \ -------------------------- / \ -------
  threshold    T3   g                          f   T5
                   / \                        / \
                 T4   T5                    T3   T4

This is admittedly a side effect on the cache lookup, but we'd be in
the IO monad anyway if we're using weak pointers.

- Tom



More information about the Haskell mailing list