图是最复杂的数据结构,也就是说没有比图更复杂的数据结构了。那么图在现实中有哪些应用呢?图算法用途很广。可以用来解决一些现实中的问题。因为现实生活中,图太多了。比如地铁运行线路就是一张图。利用图算法可以快速地计算乘地铁跨站最少的换乘方案。
但是图算法用得更多的是找出解决问题的最少步骤。
这种算法的思路是,将问题的每个状态,视为图的一个结点。两个状态可以一步转换就画一条线。然后用宽度优先搜索去找出最短的路径,也就是解决问题的最快步骤。解开拼图游戏就是个典型的例子。当然,有些不能用图算法解,比如说3阶魔方。2010年,谷歌用35个CPU年,找出了三阶魔方的最快解法(20步解法)。实际应用中,这样计算就太慢了。
下面讲几个图的12个重要概念:度、入度、出度、自环、平行边、简单图、完全图、汉密尔顿图、汉密尔顿路径、汉密尔顿环、补图、自补图。
图算法与数学的图论关系密切。迄今为止,图论或者图算法还有未解决的难题,比如说旅行商问题,四色地图问题。四色地图问题被人用穷举法,通过1200小时的计算机运算证明了,但是数学家不认可计算机科学家的这个证明,他们需要一种优雅、简洁的证明。而旅行商问题属于NP完全问题,是千禧年数学难题之一,被认为是人类智商的天花板。
1 度、入度、出度
度degree,一个点被边用作端点endpoint多少次,这个次数就是度数。我们知道一条边是有两个端点起点和终点的。入度In degree,进入某个点的边的数量。出度Out degree,从某个点出发的边的数量。入度在拓扑排序中特别重要。
2 自环Self loop
就是自己连接自己
3 平行边Parallel edges
4 简单图 Simple graph
没有自环和平行边
5 完全图Complete graph
每对节点都有边连接
6 团clique
完全子图叫团
7 汉密尔顿
经过图中所有点且点不重复的路径叫做汉密尔顿路径。
经过图中所有点且点不重复的回路叫做汉密尔顿回路。
存在汉密尔顿回路的图叫做汉密尔顿图。
G1没有汉密尔顿路径
G2有汉密尔顿路径,但是没有汉密尔顿回路
G3有汉密尔顿回路,所以是汉密尔顿图
8 补图和自补图
补图就是完全图的边集减去现有的图的边集。
Self-complementary自补图,就是与补图同态(isomorphic)的图。
上面就是自补图的例子。