0

何かの大きなO表記を推定してから少し時間が経ちましたが、これを理解できないようです。基本的に、私のスクリプトは、緯度/経度で米国内のポイントのリストを実行し、それらのポイントが半径 100 マイルの円の中心である場合に、その国をカバーするセットを見つけます。このように:

  • リストのループを開始します。インデックス i = 0 です。
  • リスト内の i 番目の点と、リスト内のそれ以降のすべての点の間の距離を見つけます。
  • 100 マイル以内のポイントを削除します
  • 配列の再インデックス
  • インデックスを 1 つ増やします
  • i = リストの長さの場合、終了、そうでない場合、ループ
4

3 に答える 3

1

あなたのアルゴリズムはO(N^2)、ここでnです。あなたの説明を正しく理解すると、次のようになります。

for point A in array:
  for point B in array:
      d = dist(A,B)
      //optionally remove from list

最悪の場合、ポイントのすべてのペアが 100 マイル以上離れているため、最終的に各ペア間の距離をチェックすることになりO(N^2)ます。

n + (n-1) + (n-2) + ... + 2 + 1 = (n(n+1))/2ほとんどの距離計算を行っていることに注意してください。これはまだO(N^2)です。

于 2013-10-11T17:36:13.650 に答える
1

O(n^2)最悪の場合、配列を反復処理し、配列内の次のすべてのポイントに対して各ポイントをチェックするため、アルゴリズムのランタイムは です。したがって、n(n-1)/2比較は次のとおりです。O(n^2)

ただし、このアルゴリズムが問題に対する適切な解決策を提供するとは思わないことをお伝えしなければなりません。

于 2013-10-11T17:38:39.487 に答える
0

n入力として持っているポイントの数だとしましょう。

リストのループを開始します。インデックス i = 0 です。

...

i = リストの長さの場合、終了、そうでない場合、ループ

それがn反復です。

リスト内の i 番目の点と、リスト内のそれ以降のすべての点の間の距離を見つけます。

それnは反復ごとの操作です。これらの 2 つだけの場合は、最終的には次のようになりn^2/2ます (すべてのポイントと他のすべてのポイント。ただし、順序は重要ではないため、半分の比較を行います)。

100 マイル以内のポイントを削除します

配列の再インデックス

100 マイル以内にある要素を無効にしてから、配列をシフトしているように聞こえます。どちらもO(n)操作であり、操作が繰り返されるO(n^2)ためです。O(n)n

だからあなたは持ってしまいますO(n^2)

于 2013-10-11T17:38:17.550 に答える