最近我学会了按结构实现树,例如
struct Node{
Node *parent;
vector<Node*> child;
Node(void):parent(nullptr){}
}
我认为这是实现树的一种非常直接的方式, 并且在结构中包含更多的进程内容也更容易。
然而,我注意到很多人的代码, 他们更喜欢使用数组而不是指针。 我可以理解Binary Tree,因为它也很容易通过数组来实现 ,但为什么在其他更复杂的图表上?
答案 0 :(得分:1)
来自Skiena:2008:ADM:1410219和Cormen:2001:IA:580470比较图的邻接矩阵和邻接列表得出:
(x, y)
,两个节点具有连接边缘,则邻接矩阵的测试速度更快m
节点和n
边缘的图表占用m + n
空间,而邻接矩阵则为n^2
。O(1)
中执行。Θ(m + n)
和矩阵Θ(n^2)
如果图形有很多顶点但边缘很少,则邻接矩阵消耗过多的内存。
因此,通常邻接列表表现更好。