创建动态父子关系

时间:2012-02-27 10:08:17

标签: algorithm data-structures data-mining

我有一个用户和组数据库。数据库上有很多组,每个组都有很多成员。例如;

  • User1是Group1,Group2,Group3
  • 的成员
  • User2是Group2的成员
  • User3是Group2,Group5
  • 的成员

各组之间存在亲子关系。父组是更一般的组。例如,

  • 第2组:程序员
  • Group5:.NET程序员

在数据库中,组之间没有父子关系。如何创建动态的亲子关系?我有关于这些问题的算法吗?

感谢您的回复。

3 个答案:

答案 0 :(得分:1)

遍历每个项目,填写表child1Parent2 [groups,groups]。一开始它充满了真实。对于每个组检查条件:设置g1并且未设置g2。如果为true,则将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)

对未来的一条建议:如果你想找到一些信息,请考虑如何宣布这些信息,它有什么结构。你会对这个问题有更多的了解。

答案 1 :(得分:0)

如果您有组和父组的邻接列表,则需要将其存储在数据库中。如果不将它存储在某个地方,就无法动态地找到它。如果精度足够好,你可以使用轮盘赌。

答案 2 :(得分:0)

您可以运行关联规则挖掘过程,并在关联规则足够频繁时将其视为父子关系。

即。当你发现A组的成员资格意味着99%支持B组的成员资格时,那么B就是A的超级组。

请注意,您甚至不需要完整的APRIORI,只需要保存重新计算和修剪结果的技巧。基本上,您可以立即计算条件可能性(当最小支持足够时),并保留满足阈值的那些。