二部グラフでのユニオンのグループ化?


8

私は次の問題に対する優れた(そして高速な)解決策を見つけ出そうとしています:

使用しているモデルが2つあります。それらをプレイヤーとチームと呼びましょう。プレーヤーは複数のチームに所属でき、チームは複数のプレーヤーを持つことができます)。ユーザーが複数のチーム(チェックボックス)を選択できるようにするフォーム上のUI要素の作成に取り組んでいます。ユーザーがチームを選択(または選択解除)しているときに、プレーヤーごとにグループ化されたチームを表示します。

例として:

  1. 選択したチームに交差するプレーヤーがいない場合、各チームには独自のセクションがあります。

  2. ユーザーが2つのチームを選択し、それらに同じプレーヤーがいる場合、2つのチームとすべてのプレーヤーの名前を含むセクションが1つあります。

  3. TEAM_Aにプレーヤー[1、2、4、5]があり、TEAM_Bにプレーヤー[1、3、5、6]がある場合。次のセクションがあります:SECTION_X = [TEAM_A、TEAM_B、1、5]、SECTION_Y = [TEAM_A、2、3]、SECTION _Z = [TEAM_B、3、5]

私はそれが明確であることを望みます。基本的に、プレイヤーが共通して持っているチームを見つけ、それによってグループ化したいと考えています。私は多分二部グラフをナビゲートしてこれを行う方法があるのではないかと思っていましたか?正確にはわからないけど、考えすぎているかもしれません。サーバー上にあるタイプのデータ構造を作成し、それをクライアント上で使用することでこれを実現したいと思っていました。私はあなたの提案を聞きたいと思います、そしてあなたが与えることができるどんな助けにも感謝します!


モデル間の多対多の関係を使用してそのロジックをコーディングできないと確信していますか?うまくいけば、サーバー側のコードを書き始めるときに、お気に入りのフレームワークを使用して、いくつかのフィールドを持つモデルを宣言できます。したがって、モデルにTeamは、players他のモデルとの多対多の関係を必要とすると呼ばれるフィールドが必要であることを指示できますPlayer。これにより、各チームに所属しているプレーヤーと、各プレーヤーに関連付けられているチームを取得できます。
ロバート・スミス

特定のテクノロジーを選択しましたか?これは、Neo4JとCypherで実行できます。
sheldonkreger 2015年

回答:


2

交差グラフについて聞いたことがありますか?プレーヤーをポイントとして、接続(チームメイト)をエッジとして、チームを透明な色のブロブとして上に描画することができます。

あなたの元の質問については、私はあなたの目標を理解できません。あなたの定式化は十分に定義されていない/不完全だと思います。チームA [1,2] B [2,3]とC [1,3]があるとします。何を表示しますか?ベン図の一部を一覧表示しますか?3セット以上の場合、これは2部グラフ自体、つまりチーム構成の単純なリストよりも厄介になる可能性があると思います。


1

エッジ(関係)をサーバーに保存します。

(TeamID, playerID)

一般的な要素を検索する場合は、次の場所にあるすべてのエッジをフィルター処理します。

TeamID="TeamA" or TeamID="TeamB"

(インデックスを使用してスピードアップなど)

次に、playerIDでグループ化し、各グループのアイテム数を確認します。2つのアイテムを持つグループは両方のチームに属し、共有されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.