array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 图论的基本知识 - 爱码网

一、柯尼斯堡七桥问题

图论的起源

  在柯尼斯堡(今俄罗斯加里宁格勒)有一条河流,普列戈利亚河。河与陆地有七座桥相连。旅客进行游玩的时候,怎么才能走完所有的桥,并且一个桥只走一次?

图论的基本知识

1735年,欧拉指出这是一个无解的问题。将桥视为线,将陆地视为点,欧拉将这个实际问题抽象成点与线的组合问题,因此问题变成从一点出发,在所有线直走一次的前提下,怎么能经过所有的线,然后回到该点?这个问题后来被欧拉归为一笔画问题,即从一点出发,用一个笔画就画出该完整的图。

图论的基本知识

一些定义。

  • 连有奇数条线的顶点称为奇顶点
  • 连有偶数条线的顶点称为偶顶点
  • 给定一个图,如果任意一个顶点,总有路径到达图中任意其他顶点,则这个图为连通图
  • 能够通过一笔画遍历完成的图也叫做欧拉图,遍历的路径叫做欧拉路径,如果路径闭合则称为欧拉回路

若从某一点出发能再回到该点,这一点的边数必须是偶数(有出有回)。而柯尼斯堡七桥问题中的奇数顶点有4个,因此从任意一点出发,不存在走一步画能够走回该点的方法。因此柯尼斯堡七桥问题也无解。

 

一笔画定理

  • 连通的无向图G有欧拉路径的充要条件是:G中奇顶点的数目等于0或2
  • 连通的无向图G是欧拉环(两个相连的环为一个环)的充要条件是:G中每个顶点的度数为偶数

证明:

  • 充分性:如果一个图为欧拉环,那么每个顶点的度都为2(有进有出),欧拉环也是欧拉图。如果一个欧拉图有奇顶点,那么奇顶点的个数为2(起点和终点),其他情况下无法每个边只走一次。因此如果一个图为欧拉图,奇顶点数为0(都为偶顶点,欧拉环)或2(一个起点,一个终点)

图论的基本知识

  • 必要性:如果一个连通图都为偶顶点,则原图也就是由一个个环组成,因为相连的环也是一个环,则原图是欧拉环,欧拉环也是欧拉回路;如果一个连通图有两个奇顶点,将这两个奇顶点再用一条边两连则这个图为欧拉环,去掉这个边的话则这个连通图依然可以由一笔画完成。

 一笔画定理也奠定了图论的发展的基础(参考wikipedia

 

二、哈密顿图

  由起点前往指定终点,图中经过其他所有顶点均一次的图。多有顶点的路径称为汉密尔顿路径,若G中通过且仅通过每个顶点一次,则这个圈称为汉密尔顿圈。


图论的基本知识

三、树

  树是不包含回路的连通图。在树中次数为1的节点是叶,次数大于1的节点为分支节点。

表示:

  • T<V,E>
  • (n,m)树的含义为:树中有n个顶点,m条边

 

生成树:

  设G=<V,E> 是一个连通图,T=<V',E'> 是G的一个子图,T是树,且V'=V,E'是E的子集,称T是G的生成树。

 

四、图的遍历

  图的遍历分为深度优先遍历(沿着一条边遍历,从头到尾)和广度优先遍历(一层一层遍历)

 图论的基本知识

五、图的表示方式

1、邻接矩阵

用二维数组表示矩阵。查找时间复杂度O(1),就是比较费内存

 图论的基本知识 

2、邻接表

当图比较稀疏的时候,用邻接表存储比较合适。

图论的基本知识

 

3、边集数组 

常见的边集数组为前向星,以储存边的方式来存储图。构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序),前向星就构造完了。通常用在点的数目太多,或两点之间有多条弧的时候 (参考)。

前向星

图论的基本知识

 

链式前向星

前向星需要对边集数组进行排序。如果将边的数据结构设计成链表形式,则就不用对边集数组进行排序了

1 public class Edge {
2     private int from;
3     private int to;
4     private int weight;
5     private Edge next;
6 }

 

添加边

1  public void add(int f, int t, int w){
2     edges[i].from = f;
3     edges[i].to = t;
4     edges[i].weight = w;
5 
6     edges[i].next = head[f]; // head指向顶点f的第一条边的索引
7 
8     head[f] = i++;
9 }

 

 

 

六、其他

一些概念

  用 V= {v1, v2, ..., vn} 表示点集,E = {e1, e2, ..., en} 表示边集, 则图 可以表示称 G = <V, E>。

  • 多重边,两个节点可以由多条边相连
  • 图的阶,|V|为图的阶,即图中顶点的个数
  • 完全图,任何两个顶点之间都有边相连为完全图

 

 

 

 

相关文章: