2012-01-19 16 views
5

これはbin packing problemに類似しているが、いくつかの変更を有します。私が持っているもの高速最小距離と各矩形パッキング2Dビンアルゴリズム及び点

は、注釈付きデータの時系列である、と私はチャートを描画するとき、私は全体的な注釈付きの点からの距離を最小限に抑える位置に注釈を配置します。

このチャート、(無償盗まれた)が、私が何をしたいのかを示しています。

私はこれが最適化問題であることを知っていますが、どこから始めたらいいのか分かりません。私が最初にやっていたことは、それを対応するxに配置し、yを上下に動かして利用可能な場所を見つけて、描画された領域を保存することでした。それがうまくいく間に、実際に利用可能なスペースを最大限に活用するわけではありません。もっと良いものがあるかどうかは疑問です。

これまたは類似の問題を攻撃する既知のアルゴリズムがあるかどうか疑問に思っていますか?

注意事項を追加しました:それが最適である必要はありませんが、それは絶対に速くする必要があります。これはレンダリング中に行われるため、UIの実行中にブロックされます。

+0

どのような方法で解決がスピードを上げるために、最適であることができ、それが最適である必要はありません(とあなたが最適化された何をしたいの明確な定義を与えられていない)場合は? –

+0

私は注釈付きポイントからの距離を最小限にしたいと思います。 –

+0

あなたが言及したアルゴリズム(利用可能な場所を見つけるためにyを上下に移動する)が遅すぎる場合は、おそらく十分な解はありません! – ElKamina

答えて

4

この難しい問題には、さまざまなアプローチがあります。私はautomatic label placementのWikipediaの記事から始めることをお勧めします。 force-based algorithms for graph drawingの領域からいくつかのアイデアを得ることもできます。

+0

素晴らしい...これは私が探していたものです。 –

+0

@ReverendGonzo - 良いことWikipediaがオンラインに戻りました! :) –

1

私はそれが簡単な「ファーストフィット」アルゴリズムを使用してラベルを配置するための任意の順序で開始しthis-好きだろう。結果を、各注釈付きポイントからの距離の二乗の和のようなものでスコア化します。私は遠く離れているものを除いて、それらのすべてが本当に近くになるのを避けるために、距離を二乗するだろう。

最初の解決策があるしきい値よりも低い場合は、それを使用して次に進みます。そうでない場合は、最悪のフィット(注釈付きポイントから最も離れたラベル)を取り、それらを配置順に上に移動してやり直します。あなたは十分に良い解決策を得るか、時間を使い果たすまで、これを繰り返すことができます。その場合、多くのベストな解決策を取って行きます。

関連する問題