問題: 無向グラフとの部分集合 (special node)が与えられる。上の任意の2点間の距離で最短のものを求めよ。
方針: すべてのspecial nodeから各点への最短距離を調べるために回ダイクストラする。この際、距離のテーブルは毎回使いまわしてよくて、枝刈りができる。また、special nodeを調べる順番をシャッフルすれば期待計算量が保証できる。
正当性について。今、special node について二頂点間の最短距離の最小値が求まっているとし、距離のテーブルがととの最短距離の最小値、という状態になっているとする。ここからさらにspecial node を始点にダイクストラするとする。この際、頂点からを更新しようとした時にであれば、は無視してよい。なぜならから任意の頂点に到達する際の最短経路がを通るとしても、それ以下の距離でのいずれかからに到達できることになるからだ。
計算量について。回ダイクストラをしている間に頂点がキューからポップされる回数の期待値を考える。がキューからポップされるのは、今調べているspecial nodeとの最短距離が以前調べたすべてのspecial nodeとの最短距離より小さい場合である。したがって、この期待値は個のspecial nodeととの最短距離をとした時、をシャッフルした列のLDSの長さの期待値に等しく、らしい[1]。したがって、ポップに関する期待計算量はとなる。また、ポップした頂点の隣接頂点を調べてdecrease keyする操作の期待計算量は、二分ヒープならとなる。 したがって、全体の期待計算量はということになる。
waterfallsさんの別の乱択の方針も面白かった。special nodeをランダムに2分割して、一方を始点としたダイクストラをすると、最短距離を与える二頂点が異なるグループに属している時に正しい答えが出る。そうなる確率は1/2なので、何回もやって最小値を取ればよい。このテクニックは無向グラフの最短閉路アルゴリズムで見たことがある: http://research.haifa.ac.il/~raphy/papers/all-cycles.pdf
この評価については https://www.math.ucdavis.edu/~romik/book/ のp.9に簡潔な証明が載っている。ランダム順列のLISの長さの期待値に関する研究はJ. M. Hammersley, A few seedlings of researchが初出らしい。(後者は読んでいない) ↩︎