这是我使用图表的观点以及我使用它们的经验。
第一的
图是图,不是数组,不是矩阵,不是这些。我为什么这么说?因为如果要在矩阵中表示关系,图的结构可能非常非常大。表示图的矩阵的增长可能呈指数增长。
与对象一起工作
您可以做的一种表示是使用 java 对象。创建两种类型的对象。一个是节点,另一个是边缘。Node 对象应该有一个边数组。像这样:(我不是Java开发人员,所以这里是python)
class Node:
def __init__(self, value): #here is the constructor
self.value = obj #here we are setting the identification of node
self.edges = []
def setEdges(self, edge)
self.edges.append(edge)
#do other stuffs
边缘将是这样的:
class Edge:
def __init__(self, node1, node2, value):
self.value = value
self.nodes = [node1, node2]
node1.setEdges(self) #self is the same as this in java
node2.setEdges(self)
我们现在有什么?我们有一个对象将存储它所拥有的边,而另一个对象只存储一个值并设置他的关系。它可以设置关系。那么如何在主脚本中使用它呢?
主要脚本
这里很容易。看一个例子:
me = Node('Me')
you = Node('You')
那么,如何设置关系呢?
Edge(me, you, 'StackOverflow')
这是通过 StackOverflow 明确我和你的关系的边缘。在这里,您将能够在每个对象中看到它们具有的边缘数组,如下所示:
me.edges
这将返回 Edges 对象的数组,通过这个边,您可以找到您拥有的关系类型以及与谁的关系。
但是……这个边缘怎么不会被gb破坏呢?很简单,两个 Node 类都引用了 Edge 类。如果它们都与边缘类无关,则 gb 将消耗它。
通过 Java 中的参考
我不记得在 Java 中是如何通过 Ref 设置对象的。从大学开始我就没有用 Java 编程。因此,由于 Python byRef 是隐式的,因此要正确检查 java 中的 By Ref。
因此,通过此实现,您可以采用小型数组,并且可以确保您的节点和边沿存在关系。