2009-12-22 4 views
0

В дополнение к оригинальные шары и корзинки проблемы я уже упоминал здесь: Balls and Baskets Problem Algorithm?Мячи и корзины Ver2

Существует несколько другая проблема.

Все еще есть люди N, и у них есть неограниченные шары, но на этот раз у них нет корзин.

Проблема:

Есть N человек с неограниченными шариками и M разных корзинах. Люди бросают шары в корзины.

Я хочу найти группы людей, которые бросают шары в те же корзины.

Люди А бросает корзину 1, 2, 4, 6,7, 14, 51, 32 Лицо B бросает корзину 3, 4, 6, 7, 14,15, 16, 64,43 Людей C бросает в корзины 3, 4, 6, 7, 5, 87, 42, 32, 52, 55 . . . и т. Д.

В этом примере человек A и B могут быть хорошо связаны (скажем, друзья) (4,6,7,14 общими) и C могут быть подключены к ним, но не очень хорошо подключены. (4, 6, 7)

Я хочу найти группы из 4-5 человек в этой очень большой базе данных людей.

+2

Whoohoo! Больше домашней работы! –

+0

Почему все люди думают, что это hw после просмотра шара и корзин. это серьезная проблема, но я не думаю, что кто-то серьезно относится к этому вопросу. Попробуйте решить, и вы увидите. и если вы не можете думать, где его можно использовать в реальной жизни, это еще одна серьезная проблема! Я по-прежнему открыт для любых предложений. – huhuhuuu

ответ

0

Идея Джексона - это начало.

После того, как вы нашли клики, определите общую корзину для каждой клики, пересекая все корзины egdes. (где корзины края - это корзины, общие для людей, представленных узлами этого края). только если общий набор корзин больше X, то эта клика представляет собой действительно связанную группу.

, например, в исходном вопросе, края будут:

A-B: weight=4, baskets=[4,6,7,14] 
A-C: weight=3, baskets=[4,6,7] 
B-C: weight=4, baskets=[3,4,6,7] 

если вы сократите на менее чем 3, вы получите, что это является кликой, с общей корзиной, установленной = [4,6, 7].

В примере, который вы дали в ответ на ответ Джексона, общий набор корзин будет пустым, поэтому вы знаете, что эти ребята на самом деле не связаны.

0

Хорошо, моя первоначальная идея; моделируйте это как взвешенный график. Сделайте людей вершинами и создайте ссылку, когда они разделяют корзину. Если они разделяют несколько корзин, то увеличивайте вес ссылки для каждой корзины, которую они разделяют. Таким образом, в вашем примере вес края между A и B будет равен 4.

Затем вы можете решить, насколько дружелюбны все в группе, обрезать края, которые имеют вес меньше этого значения, а затем искать клики в результирующем графе.

+0

Большое спасибо jackson, но вот одна проблема, которую я вижу в вашем решении: после того, как пометить края, криволинейные клики, в кликах у нас будут пары, у которых одинаковое количество общих корзин, но эти общие корзины могут отличаться от других пар в клике. Например: 1 выход клика ABCD Порог был 3 АВ имеет 1 2 3 4 в общей до н.э. имеют 5 6 7 8 в общем CD имеет 9 10 11 12 в общем AD имеют 13 14 15 16 общего AC имеют 17 18 19 20 общий BD имеют 21 22 23 24 общий , так что клика может быть произведена, но на самом деле она не похожа на клику. Я ясно об этом? – huhuhuuu

+0

Я вижу различие, придется подумать об этом еще немного. – Jackson