まず最初に、私の英語が少しずれていたらごめんなさい (それは私の母国語ではありません)。自分を理解してもらえるように頑張ります。
修士論文の視覚化プロジェクトを作成していますが、アルゴリズムの問題が発生しました。ビジュアライゼーションは、私がアーティファクト (グラフのノード) と呼んでいるものと、私がキーワード (エッジ) と呼んでいるものの間の接続を表すグラフで構成されています。これらのアーティファクトは、さまざまなものになる可能性があります。たとえば、それらは写真を表すことができ、エッジは写真間のタグを表します。説明のために、写真 A がタグ 1 によって写真 B に接続されているとします。これは、写真 A と写真 B の両方にタグ 1 があることを意味します。
今、私はこのように機能する拡張と呼ばれる操作を持っています:
ユーザーがノード (私の例では写真) をダブルクリックすると、プログラムはそのノードへの新しい接続ごとにデータベースにクエリを実行します。上の例で、ユーザーが写真 B をダブルクリックすると、拡張により、たとえば、それぞれタグ 2 と 3 を持つ写真 C と写真 D が生成されます。問題は、これにより大量のデータが生成される可能性があり、ノードをグループ化するという解決策が必要になることです。理想は、可能な限り多くの共通キーワード (エッジ) でグループ化することです。たとえば、写真 C と D の両方にタグ 5 が付いていると想像してください。エッジ 5 を持つ C と D のグループがあるとします。しかし、写真 D と E の両方にタグ 5 と 6 がある場合、グループはエッジ付きの D と E になります。 5 と 6、次にエッジ 5 の写真 C (エッジは繰り返すことができます)。説明する:
5,6
A----B -> expand B -> A----B-----DE
1 1 |
|5
|
C
私の問題は、このアルゴリズムを完成させることです。データベースには、次のテーブルがあります。
キーワード (keyword_id、other_attributes)
アーティファクト ( artefact_id 、other_attributes)
Keyword_Artefact (keyword_id、artefact_id)
Keyword_Artefact_Artefact (keyword_id、artefact_id1、artefact_id2)
この問題に対する最善のアプローチは何でしょうか? かなりの量のデータで実行できるもの。
prefuse ライブラリを使用して、Java でこのプログラムを開発しています。