我如何找到格雷姆林节点的中间性中心性?

时间:2019-01-08 16:01:26

标签: graph gremlin tinkerpop

节点V的中间性定义为 所有成对的节点之间最短路径的比例 通过V。

我查看了tinkerpop食谱文档,但我认为它没有帮助/不起作用。即返回

......1> 

当我运行查询时。

运行的查询是:

g.V().as("v").repeat(both().simplePath().as("v")).emit().
           filter(project("x","y","z").by(select(first, "v")).
                                       by(select(last, "v")).
                              by(select(all,"v").count(local)).as("triple").
                  coalesce(select("x","y").as("a").
                             select("triples").unfold().as("t").
                             select("x","y").where(eq("a")).
                             select("t").
                           store("triples")). 
                  select("z").as("length").
                  select("triple").select("z").where(eq("length"))).
           select(all, "v").unfold().
           groupCount().next()

我正在使用劳伦斯提供的航空路线数据,如本指南http://kelvinlawrence.net/book/Gremlin-Graph-Guide.pdf中所述。它不包含中心度度量。.我从下面开始,它将a)不给出任何循环路径,并且b)generate()调制器“输出”所有遍历的顶点

g.V().repeat(both().simplePath()).emit() 

我如何从这里开始计算节点之间的重心/或者在其他地方开始。

1 个答案:

答案 0 :(得分:1)

您实际上是从Gremlin食谱站点修改的查询,store("triples")Given a binary tree : [1,2,2,3,3,null,null,4,4]. Determine if it's a balanced tree or not. And I had the solution: public boolean isBalanced(TreeNode root) { int height = heightCalculation(root); if(height > 1) return false; else return true; } public int heightCalculation(TreeNode root){ if(root == null) return 0; int left_height = Integer.MIN_VALUE; int right_height = Integer.MIN_VALUE; left_height = heightCalculation(root.left); right_height =heightCalculation(root.right); return Math.abs(left_height - right_height); } The tree structure looks like: 1 / \ 2 2 / \ 3 3 / \ 4 4 之间应该有逗号,而不是句点。但是,此查询可能对航路图不起作用,因为它具有太多路径。如配方下方所述,该查询仅适用于非常小的(子)图形。即使您有足够的内存来进行计算,我认为您也必须等待一段时间(几小时?),直到看到结果。

IMO,对于这种大小的图形,应考虑使用不同的中心度算法。最后,算法之间的结果差别不会太大,通常,图形越大,您对每个顶点的准确中心度值的关注就越少。例如,经典的PageRank算法可以在较大的图形上很好地运行。