Z Notation: Representation of a 2D array
我是Z符号的完整初学者。 我需要用Z表示图类型。我的想法是使用关联矩阵,这样我就可以轻松地在节点和边缘之间自由移动。
唯一的问题是,我不知道如何在Z中指定入射矩阵。我认为我需要一个2D数组,但是从可用于Z表示法的参考资料来看,数组通常使用seq表示。 还有另一种指定多维数组的方法吗?
提前致谢。
我认为节点之间的关系可以更好地表示入射矩阵。 假设我们有一个类型节点:
1 | [node] |
然后可以将图建模为节点之间的关系:
1 2 | graph : node \ el node |
这将是有向图,因为图中可能存在边n1-> n2,但不存在n2-> n1。 如果您需要无向图,则可以添加其他限制:
1 | graph\\inv = graph |
(图的逆与图相同,即如果图中n1-> n2,则n2-> n1也必须在图中。)
如果您确实想将入射矩阵建模为多维数组,则可以定义一个从数组中的位置映射到整数的函数,例如:
1 | matrix: (node \\cross node) \\fun {0,1} |
两种表示之间的关系可以表示为:
1 | \\forall n1,n2:node @ (n1,n2)\\in graph \\iff graph( (n1,n2) ) = 1 |