问答详情

个人中心

ACM不用邻接表只使用邻接矩阵可以吗?

2015-06-23 浏览 4756 关注 1
ACM

如题,邻接表表示不太会表示,感觉不如邻接矩阵那么明白。如果单纯从过题的角度来说,只用邻接矩阵可以吗?

问答发起人 黎旋 黎旋 黑龙江大学

全部回答(6)

陈方圆
陈方圆
2015-06-25 华中师范大学

楼主的数学结构没有学好,这个问题显然是不可以的。

   2015-06-25 未知
33
philippica
philippica
2015-06-24 苏州大学文正学院

一般稠密图适合邻接矩阵,稀疏图适合邻接表,此外邻接矩阵从一个点找所有相邻点是O(V)的!这会让很多算法变得很慢!

此外,一个有200000点的图,如何用邻接矩阵优雅的存下来?开这么大的矩阵编译器直接报错.


   2015-06-24 未知
32
  • 胡海鑫胡海鑫 楼上说的很对,个人觉得出题者的实力还不是很足。呵呵  2015-06-25 未知
  • 皓然皓然   2015-06-25 未知
  • 琴子琴子 楼上回答很全面  2015-06-25 未知
  • 高飞高飞   2015-06-25 未知
王仑武
王仑武
2015-06-25 哈尔滨工业大学

不可以,

   2015-06-25 未知
32
廖俊杰
廖俊杰
2015-06-25 西安电子科技大学

邻接矩阵的优点:能够O(1)判断两个点是否有边相连。缺点:空间复杂度是O(V^2)。

邻接表的优点:空间复杂度比较小,或者说是用最少的空间复杂度了,有多少条边就要多少,O(E).

缺点是,想判断两个点是否有边相连,必须找到与这个点相连的顶点都枚举一遍。

在不同算法里面会有不同的用处。邻接矩阵最强大的用处就是任意两点的最短路的floyd的算法,因为算法本身复杂度是O(V^3),因此空间复杂度O(V^2)显得完全无压力,然而该算法需要判断两点是否有边相连,因此邻接矩阵的优势就体现了。

另外一个用处就是最小生成树的prim算法,由于prim算法的核心就是通过更新每一个点与当前的树的距离来实现,在更新时需要频繁地获取两点之间的距离,因此邻接矩阵的用途就到了。从这个角度上看,prim算法比较适合稠密图。


邻接表是适合稀疏图,在单源最短路的dijkstra算法中,由于需要的遍历一个点的所有边,因此邻接表发挥了它的功效,另外如果使用优先队列进行优化,就可以在O(ElogV)的复杂度下解决单源最短路的问题。面对十万的规模,显然邻接矩阵是无能为力的。

另外相对应上面的prim算法,另一个经典的最小生成树的算法是kruskal算法,核心的关键在于从小到大枚举每一条边,然后利用并查集来判断这条边是否连接两个树,然后进行合并。由于涉及枚举边的操作,因此邻接表再一次发挥了它的功效!同时也体现了kruskal算法是在稀疏图中更适合。


总的来说,邻接矩阵和邻接表都必须掌握。哪个都不能放弃。

   2015-06-25 未知
32
唐健云
唐健云
2015-06-25 西南民族大学

不可以,因为邻接矩阵的空间复杂度是O(V^2),大部分图论题目无法使用邻接矩阵存图,少部分顶点数较少的题目则可以使用邻接矩阵存图。对于顶点数10w+的图直接就无法使用邻接矩阵了,这是内存问题。

   2015-06-25 未知
29
- 查看更多和回答问题请下载赛氪APP -
赛乐云AI 证书查询
取消 确认

同学~下载赛氪APP就可以进群咯~
先不聊 去下载