The first data structure to provide 
 time
 time 
 ,
,
 , and
, and 
 operations was proposed by van Emde Boas and
has since become known as the van Emde Boas (or stratified)
tree [72].  The original van Emde Boas structure had size
 operations was proposed by van Emde Boas and
has since become known as the van Emde Boas (or stratified)
tree [72].  The original van Emde Boas structure had size
 , so was impractical for large integers.
, so was impractical for large integers.
The XFastTrie and YFastTrie data structures were discovered by
Willard [75].  The XFastTrie structure is very closely related
to van Emde Boas trees.  One view of this is that the
hash tables in an XFastTrie replace arrays in a van Emde Boas tree.
That is, instead of storing the hash table 
![$ \mathtt{t[i]}$](img708.png) , a van Emde Boas tree
stores an array of length
, a van Emde Boas tree
stores an array of length 
 .
.
Another structure for storing integers is Fredman and Willard's fusion
trees [30].  This structure can store 
 
 
 -bit integers in
-bit integers in
 space so that the
 space so that the 
 operation runs in
 operation runs in 
 time.  By using a fusion tree when
 time.  By using a fusion tree when 
 and
a YFastTrie when
 and
a YFastTrie when 
 one obtains an
 one obtains an 
 space data structure that can implement the
space data structure that can implement the 
 operation in
 operation in
 time.  Recent lower-bound results of P
 time.  Recent lower-bound results of P tra
tra cu
and Thorup [59] show that these results are more-or-less optimal,
at least for structures that use only
cu
and Thorup [59] show that these results are more-or-less optimal,
at least for structures that use only 
 space.
 space.
 still runs in
  still runs in 
 time.
 time.
 hash tables.
  hash tables.
 in such a way that each bitstring is represented as a
  root to leaf path.  Extend this idea into an SSet implementation that
  stores variable-length strings and implements
 in such a way that each bitstring is represented as a
  root to leaf path.  Extend this idea into an SSet implementation that
  stores variable-length strings and implements 
 ,
, 
 ,
  and
,
  and 
 in time proporitional to the length of
 in time proporitional to the length of 
 .
.
Hint: Each node in your data structure should store a hash table that is indexed by character values.
 , let
, let 
 denote
  the difference between
 denote
  the difference between 
 and the value returned by
 and the value returned by 
 [if
  [if 
 returns
 returns 
 , then define
, then define 
 as
 as 
 ].
  For example, if
].
  For example, if 
 returns 43, then
 returns 43, then  .
.
  
 operation in an XFastTrie that runs in
      operation in an XFastTrie that runs in 
 expected time. Hint: The hash table
      expected time. Hint: The hash table 
![$ t[\ensuremath{\mathtt{w}}]$](img1679.png) contains all the
      values,
 contains all the
      values, 
 , such that
, such that 
 , so that would be a good place
      to start.
, so that would be a good place
      to start.
 operation in an  XFastTrie that runs in
      operation in an  XFastTrie that runs in 
 expected time.
      expected time.
  
opendatastructures.org