-5
3点の水平線(y = 0、y = 1、y = 2)上に広がるn点群を考えると は交差線があるかどうかを見つけるアルゴリズムを考えるO(N^2)横線上の3点を横切る線を見つける
3点の水平線(y = 0、y = 1、y = 2)上に広がるn点群を考えると は交差線があるかどうかを見つけるアルゴリズムを考えるO(N^2)横線上の3点を横切る線を見つける
私はO(N^2)で、このアルゴリズムを信じています。まず、前提としていますラインy=2
上の点の
x
-coordinatesは有限のビット数で表すことができます。x
にソートされています。そうでない場合は、最初にソートするのはO(nlog(n))です。次のように、ハッシュ関数を構築する:
y=2
上の隣接点間の最小距離を検索します。 x
- 座標がソートされているので、これはO(n)です。この最小距離d
と呼んでください。y=2
の各点を一意のビンにマップすることは明らかです。この操作もO(n)です。そして、次の操作を行います。
y=0
とy=1
上の点の各ペアについて、y=2
上の交差を計算します。これはO(n^2)です。y=2
の交点ごとに、そこからの点があるかどうかを調べるためのハッシュテーブルを参照してください。もし存在すれば、それが(機械の精度内で)同じ点であるかどうかを確認し、そうであれば、交差する線がある。それ以外の場合はありません。ハッシュルックアップがO(1)なので、これはO(n^2)です。したがって、アルゴリズムはO(n^2)です。コードなし、アイデアだけ。
これまでに何を試しましたか?あなたの特定の問題は何ですか?あなたのコードを教えてください! – MrSmith42
コードは必要ありません。ちょうどアイデア... 通常の解決策は、y0 * y1上のすべての点を実行して、y2に必要な点(バイナリ検索)があるかどうかを調べることです。 実行時間は、 n^2 * logn – borismos
スペースの制限がないため、いくつかのデータ構造を考慮してください。 – MBo