gpt4 book ai didi

arangodb - 求 ArangoDB 中节点数的交叉节点?

转载 作者:行者123 更新时间:2023-12-02 22:08:48 28 4
gpt4 key购买 nike

我有许多节点通过其他类型的中间节点连接。如图所示,中间节点可以有多个。我需要找到给定数量的节点的所有中间节点,并按初始节点之间的链接数量对其进行排序。在我的示例中,给定 A、B、C、D,它应该返回节点 F(3 个链接)之后的节点 E(4 个链接)。这可能吗?如果不是,可以使用多个请求来完成吗?我正在考虑使用 SHORTEST_PATH 函数,但似乎它只能找到同一集合中的节点之间的路径? enter image description here

最佳答案

非常好的问题,它挑战了我大脑的 AQL 部分;)好消息:仅使用 GRAPH_COMMON_NEIGHBORS 和一部分数学的一个查询就可以实现这一点。共同邻居将使用组合数学来计算您选择的十字有多少个顶点是连接组件(考虑到 A-E-B 的顺序与 B-E-A 的顺序不同),我们最终得到 a*(a-1)=c许多组合,其中计算了 c。我们使用 p/q 公式来确定 a(集合中给出的连接顶点的数量)。

如果顶点的类型编码在顶点对象的属性中生成的 AQL 如下所示:


对于 x in (
(
让节点= [“节点/A”,“节点/B”,“节点/C”,“节点/D”]
对于 GRAPH_COMMON_NEIGHBORS 中的 n(“myGraph”,节点,节点)
对于 VALUES(n) 中的 f
对于 VALUES(f) 中的 s
对于 s 中的候选人
筛选候选者.type == "cross"
将 Crosses = Candidate._key 收集到计数器中
返回{交叉:交叉,连接:0.5 + SQRT(0.25 + LENGTH(计数器))}
)
)
对 x.connection DESC 进行排序
返回x

如果将交叉放在不同的集合中并按集合名称进行过滤,查询甚至会变得更加高效,我们根本不需要打开任何不是交叉类型的顶点。
对于 x in (
(
让节点= [“节点/A”,“节点/B”,“节点/C”,“节点/D”]
对于 GRAPH_COMMON_NEIGHBORS("myGraph",节点, 节点,
{"vertexCollectionRestriction": "交叉"}, {"vertexCollectionRestriction": "交叉"})
对于 VALUES(n) 中的 f
对于 VALUES(f) 中的 s
对于 s 中的候选人
将 Crosses = Candidate._key 收集到计数器中
返回{交叉:交叉,连接:0.5 + SQRT(0.25 + LENGTH(计数器))}
)
)
对 x.connection DESC 进行排序
返回x

这两个查询都会在您的数据集上产生结果:


[
{
“十字架”:“E”,
“连接”:4
},
{
“十字架”:“F”,
“连接”:3
}
]

关于arangodb - 求 ArangoDB 中节点数的交叉节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com