uni-atlas (zh)

Graph Theory

Simple Graph

在数学上,一个”图”(Graph)G 被严格定义为 (V,E)(V, E)。 其中,V 代表 Vertex Set, 表示顶点的集合,E 代表 Edge Set, 表示边的集合

简单图的定义:

  1. 一条边是基数为 2 的 V 的子集,意味着 no loops ,
    1. 因为每条边必须是 两个 顶点的集合,比如 {v1,v2}\{v_1, v_2\},所以不能有一条边是 {v1}\{v_1\},即一条边不能从一个点出发又回到自己。
  2. 没有”平行边”(Multiple Edges)
    1. 因为 EE 本身是一个”集合”。集合的特性是元素不能重复。
    2. 你不能在 v1v_1v2v_2 之间有 两条{v1,v2}\{v_1, v_2\} 的边 9。

邻接 (Adjacent or Neighbours):两个 Vertices 之间的关系。

  1. 如果两个顶点被一条边连接,它们就是 adjacent

关联 (Incident):Vertix 和 Edge 之间的关系。 2. 一个顶点是某条边的端点,that v is incident with e

Multiple Graph (多重图) allows loops and multiple edges

Directed Graph / Digraph

定义:它改变了”边”的性质。边不再是 {v1,v2}\{v_1, v_2\} 这样的_集合_,而是 (v1,v2)(v_1, v_2) 这样的有序对.

Path Graph

定义nn 个顶点排成一条线

Cycle Graph 环图 - CnC_n
  1. 定义:一个有 nn 个顶点的连通图,每个顶点的度数都是 2。通俗地说,就是 nn 个点手拉手围成一个圈。
  2. Length:一个环的长度指的是这个环由多少条边组成
  3. 顶点数 V|V|nn
  4. 边数 E|E|nn
  5. 笔记:环图非常简单,有多少个点,就有多少条边
    1. C4C_4 (正方形):4 个顶点,4 条边。
    2. C5C_5 (五边形):5 个顶点,5 条边。
Complete Graph 完全图 - KnK_n
  1. 定义:一个有 nn 个顶点的图,其中每一对不同的顶点之间都有一条边
  2. 顶点数 V|V|nn
  3. 边数 E|E|E=(n2)=n(n1)2|E| = \binom{n}{2} = \frac{n(n-1)}{2} 无向完全图边数:comb (n, 2) 有向完全图边数:perm (n, 2)
  4. 笔记
    1. “边数”就是”从 nn 个顶点中选 2 个顶点出来连线”的组合数
    2. K5K_5E=5×(51)2=5×42=10|E| = \frac{5 \times (5-1)}{2} = \frac{5 \times 4}{2} = 10 条边。
    3. 反向计算(已知边,求点):n(n1)=2×En(n-1) = 2 \times |E|
Bipartite Graph

定义:一个图是”二分”的,意思是你可以把它的所有顶点分成两个不相交的集合( 和 V2V_2),使得每一条边都是连接中的一个点和 V2V_2 中的一个点 A multigraph is not bipartite if and only if it contains a cycle of odd length.

Partition (分区):

