Создать динамические родительские дочерние отношения - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть база данных пользователей и групп. В базе данных много групп, и в каждой группе много участников. Например;

  • Пользователь1 является членом Group1, Group2, Group3
  • Пользователь2 является членом группы2
  • Пользователь3 является членом группы 2, группы 5

Между группами есть отношения родитель-ребенок. Родительские группы являются более общими группами. Например,

  • Группа 2: программисты
  • Группа 5: .NET-программисты

В базе данных нет отношений родитель-ребенок между группами. Как можно создать динамические отношения родитель-ребенок? У меня есть какой-нибудь алгоритм по поводу этой проблемы?

Спасибо за ответ.

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Итерация по каждому элементу, заполнение таблицы child1Parent2 [groups, groups].На старте это полно истин.Для каждой группы проверяется условие: g1 установлено, а g2 не установлено.Если это правда, установите false в chuld1Parent2 [gr1, gr2].В конце итерации у вас есть таблица, которая содержит всю информацию о родительских и дочерних элементах.

boolean child1Parent2[groups,groups];
for( g1:groups) for(g2:groups) {
    child1Parent2[g1,g2]=true;
}
for (itemRow:rows){
    for( g1:groups) for(g2:groups)
        if (child1Parent2[g1,g2])
        if (itemRow.contains(g1)& !itemRow.contains(g2))
            child1Parent2[g1,g2]=false;
}

В результате вы получите: child1Parent2[g1,g2] === (g1 is a child of g2)

Совет на будущее:хотите найти некоторую информацию, подумайте о том, как эта информация будет объявлена, какую структуру она может иметь.Вы поймете намного больше по этому вопросу.

0 голосов
/ 28 февраля 2012

Вы можете запустить процесс извлечения правил ассоциации и считать правила ассоциации отношениями родитель-потомок, если они достаточно часты.

Т.е. когда вы обнаружите, что членство в группе А подразумевает 99%поддерживает членство в группе B, тогда B является супергруппой A.

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

0 голосов
/ 27 февраля 2012

Если у вас есть список смежности для групп и родительских групп, вам нужно сохранить его в базе данных. Нет способа найти его динамически, не храня где-нибудь. Вы можете использовать колесо рулетки, если точность достаточно хорошая.

...