スキップリスト
http://comjnl.oxfordjournals.org/content/27/3/225.full.pdf.
↑ David Eppstein; Michael T. Goodrich; Jonathan Z. Sun (2005). “The Skip Quadtree: A Simple Dynamic Data Structure for Multidimensional Data”. SCG '05 Proceedings of the twenty-first annual symposium on Computational geometry: 296-305. doi:10.1145/1064092.1064138. http://arxiv.org/abs/cs/0507049.
↑ James Aspnes; Gauri Shah (2003). “Skip graphs”. Fourteenth Annual ACM-SIAM Symposium on Discrete Algorithms: 384–393. http://arxiv.org/abs/cs/0306043.
↑ ConcurrentSkipListSet (Java Platform SE 8 )
↑ ConcurrentSkipListMap (Java Platform SE 8 )
表示
編集
スキップリストはリストの階層になっている。最下層は通常のソートされた連結リストである。それより上の層は、それぞれ下のリストに対する「急行列車」のように働き、層i に存在するリストの要素は層i+1 においては固定の確率p(良く使われる p の値は 1/2 と 1/4)で存在する。各要素は平均で 1/(1-p)個のリストに属し、最も背の高い要素、つまり普通スキップリストの先頭の特別扱いされる要素はすべてのリストに属する。スキップリストは log 1 / p  n {\displaystyle \log _{1/p}n\,} 個の連結リストを含む。
目的の要素を探索するには、まず、最上層の連結リストの先頭の要素から(水平方向に)スキャンして、目的の要素と同じかそれより大きい要素を探し出す。もし、探し出した要素が目的の要素と等しいならば、探索は完了。