1.数据结构
谈到数据结构,我觉得创造一种数据结构的初衷,应该是通过该数据结构完成对现实问题的建模和处理,最后当然能用数学或者计算机对这些问题进行处理和分析。 其中一种建模的过程就是使用数据结构去表示问题,而处理就是相应的算法。
比如你要算卦,那么大师需要知道你的生辰年月。 那么它可能需要一个数据结构(一个点)去保存这个生辰年月,并且能够在它复杂的算法中随时调用到这个数据。假如大师需要给你解签的话,那么大师的大脑数据库里面肯定需要有某某签的相应信息,这时候很可能就需要一个线性表去保存和查找解签的信息。
但是大师并不是世界上拥有最复杂数据结构的人,你的三姑六大妈才拥有最复杂的数据结构。想想每年过年的时候,她们能够给你如数家珍般地数出你三表哥的大姨夫又和姑丈的儿子发生了矛盾之类的。 这种复杂的关系,只能用一种更高级的数据结构去表示它,而且还要保证能够去操纵和运算,这时候,你就需要图这种东西了。
1.1 我们遇到过什么样的数据结构?
1.1.1 点(Vertex) 就是单独的一个数据表示。可以用来表示一个人的年龄,一只猪的重量...
1.1.2 点的最简单集合是线性表(Linear structure),线性表就是一堆点首尾相接在一块的集合,形象一点看就是一直线。直线上的每个节点只和他前后一个节点有关联。(关联度非常低了)。堆栈,队列,数组都是线性表的一些特殊形式。
1.1.3 树(Tree) 线性表的一种集合就是树(具体解释看下图)。 一棵树可以看成由好几个线性表组成的集合。
1.1.4 图(Tree) 就是点,线,树的集合。在图中,任意两个点和点之间可以存在或者不存在关联,自由度很大。
1.2 一些描述图的习惯与分类
图的表示为G(V,E),G为表示图的最大集合,V为表示图中所有点的集合,E为边集,表示G中所有的边。所以理解图是什么,也可以理解为 给了对已给出节点的所有关联的集合。G的本身是很抽象的数据结构,但是本质是为了表示 点与点之间复杂关联的数据结构,用途取决于如何把点和这些关联映射到现有的生活中,例如点可以映射为人,边映射为人和人之间是否认识, 这就是