列出功能需求->翻译成逻辑算法->抽象出数据结构->确定物理存储结构 后面的不会脱离前面的独立存在,只存在于工作流的运用中,所以不能把它们独立地看。
问题引入
在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。如何存储微博、微信等这些社交网络的好友关系吗?
图的概念
图的存储方法
解答开篇
以微博为例子(数据结构是为算法服务的,所以具体选择哪种存储方法,与期望支持的操作有关系)。假设支持以下几种操作:
判断用户 A 是否关注了用户 B;判断用户 A 是否是用户 B 的粉丝;用户 A 关注用户 B;用户 A 取消关注用户 B;根据用户名称的首字母排序,分页获取用户的粉丝列表;根据用户名称的首字母排序,分页获取用户的关注列表。
因为社交网络是一张稀疏图,使用邻接矩阵存储比较浪费存储空间。所以采用邻接表来存储。但是仅仅用一个邻接表来存储是不够的。当我们去查询某个用户被哪些用户关注了,也即用户的粉丝列表,是非常困难的,因此再加上一个逆邻接表。