图
图: 如何存储微博、微信等这些社交网络的好友关系? 为什么产生? 特点? 使用场景? 树中的元素称为节点,图中的元素称为顶点。顶点之间的关系叫作边。顶点相连接的边的条数叫作定点的度。 微信为例: 一个用户就是一个顶点,好友关系就是边,一个用户总的好友个数就是度 微博:可以单向关注,其实现为有向图 边上增加方向的概念就是有向图,此时无向图中的度分为 入度 和 出度。 入度:多少条边指向这个定点 出度:多少条边是从这个定点指出 qq中的亲密度,经常交流,亲密度高。其实现为:带权图. 在带权图中,每条边都有一个权重(weight),我们可以通过这个权重来表示 QQ 好友间的亲密度 图的存储 邻接矩阵 无向图:顶点 i 与顶点 j 之间有边,我们就将 A[i][j] 和 A[j][i] 标记为 1; 有向图:如果顶点i到顶点j之间,有一条箭头从顶点i指向顶点j的边,那将A[i][j]标记为1;同理,如果有一条箭头从顶点j指向顶点i的边,我们就将A[j][i]标记为1。 带权图:数组中就存储相应的权重 实例如图: 缺点:浪费空间。 例如无向图,一条边存储一个就可以,即可以利用对角线划分一半出来即可 如稀疏图,几亿个定点,但是每个用户仅有数百个用户 优点:简单直观,邻接矩阵方便计算 邻接表 如图: 类似散列表。图中画的是一个有向图的邻接表存储方式,每个顶点对应的链表里面,存储的是指向的顶点。