Data structures play a central role in modern computer science. You interact with data structures even more often than with algorithms (think Google, your mail server, and even your network routers). In addition, data structures are essential building blocks in obtaining efficient algorithms. This c…
History of memory models: idealized 2-level, red-blue pebble game, external memory, HMM, BT, (U)MH, cache oblivious
Dynamic graphs: Ω(lg n) lower bound for dynamic connectivity
Dynamic graphs: Euler tour trees, decremental connectivity in trees in O(1), fully dynamic connectivity in O(lg2 n), survey
Dynamic graphs: link-cut trees, heavy-light decomposition
Succinct: compact suffix arrays and trees
Strings: suffix tree, suffix array, linear-time construction for large alphabets, suffix tray, document retrieval
Integer: sorting in linear time for w = O(lg2+ε n), priority queues
Static trees: least common ancestor, range minimum queries, level ancestor
Fusion trees: sketching, parallel comparison, most significant set bit
Integer: models, predecessor problem, van Emde Boas, x-fast and y-fast trees, indirection
Integer data structure lower bounds. In particular, we'll prove that the min of van Emde Boas and fusion trees is an optimal (static) predecessor data structure up to a log log factor, assuming polynomial space.
Dictionaries: universal, k-wise independent, simple tabulation hashing; chaining, dynamic perfect hashing, linear probing, cuckoo hashing
Memory hierarchy: distribution sweeping via lazy funnelsort; cache-oblivious orthogonal 2D range searching: batched and online
Memory hierarchy: ordered-file maintenance, list labeling, order queries, cache-oblivious priority queues
Cache-efficient structures. B-trees are good at data transferred in blocks between cache and main memory, main memory and disk, and so on, achieving O(logB N) insert/delete/predecessor/successor for N items and memory block transfers of size B.
Dynamic optimality: independent rectangle, Wilber, and Signed Greedy lower bounds; key-independent optimality; O(lg lg n)-competitive Tango trees
Dynamic optimality: binary search trees, analytic bounds, splay trees, geometric view, greedy algorithm
Fractional cascading in 3D orthogonal range searching in O(log n) time. Moving data, e.g., where 2D points move at known velocity and acceleration: kinetic predecessor and kinetic priority queues.
Point location and range searching: persistence, retroactivity, dynamization of augmentation through weight balance, and fractional cascading.
Partial and full retroactivity let us to alter and manipulate the order of operations, and investigate the results. A third type, "non-oblivious", puts queries on the timeline as well, and reports the first query whose answer changed.
"Persistence” - remembering all past versions of a data structure (“partial persistence”), being able to modify them - forking off new ones (“full persistence”), and merging different versions into one (“confluent persistence”).