ビットマップで質量のクラスターを見つけることについての質問に半分答えました。ビットマップ内のすべてのポイントを質量でソートした状態のままにし、リーダーに任せて、リストをフィルタリングして同じクラスターからポイントを削除したため、半分答えたと言います。
その後、そのステップについて考えてみると、思ったほど解決策が思い浮かびませんでした。だから今、私はあなたたちに助けを求めています。次のような質量を持つ点のリストがあります (Python のタプルのリストですが、任意の言語で適切に表現できます)。
[ (6, 2, 6.1580555555555554),
(2, 1, 5.4861111111111107),
(1, 1, 4.6736111111111107),
(1, 4, 4.5938888888888885),
(2, 0, 4.54),
(1, 5, 4.4480555555555554),
(4, 7, 4.4480555555555554),
(5, 7, 4.4059637188208614),
(4, 8, 4.3659637188208613),
(1, 0, 4.3611111111111107),
(5, 8, 4.3342191043083904),
(5, 2, 4.119574829931973),
...
(8, 8, 0.27611111111111108),
(0, 8, 0.24138888888888888) ]
各タプルは次の形式です。
(x, y, mass)
リストはここでソートされていることに注意してください。ソリューションでそれらを並べ替えたくない場合は、まったく問題ありません。
思い出すと、課題は主な質量クラスターを見つけることです。クラスターの数は不明です。しかし、ビットマップのサイズはわかっています。クラスター内のいくつかのポイントが、次の (サイズの) クラスターの中心よりも質量が大きい場合があります。したがって、私がやりたいことは、より高い質量のポイントから移動し、同じクラスター内のポイント (近くのポイント) を削除することです。
これを試してみると、リストの一部を何度も見て回る必要がありました。私はそれについてただ愚かだと感じています。どのようにしますか?疑似コードまたは実際のコード。もちろん、Python コードを使用して、その回答で残したところから離陸することができれば、それを試すのは簡単です。
次のステップは、ビットマップ内に実際にいくつのクラスターがあるかを把握することです。私はまだその問題を定義するのに苦労しているので、それについて質問するかもしれません.
編集:この質問には「正しい」答えがないことを知っていることを明確にする必要があります。そして、質問の名前が重要です。クラスタリングのフェーズ 1 が完了しました。近くのポイントをフィルタリングするための、高速で正確な「十分な」方法を探しています。
質問をより明確にする方法がわかったら教えてください。