在我试图解决的大多数树或图形问题中,输入通常是node1-> leafs或node1->相邻节点格式的整个树或图结构。
是否有任何常用结构列表可以将这些数据保存在内存中,以后可以帮助实现预期的算法。例如:
Say i have a list of graph nodes like:
1 3 8 2 4.....# 1 is connected to 3 8 2 4...nodes
2 5 1 3... # 2 is connected to 5 1 3...nodes
3 1 2... #likewise
. ...
8 ......
所以,如果我想使用随机收缩算法(我将不得不收缩边缘,说我合约1和8..i使用多链接列表结构,其中邻接列表上的每个节点指向其对应第一行中的行ie8指向第8个节点。
现在问题是,为什么我选择这种结构来存储数据?
签约实际上是1和8个单一实体,
所以我从1开始读取1的邻接列表并转到3rds邻接列表更改1到8和下一个8的行使1到8现在转到2的列表更改1到8 ....最后我追加1s列表到8并删除重复项。是的,所以最后在收缩1和8之后从图中删除1
我想知道所有通常或很少使用的存储树木和图形的结构,如果与algos相关联的算法也是如此?谢谢
答案 0 :(得分:1)
存储图表的一种常用方法是使用n
- by - n
矩阵,其中n
是图表中的顶点数。如果您只是想存储邻接,如果X
是矩阵,那么X[i][j] = 1
如果顶点j
可以从顶点i
到达,则0
。您也可以这种方式存储边缘成本或边缘容量。缺点当然是使用的内存量O(n^2)
而不是O(n+m)
,其中m
是边数,但优势是O(1)
查找每个可能的顶点对