【问题标题】:How can I determine centrality in a node graph in Prolog?如何确定 Prolog 中节点图中的中心性?
【发布时间】:2020-05-20 17:42:31
【问题描述】:

首先这不是作业,只是想自己学习 Prolog :)

我一直在阅读图论,我认为在我的宠物项目中实现中间中心性会很酷。我有一个城市列表,想确定在所有可能的最短路径中哪一个更常见,但我不确定如何获得所有两个城市组合。

我已经有一条规则可以获取两个城市之间的最短路径。

【问题讨论】:

  • findall/3 或其他所有灵魂谓词都会有所帮助。

标签: prolog


【解决方案1】:

嗯...Betweenness Centrality。根据Betweenness Centrality -- Incremental and Faster 的复杂性是O(mn + n^2 log n) 时间,其中 n = |V|和 m = |E| 用于通用算法,但可以通过增量边缘更新来改进。有趣的。

但您的问题不是关于介数中心性,而是关于笛卡尔积?

要获得城市的笛卡尔积,您必须创建一个目标,将两个member/2 调用链接起来,然后用bagof/3 收集其所有解决方案:

cities_1([berlin,tokyo,kigali,moscow]).
cities_2([beijing,new_delhi,cairo,lisboa]).

cartesian_product(CityPairs) :-
   cities_1(L1), 
   cities_2(L2), 
   bagof([C1,C2],(member(C1,L1),member(C2,L2)),CityPairs).

【讨论】:

  • 嗯我想我明白你在那里做了什么,但我只有一个大城市列表,笛卡尔积只有在你有两个图表时才有用,对吧?
  • @JoãoVaz 好吧,这两个列表可以相同。你想要所有城市对,对吧?
  • 是的!我以为我可以通过所有对来计算它,但是由于 X 的中间中心性是由通过 X 的每条最短路径的总和除以最短路径的总数来确定的,所以我仍然无法获得一个算法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多