我正在用C#生产一些简单的网络绘图软件(为了清楚起见,我将写“网络”而不是“图形”)。网络最终可能在某些顶点/节点之间具有多个有向边。我为此软件设计了如下数据结构:
INetwork
接口的一个实例中表示网络的总体数据,该数据现在仅记录每对节点之间的边数,而忽略方向,其中包含诸如添加和删除节点和边,确定顶点的邻居等例程。那么,我的问题是如何实际实现此IMatrix
接口。可以使实现随图的稀疏度而变化,但是我想知道在内存,处理速度等方面最有效的方法。
更确切地说,我知道我可以为每个组件生成一个邻接矩阵,或者类似地生成一个邻接表,但是哪种类型最适合C#中的这些角色,请记住我的节点具有整数标识符,我希望它们在整个过程中最好保持不变?
Dictionary<int,Dictionary<int,int>>
曾经是实现邻接计数以有效删除条目的好方法吗?给定节点索引,大型二维数组是否可以工作?如果我改为将矩阵存储为1-dim'l数组,例如将其存储为int[]
,并使用一些方法将该矩阵视为2维或3维数组,那么以任何有意义的方式会更好吗? >
当然,每种实现都有优点和缺点,但是我希望最繁琐的例程始终是检查边缘消除是否导致网络断开连接的例程。因此,我希望我使用的任何实现都能快速检查:
在此先感谢您提出任何建议。万一有人怀疑,选择C#是因为我依赖Unity游戏制作引擎进行渲染和(可能是稍后)物理功能。