简单来说,就是把一个大集合(比如所有的顶点 V(G)V(G)拆分成几个小组。这个拆分必须遵守两条铁律:

  1. V1V2=V(G)V_1 \cup V_2 = V(G)一个都不能少。每个顶点都必须被分到 V1V_1V2V_2 组里。
  2. V1V2=V_1 \cap V_2 = \emptyset不能脚踏两只船。一个顶点不能同时属于 V1V_1V2V_2
Complete Bipartite Graph 完全二分图 - Km,nK_{m,n}
  1. 定义:顶点被分成两个集合 (有个点)和 V2V_2(有 nn 个点)。V1V_1 中的每个点都与 V2V_2 中的每个点相连,但 V1V_1 内部和 V2V_2 内部没有连线。
  2. 顶点数 V|V|m+nm + n
  3. 边数 E|E|m×nm \times n
  4. 笔记
    1. 边数就是两个分区大小的乘积
    2. K7,6K_{7,6}V=7+6=13|V| = 7 + 6 = 13 个顶点。E=7×6=42|E| = 7 \times 6 = 42 条边。
Subgraph

定义HHGG 的子图,意思是 HH 是必须通过 删除 的一些顶点或边得到的

  1. HH 的顶点必须是顶点的子集。
  2. HH 的边必须是 GG 边的子集。
Complement

定义G\overline{G}(G的补图)和 GG 拥有完全相同的顶点 TipsG\overline{G} 的边是 GG 缺失的边 G+G=GG + \overline{G} = G', GG' 是完全图

同构 Isomorphic

图的遍历

Walk 随便走,点和边都可以重复 Closed walk:随便走,要走回去 注意:一个 sequence 可以同时是 walk 和 closed walk Trail : Edge 不能重复,不回到起点 Tour: Edge 不能重复,回到起点 Path: Edge 和 Vertex 都不能重复 Cycle: Edge 不能重复,vertex 除了起点不能重复

哈密顿图

一、定义

哈密顿通路(回路)与哈密顿图定义

GG 是一个无向或有向图,若存在一条通路(回路),经过图中每个结点一次且仅一次,则称此通路(回路)为该图的一条哈密顿通路(回路)。具有哈密顿回路的图称为哈密顿图(Hamiltonian graph)。

注意事项

  • 规定:平凡图为哈密顿图;
  • 哈密顿通路是经过图中所有结点的通路中长度最短的通路;
  • 哈密顿回路是经过图中所有结点的回路中长度最短的回路。

二、定理及推论

哈密顿图条件

[!note] 设无向图 是哈密顿图, 是 的任意非空子集,则 p(GV1)V1p(G - V_1) \leq |V_1|,其中 p(GV1)p(G - V_1) 是从 中删除 后所得到图的连通分支数。

  • 此定理是哈密顿图的必要条件,而不是充分条件。
  • 主要应用是判断某些图不是哈密顿图,即:若存在 VV 的某个非空子集 V1V_1 使得 p(GV1)>V1p(G - V_1) > |V_1|,则 GG 不是哈密顿图。
  • 有割点的图一定不是哈密顿图。

推论 1

设无向图 G=V,EG = \langle V, E \rangle 中存在哈密顿通路,则对 VV 的任意非空子集 V1V_1,都有 p(GV1)V1+1p(G - V_1) \leq |V_1| + 1

定理 2

G=V,EG = \langle V, E \rangle 是具有 nn 个结点的简单无向图。如果对任意两个不相邻的结点 u,vVu, v \in V,均有 deg(u)+deg(v)n1deg(u) + deg(v) \geq n - 1,则 GG 中存在哈密顿通路。

[!example] 示例 某地有 5 个风景点,若每个风景点均有 2 条道路与其他点相通。将 5 个风景点看成图中的结点,两风景点间的道路看成是无向图的边,故每个结点的度数均为 2,任意两个不相邻的结点的度数之和等于 4,正好为总结点数减 1。故此图中存在一条哈密顿通路,因此游人可以经过每个风景点恰好一次而游完这 5 处。

定理 3

G=V,EG = \langle V, E \rangle 是具有 nn 个结点的简单无向图。如果对任意两个不相邻的结点 u,vVu, v \in V,均有 deg(u)+deg(v)ndeg(u) + deg(v) \geq n,则 GG 中存在哈密顿回路。

推论 2

G=V,EG = \langle V, E \rangle 是具有 nn 个结点的简单无向图,n3n \geq 3。如果对任意 vVv \in V,均有 deg(v)n2deg(v) \geq \frac{n}{2},则 GG 是哈密顿图。

注意

上述定理及其推论给出的是哈密顿图的充分条件,而不是必要条件。例如六边形图,虽不满足部分度数条件,但仍是哈密顿图 。

Alevel 内容

排序方法

Bubble Sort 冒泡排序

两两比较,互相交换。 极端情况下n个元素在n-1之后完成。

Quicksort 快速排序

选择中间的数当pivot,之后不断选新的pivots,写题的时候要把选的pivots写在前面。

Binary Search 二分法

选择中间的数当pivot,和要找的数比大小,然后reject前面或后面。写题的时候要把选的pivot写在前面。

Packing Algorithms 装箱问题

  1. First-fit: 按照原始列表抓取元素,看能不能装入Bin1,不能就装入Bin2
  2. First-fit decreasing: 将原始列表降序排列,然后再进行First fit
  3. Full Bin: 先将能够装满箱子的进行配对,剩下的元素在进行First-fit
  4. Lower bound for the number of Bins: 所有大小/ 箱子大小,向上取整

Minimum Spanning Tree 最小生成树

Question:在graph里找到总长最短、能把所有点连成一片的tree(所有点之间都能有一条path,且连完的图no cycle

  1. Vertex/ Node 顶点
  2. Edge/ arc
  3. Path: a sequence of continuous edges from one vertex to another such that no vertex
  4. Cycle: a closed path that finishes at the starting vertex
  5. Connected graph: there exists a path between any two vertices
  6. Tree: connected graph with no cycles
  7. Spanning Tree: a subgraph that contains all vertices that is also a tree
  8. Minimum spanning tree: spanning tree with the lowest weight

MST 算法

问题:把所有边都走一遍的最短经历路线


Prim’s Algorithm

从一个vertex开始,连接它最近的vertex,然后找到一个离已经连接的vertices最近的vertex,继续连接,直到结束


Kruskal’s Algorithm

从最短的边开始,从短到长考虑所有边,只要不形成cycle,就继续选,直到所有vertex连成一片。如果会形成cycle的,要在后面写一个reject。

Route Inspection Algorithm 邮递员问题

Repeat vertices:

  1. 中间点是 odd vertex
  2. 起点和中间在同一点,odd vertex
  3. 起点和终点不是同一点,even vertex

Vertices:A,B,C,D

  • AB+CD= (*)
  • AC+BD=
  • AD+BC=
  • AB+CD is the shortest, so repeat …
  • Length of inspection route = total weight of graph + (*)

如果是自由选点,一般会有4个odd vertex,选择起点和终点后,剩下的两个odd vertex之间的距离是这四个里面最短的。


The Travelling Salesman Problem

问题:找出把图上所有顶点都走一遍并回到出发起点的最短巡回路径

classical problem:每个顶点走一遍且只走一遍,并回到起点(不允许重复)

practical problem:每个项点至少走一遍,并回到起点(允许重复)

Upper bound

Minimum Spanning Tree Method

  1. 找到 MST(用 Kruskal 或 Prim 算法)
  2. 初始的 initial upper bound = 2 * MST

Nearest Neighbour Method

从任意一个 vertex 出发,在没有去过的 vertex 中,选择距离目前最近的 vertex,依次走过所有点,最后回到起点。

格式:NNB route = ACBFA

Upper bound:AC+CB+BF+FA=

Lower bound

Residual Minimum Spanning Tree Method

  1. 去掉一个 vertex(remove X)
  2. 找到除了这个点之外的 MST(一般用 Prim 找)
  3. 找到 remove X 的最短的两条边
  4. Lower bound = RMST + cost of reconnection(那两条边)

Critical Path Analysis 包工头问题

Total float time for X = last finish for X - early start for X - duration of X 如果一个 critical activity 的前后只有唯一的一个 activity,那么这个 activity 也是 critical 的


Cascade/Gantt Diagram 甘特图

Critical activity 画在第一行,其余的按照顺序各占一行,从 early start time 开始,画完了行程时间后,在中间到 last finish 这段打上阴影


Schedule Diagram 排班时间表

工人 A 画在第一行,做完所有的 critical activity,就是 critical path。其他的工人按照顺序往下正常排列


Lower bound for number of workers

Lower bound 大于等于所有项目耗时总和除以项目所需的完成时间 找到同一列有最多方格的,方格数就是工人数

During time 14 < t < 15, there are activities F, H, K, L. So at least 4 workers needed.


Dijkstra’s Algorithm

不断更新最短路径


Linear Programming 线性规划

  • 线性规划问题建模

    Objective maximize/minimize P = 3x+5y

    Subject to:

  • 最优化问题求解: P = ax+by 的极值一定在 feasible region 的顶点处取得,这个顶点叫 optimal vertex(最佳顶点)。

    • 方法 1: Object Line Method 画 ax+by=P0 的直线,然后平移
    • 方法 2: Point Testing Method 把 feasible region 的顶点都算出来,然后带入 P=ax+by 方程,求出来最大的就是最大值,最小的就是最小值

    如果问题是要求(x,y)的整数解,就在 feasible region 范围内,找距离 optimal vertex 最近的整数格点

References