4

幾何学的中央値をグーグルで検索すると、このリンク幾何学的中央値 が表示されましたが、 C で実装する方法がわかりません。私はこの数学的説明を理解するのがあまり得意ではありません. 11 組の座標があるとします。同じ幾何学的中央値を計算するにはどうすればよいでしょうか。

この問題Grid Cityを解決しようとしています。幾何中央値がそれを達成するのに役立つというヒントが与えられました。私は最終的な解決策を探していません。誰かが私を助けてくれる正しい道に導くことができれば。

ありがとうございます

以下は、座標 a (テスト ケース) のリストです。結果: 3 4

1 2
1 7
2 2
2 3
2 5
3 4
4 2
4 5
4 6
5 3
6 5
4

5 に答える 5

1

これは反復アルゴリズムなしでは解決できないと思います。

これは、任意の精度と高次元で機能することを除いて、山登りバージョンと同様の疑似コード ソリューションです。

CurrentPoint = Mean(Points)
While (CurrentPoint - PreviousPoint) Length > 0.01 Do
    For Each Point in Points Do
        Vector = CurrentPoint - Point
        Vector Length = Vector Length - 1.0
        Point2 = Point + Vector
        Add Point2 To Points2
    Loop
    PreviousPoint = CurrentPoint
    CurrentPoint = Mean(Points2)
Loop

ノート:

定数 0.01 は、結果が真の値の 0.01 以内になることを保証しません。精度を上げるには、より小さい値を使用します。

定数 1.0 は、最も遠いポイント間の距離の約 1/5 に調整する必要があります (私は推測しています)。値が小さすぎるとアルゴリズムの速度が低下しますが、値が大きすぎると不正確になり、無限ループにつながる可能性があります。

于 2012-04-02T15:00:01.053 に答える
0

この問題を解決するには、各座標の平均を計算し、結果を切り上げるだけです。それはあなたの問題を解決するはずです。

于 2012-04-02T13:32:49.323 に答える
0

幾何中央値の概念を使用する義務はありません。計算するのは簡単ではないので、計算せずに問題を解いたほうがよいでしょう。

これは、アルゴリズム/実装のアイデアです。

  1. 任意のポイント (指定されたデータの最初のポイントなど) から開始します。
  2. 現在のポイントと隣接する 8 つのポイントの距離の合計を計算します (x と y の各方向に +/-1)
  3. 近隣の 1 つが現在のポイントよりも優れている場合は、現在のポイントを更新して 1 から開始します
  4. (最適な距離を見つけました。距離が等しいものの中から最適な点を選択します)
  5. 現在のポイントと 3 つの隣接ポイントの距離の合計を計算します (x と y の各方向に -1)
  6. 近隣の 1 つが現在のポイントと同じ場合、現在のポイントを更新して 5 から続行します。
于 2012-04-02T13:44:18.107 に答える
-1

私がコメントしたように、あなたの問題の解決策は幾何平均ではなく、算術平均です。

算術平均を計算する必要がある場合は、列のすべての値を合計し、その答えを要素数で割る必要があります。

于 2012-04-02T13:26:32.447 に答える