Pengelompokan serikat dalam grafik bipartit?


8

Saya mencoba mencari solusi yang baik (dan cepat) untuk masalah berikut:

Saya memiliki dua model yang saya kerjakan, sebut saja mereka pemain dan tim. Seorang pemain dapat berada di beberapa tim dan sebuah tim dapat memiliki beberapa pemain). Saya sedang berupaya membuat elemen UI pada formulir yang memungkinkan pengguna memilih beberapa tim (kotak centang). Karena pengguna memilih (atau membatalkan pilihan) tim, saya ingin menampilkan tim yang dikelompokkan berdasarkan pemain.

Jadi untuk contoh:

  1. Jika tim yang dipilih tidak memiliki pemain yang berpotongan, masing-masing tim akan memiliki bagian sendiri.

  2. Jika pengguna memilih dua tim dan mereka memiliki pemain yang sama, akan ada satu bagian yang berisi nama-nama kedua tim dan semua pemain.

  3. Jika TEAM_A memiliki pemain [1, 2, 4, 5] dan TEAM_B memiliki pemain [1, 3, 5, 6]. Akan ada bagian berikut: SECTION_X = [TEAM_A, TEAM_B, 1, 5], SECTION_Y = [TEAM_A, 2, 3], SECTION _Z = [TEAM_B, 3, 5]

Saya harap itu jelas. Pada dasarnya, saya ingin menemukan tim yang memiliki kesamaan pemain dan kelompok dengan itu. Saya berpikir mungkin ada cara untuk melakukan ini dengan menavigasi grafik bipartit? Tidak begitu yakin bagaimana dan saya mungkin terlalu memikirkannya. Saya berharap untuk melakukan ini dengan membuat beberapa jenis struktur data di server dan menggunakannya pada klien. Saya ingin mendengar saran Anda dan saya menghargai segala bantuan yang dapat Anda berikan!


Apakah Anda yakin Anda tidak dapat kode logika itu menggunakan hubungan banyak-ke-banyak antara model Anda. Mudah-mudahan, ketika Anda mulai menulis kode sisi server Anda, kerangka kerja favorit Anda akan memungkinkan Anda untuk mendeklarasikan model dengan beberapa bidang. Oleh karena itu, Anda akan dapat menginstruksikan bahwa model Teamharus memiliki bidang yang disebut playersyang memerlukan hubungan banyak-ke-banyak dengan model Anda yang lain Player. Ini memungkinkan Anda untuk mengambil pemain yang ada di setiap tim dan tim mana yang dikaitkan dengan masing-masing pemain.
Robert Smith

Sudahkah Anda memilih teknologi tertentu? Ini bisa dilakukan dengan Neo4J dan Cypher.
sheldonkreger

Jawaban:


2

Pernahkah Anda mendengar tentang grafik persimpangan ? Anda dapat mencoba menggambar pemain sebagai poin, koneksi (rekan tim) sebagai ujung dan tim sebagai gumpalan berwarna transparan di atas.

Mengenai pertanyaan awal Anda, saya tidak dapat memahami tujuan Anda. Saya pikir formulasi Anda tidak didefinisikan dengan baik / tidak lengkap. Misalkan Anda memiliki tim A [1,2] B [2,3] dan C [1,3]. Apa yang ingin Anda tampilkan? Apakah Anda ingin membuat daftar bagian-bagian diagram Venn? Saya pikir untuk lebih dari 3 set ini bisa menjadi lebih rumit daripada grafik bipartit itu sendiri = daftar sederhana komposisi tim.


1

Simpan tepi (hubungan) di server Anda:

(TeamID, playerID)

Saat Anda ingin menemukan elemen umum, cukup filter semua tepi tempat:

TeamID="TeamA" or TeamID="TeamB"

(Anda dapat menggunakan indeks untuk mempercepat, dll)

Kemudian kelompokkan dengan ID pemain dan periksa berapa banyak item dalam setiap kelompok. Grup dengan dua item milik kedua tim dan dibagikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.