我试图从头开始实现Simrank而不使用networkx。我是图形和图论的新手,我无法完全理解如何实际计算图中节点的In-neighbors。任何人都可以帮我解释这个概念以及如何计算它?
答案 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)
在邻居中仅存在有向图。邻居是指向节点的节点,然后第一节点是第二节点的邻居。 第二个节点是第一个节点的邻居。 希望这会有所帮助。