neo4j在无向和未加权的图形中找到预定义的子图

时间:2017-08-31 07:37:15

标签: algorithm graph neo4j cypher

我想在图表中找到所有可能的预定义组合。

这意味着什么:在下图中,我必须回答汤姆克鲁斯参与的电影数量以及所有可能的导演和所有可能的合作演员的数量。

所以让我们说输入就是这个图:

enter image description here

运行算法后,答案是: 汤姆克鲁斯参加了41部电影。 这41部电影由35位不同的导演执导。 在这41部电影中,汤姆克鲁斯有275个不同的合作演员

enter image description here

这个比较简单。我可以用3场比赛做到这一点。首先,我将拍摄所有可能的Cruise电影和他们的计数。接下来,我将对结果和导演中的那些电影之间的链接计数执行匹配,而不是与演员相同。

当有人添加2个或更多已知节点时,我的问题就开始了。例如,假设有人通过图表搜索Tom Cruise和True Romance之间的连接。换句话说,他用汤姆克鲁斯寻找电影,并由真正的浪漫主义导演指导。因此,他添加了一部新的已知电影并将其连接到未知的导演。

现在我们再次运行算法。在这里,我的算法将从汤姆克鲁斯开始,并将进行比赛,并将计算电影和导演,直到它发现导演必须是真正浪漫的导演。现在它必须追溯所有匹配并相应地重新计算它们的计数。 在这个例子中,新输入的答案是:真实浪漫导演是托尼斯科特,一场单场比赛,他还导演了两部电影与汤姆克鲁斯 - “顶枪”和“雷霆日”。有7位演员参与了这些电影。

enter image description here

当存在诸如以下的循环路线时,事情会变得更加复杂:

enter image description here

现在我看不到如何遍历图表。假设我从已知节点开始,但要合并结果,我必须至少通过每个节点3次,因为带有问号的边缘。

他们是一个有效的算法,可以在一个相对较大的图中找到所有可能的答案吗?答案意味着给出图表中的输入以填充未知节点的所有可能选项的计数。

0 个答案:

没有答案