数据结构回顾与总结 图(1)
来源:互联网 发布:抓绒衣里面穿什么 知乎 编辑:程序博客网 时间:2024/06/08 03:10
学图论相关的知识的时候真的是有点焦头烂额,用python做题还老是超时,遂返回来总结一波,争取更多的进步。
说到图,其实图分类很清楚,就是有权无权,有向无向,单源多源。难点集中在图的遍历,以及延伸出来的像最短路径问题以及拓扑和最小生成树等等问题。
从基础开始的话,先回顾图的表示。
图的表示大致分成两种,也就是邻接矩阵和邻接表。前者多适用于稠密图,后者适用于稀疏图。当然这都是我第一次学的一些见解,也许以后还会遇到很多情况。
这里主要回顾邻接矩阵。图表示了多个点之间的连通关系,假设有k个点,对所有点从0-i逐个编号,假设这个图是一个有向图,那么极限情况下所有点之间都有来回的连通关系,比如x-y,以及y-x,其中x和y取任意值。那么就很容易想到用一个大小为i*i的二维矩阵来存储点之间的连通关系。比方说有3个点,编号分别为0,1,2。0和1相连,那么对于无权图来说,就相当于邻接矩阵的第一行第二列的值为1,如果不存在相连关系则可以假设为正无穷。
而对于无向图,则可以省略接近一半的空间,只需要x-y或者叫y-x其中一个就可以将无向图完全表示。按照这个思路,假设矩阵大小为n*n,我们把这个矩阵的对角线以上(以下也行)的部分挖掉,那么剩余元素的个数为
(n*n-n)/2+n, 也就等于(n*n+n)/2=n*(n+1)/2。但是这个时候本质上还没有将这个二阶矩阵降维,如果想要降维,需要考虑一个问题:在一维数组里点的位置怎样安排。或者说我们怎样通过一维数组访问自己想访问的点?其实有一个方法,在二阶矩阵中每个点都有下标ij,i表示行,j表示列这个点在一维数组中的位置就是min(i,j)+max(i,j)*(max(i,j)+1)/2,这样可以说是建立了一个二维数组位置与一维数组位置之间的一个映射。
图的存储方式常用的大概就是这样,有时不但有权,权还有好几个,比如说去某个城市不但有耗时,还有过路过桥费,具体按照哪个权来处理还需要按照题目要求走。
- 数据结构回顾与总结 图(1)
- 数据结构题回顾与总结 (1) pat pop sequence
- 面试回顾与总结1
- 数据结构回顾与总结 图(2)两种基本的遍历方式
- 数据结构回顾与总结 图(3)Floyd算法(多源最短路问题)
- 数据结构习题回顾与总结 (2) List Leaves
- 数据结构回顾和总结(树的各种遍历方法)(1)
- 《数据结构(C语言版)》严蔚敏第4版读书总结与数据结构入门回顾
- 2015回顾与总结
- Hibernate-回顾与总结
- Redis回顾与总结
- 2016回顾与总结
- JavaSE 回顾与总结
- 数据结构系统回顾与总结(3)(判断是否为同一棵二叉搜索树)
- 数据结构(十七)赫夫曼树 树总结回顾
- 2012年回顾与总结
- cmake用法回顾与总结
- Latex写作回顾与总结
- Android多任务切换效果
- HBase源码系列(二)Client如何找到正确的Region Server
- CentOS编译OpenJDK
- LightOJ 1274 Beating the Dataset
- Ubuntu 16.04下添加新用户
- 数据结构回顾与总结 图(1)
- 11月7日心得
- c语言验证哥德巴赫猜想
- VS2010怎么用Dumpbin来查看DLL导出函数
- ./configure,make,make install的作用
- NotePad 打开文件 出现中文汉字乱码 解决办法
- Java体系结构图
- Nginx proxy_set_header设置Host为$proxy_host,$host与$local_host的区别
- 重建索引的标准