1

私は効率的な 2D マッピング アルゴリズムを求めており、多くの実装を試しましたが、どれも不足しているようです。私は、スタックオーバーフローの世界が、私が学ぶことができる試行錯誤された既存のアルゴリズムへのいくつかの指針を助けることができることを願っています.

私の目標は、執筆のジャンルに基づいて記事を表示することです。プロトタイプでは、哲学、プログラミング、政治、詩を使用しています。これは、私が持っている唯一の 4 つの執筆スタイルであるためです。

各記事は各カテゴリに基づいて重み付けされており、ホーム ビューでは各コーナーに各カテゴリがヘッダーとして表示されます。次に、記事は単語の雲のような形式でレイアウトされ、「人工重力」により、各項目が重複することなく、そのメイン カテゴリにできるだけ近く (またはメイン カテゴリ間) に配置されます。

現在、記事がビューに追加されるたびにヒットテストと検索を実行するために長方形の配列を格納する非効率的なアルゴリズムを使用しています (埋めるための空きスペースを見つけるための A* 検索パターンを使用)。同じ重量のすべての記事の単一の宛先を概算し、ラウンドロビン キューを使用して各プールから記事を選択することにより、新しい結果を得ることができます (配列は重量でソートされ、次にタイムスタンプでソートされます)。関連性(「人工重力」)。

ただし、A* を使用してやみくもに検索するのは、各記事が最初にターゲット マークに最も近いものをチェックするヒューリスティックであっても、本当に無駄に思えます。2D 空間を反復処理するためのより効率的な方法が必要です。

Linked-List アプローチの方がうまくいくのではないかと思っています。空のスペースをあらゆる方向にやみくもに検索するのではなく、接続されたノードを反復処理して、a) 近くに空きスペースがあるか、b) 他の接続されたノードに問い合わせるか (そして常に最も近いノードを最初に問い合わせる) を各ノードに問い合わせることができます。 .

利用可能なより良いアルゴリズム、または私の方法に対する批評がある場合は、あらゆる助けをいただければ幸いです。

私はこの GUI で gwt エレメンタル + Java を使用していますが、どの言語の 2D マッピング アルゴリズムでも確実に役に立ちます。

[編集 (詳細のリクエスト)]: ここでの主な問題は、新しい追加ごとに実行される作業量です。記事を収めるのに十分な空き領域を特定の半径内の多くのポイントで検索しているため、特にスペースがほとんど残っていない場合に、UI スレッドで顕著なグリッチが発生します。

あまりにも早くアルゴリズムを遮断すると、埋められた可能性のある空白のスポットができてしまいます。あまりにも長時間実行すると、UI の不具合がひどくなり、ユーザーに嫌われることは間違いありません。

2D 空間のコレクションを保存および変更するための最速/最も効率的な方法は何ですか?

4

1 に答える 1

0

何がアルゴリズムを「より良く」するかを述べるのに十分な情報を提供していません。もっと早く?品質の基準で「より良い」レイアウトを作成しますか? より大きなデータ ソースを処理できますか?

確かに、配列にも A* にも問題はありません。あなたが解決しようとしている問題のサイズで許容できる結果が得られている場合、それらが「無駄」であるとは限りません。リンクされたデータ構造は、頻繁に必要な操作のコストを削減する場合にのみ価値があります。

問題を明確にすると、有用な答えが得られる可能性が高くなります。

とにかく、「グラフのレイアウト」や「グラフの描画」に関する文献は膨大です。これらの用語で検索してみてください。目的のレイアウトをノードとエッジのコレクションとして表現できる場合は、これらが適用される可能性があります。多くはシミュレートされたスプリング システムに基づいており、これはあなたがしていることに似ているようです。

于 2012-09-14T01:00:30.493 に答える