最小生成树
简介
所谓最小生成树(minimum spanning tree),就是一个无向图的极小连通子图,包含原图中的所有节点,且所有边的权值之和最小。因其是一棵树,所以得名最小生成树。
听不懂?那我们来炒一颗栗子。 对于这个无向图:
下图就是它的最小生成树,边权和为\(2 + 2 + 3 = 7\):
不过对于一部分图,比如上面炒的栗子,最小生成树有多种解,但是边权和是不变的:

所谓最小生成树(minimum spanning tree),就是一个无向图的极小连通子图,包含原图中的所有节点,且所有边的权值之和最小。因其是一棵树,所以得名最小生成树。
听不懂?那我们来炒一颗栗子。 对于这个无向图:
下图就是它的最小生成树,边权和为\(2 + 2 + 3 = 7\):
不过对于一部分图,比如上面炒的栗子,最小生成树有多种解,但是边权和是不变的:

咕了这么久终于更新了
拓扑排序(topological
sort),是图论中的一种算法,简单点说就是:
对一个有向无环图(DAG)的节点进行线性排序,使得从点\(u\)到点\(v\)的每个有向边\(uv\),\(u\)都在\(v\)之前。
当且仅当图没有环,即有向无环图时,该图存在拓扑排序。因此,拓扑排序可以用于判断图是否存在环。
拓扑排序可以形象地解释为:在某校中,每门课可能有若干门先修课,如果要修读某一门课,必须要先修读此课程所要求的所有先修课。假设一个学生同时只能修读一门课程,那么,他修完所有课程的顺序是一个拓扑序。
举个栗子:
对于下图,拓扑排序的结果是\(1 - 6 - 3 - 4 - 2
- 5\)。
当然,拓扑排序的结果肯定是不唯一的,比如图片中\(6 - 1 - 4 - 3 - 5 -
2\)的顺序显然也可以。
链表(linked list)是一种线性数据结构,最大的特点就是存储不连续,可以用于实现邻接表等。
链表分为单链表、双向链表和循环链表三种,如图所示:

可以看出,单链表中每个节点都有一个next指针,指向后一个节点,而最后一个节点的next为空指针;
双向链表的每个节点还有一个prev指针,指向前一个节点;
循环链表则是在上面的基础上让最后一个节点的next指向头节点,如果是双向循环链表还会让头节点的prev指针指向最后一个节点。
堆(heap)是一种树型数据结构,具有以下特点:
根节点最大的堆称为大根堆,相反则称之为小根堆。
堆可以用于排序。
例如图中就是一个大根堆: 
什么?\(1 + 1 =
2\)需要证明?这不是公理吗?(并非指哥德巴赫猜想)
可能很多人都是这样想的。也许在以前,\(1 + 1 =
2\)就是一个定义,是无法被证明的存在。但是现在,已经有了一套严密的数学系统,可以证明\(1 + 1 = 2\)。