Python数据结构与算法分析 第七章 图

术语表

顶点Vertex (也称“节点Node" )是图的基本组成部分,顶点具有名称标识Key, 也可以携带数据项 payload

边 Edge (the "SMArc" ) 作为2个顶点之间关系的表示,边连接两个顶点; 边可以是无向或者有向的,相应的图称作“无向图”和“有向图”

权重Weight 为了表达从一个顶点到 另一个顶点的“代价” 可以给边赋权;例如公交网络中两个站点之间的 “距离”、“通行时间”和“票价”都可以作为 ” 权重。

 

 图的实现:

邻接矩阵adjacency matrix

邻接表 adjacency list

两种方法各有优劣,需要在不同应用中加以选择

邻接矩阵:

邻接列表:

class Vertex:
    def __init__(self,num):
        self.id = num
        self.connectedTo = {}
        self.color = 'white'
        self.dist = sys.maxsize
        self.pred = None
        self.disc = 0
        self.fin = 0

    # def __lt__(self,o):
    #     return self.id < o.id
    
    def addNeighbor(self,nbr,weight=0):
        self.connectedTo[nbr] = weight
class Graph:
    def __init__(self):
        self.vertices = {}
        self.numVertices = 0
        
    def addVertex(self,key):#添加顶点
        self.numVertices = self.numVertices + 1
        newVertex = Vertex(key)
        self.vertices[key] = newVertex
        return newVertex
    
    def getVertex(self,n):#通过key查找顶点
        if n in self.vertices:
            return self.vertices[n]
        else:
            return None

采用先验的知识来改进算法性能的做法, 称作为启发式规则heuristic 

图的应用:最短路径

【北京大学】数据结构与算法Python版(完整版)_哔哩哔哩_bilibili

最小生成树

  • 广度优先搜索算法BFS,解决无权图的最短路径 问题(词梯问题); 
  • 带权图最短路径的Dijkstra算法; 
  • 图的深度优先搜索算法DFS(骑士周游问题); 
  • 用于简化图的强连通分支算法; 
  • 用于关联任务排序的拓扑排序算法; 
  • 用于广播消息的最小生成树算法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值