Simrank实施

时间:2017-05-25 15:34:10

标签: python graph data-science

我试图从头开始实现Simrank而不使用networkx。我是图形和图论的新手,我无法完全理解如何实际计算图中节点的In-neighbors。任何人都可以帮我解释这个概念以及如何计算它?

2 个答案:

答案 0 :(得分:1)

要获取给定节点的邻居,首先必须决定如何存储图形。存储图形的最着名方法是矩阵和字典。

假设您有图表(A) - >(B) - >(C)。在这种情况下,节点(B)的邻居是(A)。

如何存储此图表并获取有关邻居的信息?

作为字典:

graph = {'A': ['B'],
         'B': ['C']}

for k, values in graph.items():
        if 'B' in v:
            print(k)

作为一个矩阵:

graph = [[0, 1, 0],
         [0, 0, 1],
         [0, 0, 0]]

以下是您阅读此矩阵的方法。 0表示没有边缘,1表示有边缘。如果你看第一行,你会在中间看到1。这意味着从A(因为它是第一行)到B(因为“1”在第二列中)存在边缘。相反,如果你看左上角0,则表示从A到A没有边缘。或者看右上角0,这意味着从A到C没有边缘。

因此,要获得通过B边连接的所有节点,必须从第二列中选择1。

注意:上面的示例描述了定向图表。还有无向图表。在无向情况下,您的矩阵将是对称的,您的字典不仅包含(A) - >(B),还包含(B) - >(A)。

答案 1 :(得分:0)

在邻居中仅存在有向图。邻居是指向节点的节点,然后第一节点是第二节点的邻居。 第二个节点是第一个节点的邻居。 希望这会有所帮助。