時間O(d3logd)
補題: 任意の修正。次に、最も近いコーナーを含み、が接続されているセットがあります(つまり、によって生成されたハイパーキューブのサブグラフが接続されています)。X ∈ [0,1]dD + 1 { 0 、1 } D X S SSd+ 1{0,1}dxSS
証明。
まずその場合考えるない座標に等しいていない1 / 2。x1/2
任意のコーナーを考えるとにおけるS座標フリッピング、Jのからの距離を増加させないだろうにX場合| a j − x j | ≥ 1 / 2。 aSajaax|aj−xj|≥1/2
少なくとも1つの座標jが異なるSの 2つのコーナーを考慮し、 WLOGをa j = 0およびb j = 1と仮定します。もしXがJ < 1 / 2は、その後反転のb jはでBがで別のポイントが得られるSを(それから距離を減少させるため、BにX)。または、場合のx J > 1 / 2は、その後、フリップjでa,bSjaj=0bj=1xj<1/2bjbSbxxj>1/2ajin はSにポイントを与えます。それぞれ異なる座標に対してこのプロセスを繰り返すとBは接続路与えA及びB内のSを。aSababS
場合座標に等しい有する1 / 2、次いで、選択する際にSを、より多くのゼロ座標を持つものに優先順位を与えることで等距離点間の関係を壊します。次に、同じ引数が機能します。QEDx1/2S
補題によって、ダイクストラのようなアルゴリズムを使用してを見つけることができます。コーナーに最も近いで始まるX(持つJ = 0であれば、XがJ ≤ 1 / 2)。次に、Sのある点に隣接するコーナーの中でxに最も近いコーナーをSに繰り返し追加します。d + 1ポイントが追加されたら停止します。 Sxaaj=0xj≤ 1 /2SバツSd+ 1
単純に(隣に最も近い点を見つけるために最小ヒープを使用して各反復で)を、Iがある推測D + 1回の反復は、それぞれ反復が必要O (D 2)を生成する作業を、Dの各(追加されたノードの近隣をそのサイズd)の表現を持ち、実行時間O (d 3 log d )を与えます。バツd+ 1O(d2)ddO(d3logd)
時間O (d2logd)
各コーナー暗黙的にペア(h 、d )として表します。ここで、hはa i = 1であるようなインデックスiのセットのハッシュであり、dはxからaまでの距離です。特定のコーナーaから、すべての隣接するコーナーのペアをO (d )時間(合計)で生成できます。これにより、実行時間がO (d 2 log d )になります。a(h 、d)h私a私= 1dバツaaO (d)O (d2ログd)
もっと早く?
議論を簡単にするために、問題を次のように言い換えましょう。 一連の所与の非負数Y 1 ≤ Y 2 ≤ ⋯ ≤ Y D、検索D + 1つのサブセットのコストは、それの数字の和である数の最小コストのサブセットを、。dy1≤ yの2≤ ⋯ ≤ Ydd+ 1 (テイク、以前の問題との接続を確認するには各サブセット; YのY Iの対応するコーナーにAy私= | バツ私- 1 / 2 |Yy私超立方体の I(yは) 1である場合( X I ≤ 1 / 2及び Y I ∈ Y)又は( X I > 1 / 2及び Y I ∉ Y)。Yのコストは、 xから a (y )までの距離です。)a (y)a私(y)バツ私≤ 1 / 2y私∈ Yバツ私> 1 / 2y私∉ YYバツa (y)
これは、より高速なアルゴリズムの一般的な考え方です。多分誰かがそれを機能させる方法を理解することができます。
各ノードがy iのサブセットである暗黙の有向グラフを定義します。開始ノードは空のセットです。ノードを暗黙的にペア(h 、c )として表します。ここで、hはサブセットのハッシュで、cはコストです。各サブセットYについて、隣接するサブセットを何らかの方法で定義して、(i)Y → Y ′が有向エッジの場合、コスト(Y ′)≥コスト(Y )であり、(ii)任意のサブセットY ′が存在するようにします。有向エッジYy私(h 、c )hcYY→ Y』(Y』)≥(Y)Y』あるサブセット Yからの Y → Y '。ただし、コスト(Y )≤コスト(Y ')。次に、開始ノードから始まるこの暗黙のグラフでダイクストラを実行します。Y→ Y』Y(Y)≤(Y』)
(i)と(ii)の両方が成り立つようにエッジを(どういうわけか)選択し、最も安いノードの次数の合計がO (d )になるようにします。(これは常に可能です。たとえば、エッジを最初にルート化されたいくつかの最短パスツリーのエッジにすることができます。)しかし、最短パスツリーのアプリオリな知識がなくても、そのようなグラフを定義できますか?その場合、これはO (d log d )時間アルゴリズム(?)につながる可能性があります。d+ 1O (d)O (dログd)