图的存储方式

  对于一个有 V V V个点, E E E条边的图:

存储方法add_edge(v,w)get_adj(v)遍历has_edge(v,w)空间复杂度
邻接矩阵 Θ ( 1 ) \Theta(1) Θ(1) Θ ( V ) \Theta(V) Θ(V) Θ ( V 2 ) \Theta(V^2) Θ(V2) Θ ( 1 ) \Theta(1) Θ(1) Θ ( V 2 ) \Theta(V^2) Θ(V2)
边的集合 Θ ( 1 ) \Theta(1) Θ(1) Θ ( E ) \Theta(E) Θ(E) Θ ( E ) \Theta(E) Θ(E) Θ ( E ) \Theta(E) Θ(E) Θ ( E ) \Theta(E) Θ(E)
邻接表 Θ ( 1 ) \Theta(1) Θ(1) Θ ( d e g r e e ( v ) ) \Theta(degree(v)) Θ(degree(v)) Θ ( V + E ) \Theta(V+E) Θ(V+E) Θ ( d e g r e e ( v ) ) \Theta(degree(v)) Θ(degree(v)) Θ ( V + E ) \Theta(V+E) Θ(V+E)

  在实践中,大部分图是稀疏的(节点的度不大,边较少),并且get_adj(v)使用频率高,故邻接表的使用时最为广泛的。图类定义如下:

class Graph(object):
    def __init__(self, points_nums, is_directed):
        self.__points_nums = points_nums
        self.__adj = [[] for _ in range(points_nums)]
        self.__directed = is_directed

    def add_edge(self, point1, point2):
        self.__adj[point1].append(point2)
        self.__in_degree[point2] += 1
        if not self.__directed:
            self.__adj[point2].append(point1)

    def get_adj(self, point):
        return self.__adj[point]

    def get_point_nums(self):
        return self.__points_nums
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值