私は2つの配列を持っています。それぞれが単純な閉じた多角形を、順番に並んだ点の配列として表しています。最後の要素は最初の要素と同じです。私は任意の2つの単純な閉じたポリゴンの等価アルゴリズムを実装しています。このアルゴリズムは、2つの配列の内容が同じかどうかを判断するのに適していますか?
Array A would be like this [pnt1, pnt2, pnt3, pnt4, pnt5, pnt6, pnt1]
Array B would be like this [pnt2, pnt3, pnt4, pnt5, pnt6, pnt1, pnt2]
Array C would be like this [pnt2, pnt1, pnt6, pnt5, pnt4, pnt3, pnt2]
Array D would be like this [pnt1, pnt2, pnt3, pnt5, pnt6, pnt4, pnt1]
配列AとBは、同じ順番と同じ点にあるため、等しいです。配列AとCは、同じ順序である(しかし、逆の)ため、同じ理由でBとCも同じです。
配列Dは、ポイントのトラバーサルが順序外であるため、他の配列と同じではありません。
次のように私のアルゴリズムである:
1)の要素の同じ#が含まれている必要があり、配列の長さを比較する - 時定数を
2)Kとして[0] Bの設定を見つける - 線形探索[1] = B [K + 1]など[N]まで、線形時間
当然インデックスは、おそらくを介して、アレイの端部を包み込むならば、線形時間
3)を参照しますmod演算子です。
これよりも優れたアルゴリズムがありますか?
私はアルゴリズムがAとCが同じであるが逆であることを検出するとは思わない。 –
@Bill True、それが失敗するか、内部ループを適用すると、2回(2番目の引数を反転)する必要があります –
ポイントがポリゴンに複数回現れないことを保証できますか?そうでない場合、アルゴリズムによって偽陰性が発生する可能性があります。 – Weeble