Zip-zip Trees: Making Zip Trees More Balanced, Biased, Compact, or Persistent
Ofek Gila, Michael T. Goodrich, Robert E. Tarjan
TL;DR
The paper introduces zip-zip trees, a simple enhancement of zip trees that removes bias toward small keys by using rank pairs (r1,r2) and lexicographic comparison, while preserving strong history independence and reduced per-node metadata. It proves tight depth and height bounds comparable to treaps and RBSTs, with expected node-depth at most 1.3863 log n and height at most 3.82 log n, and shows per-node metadata is O(log log n) w.h.p., with a just-in-time variant achieving O(1) bits per update. The work also extends to biased zip-zip trees for weighted keys, demonstrates partial persistence with modest space overhead, and provides extensive experimental validation that confirms the theoretical results and practical efficiency. Together, these results yield a space-efficient, balanced, history-independent, and persistable data structure suitable for dynamic and concurrent settings, with potential applications in areas like link-cut trees and planar point-location structures.
Abstract
We define simple variants of zip trees, called zip-zip trees, which provide several advantages over zip trees, including overcoming a bias that favors smaller keys over larger ones. We analyze zip-zip trees theoretically and empirically, showing, e.g., that the expected depth of a node in an $n$-node zip-zip tree is at most $1.3863\log n-1+o(1)$, which matches the expected depth of treaps and binary search trees built by uniformly random insertions. Unlike these other data structures, however, zip-zip trees achieve their bounds using only $O(\log\log n)$ bits of metadata per node, w.h.p., as compared to the $Θ(\log n)$ bits per node required by treaps. In fact, we even describe a ``just-in-time'' zip-zip tree variant, which needs just an expected $O(1)$ number of bits of metadata per node. Moreover, we can define zip-zip trees to be strongly history independent, whereas treaps are generally only weakly history independent. We also introduce \emph{biased zip-zip trees}, which have an explicit bias based on key weights, so the expected depth of a key, $k$, with weight, $w_k$, is $O(\log (W/w_k))$, where $W$ is the weight of all keys in the weighted zip-zip tree. Finally, we show that one can easily make zip-zip trees partially persistent with only $O(n)$ space overhead w.h.p.
