Python数据结构与算法笔记(6)

problem-solving-with-algorithms-and-data-structure-using-python 中文版

7 图和图的算法

顶点 边 权重 路径 循环 

没有循环的图形称为非循环图

没有循环的有向图称为有向无环图或DAG。

图抽象数据类型如下:

  • graph()创建一个新的空图
  • addVerter(vert)向图中添加一个顶点实例
  • addEdge(fromVert,toVert)向链接两个顶点的图加一个新的有向边
  • addEdge(fromVert,toVert,weight)向连接两个顶点的图添加一个新的加权的有向边
  • getVertex(vertKey)在图中找到名为vertKey的顶点
  • getVertices()返回图中所有顶点的列表
  • in返回True 如果vertex in graph,否则返回False

实现图的两种方式:邻接矩阵和邻接表

邻接矩阵:

7.4.é»æ¥ç©éµ.figure3

邻接矩阵优点是简单,对于小图,很容易看到哪些节点连接到其他节点。但是大多数单元格是空的,即稀疏。

邻接表:是实现稀疏连接图更空间高效的方法。在邻接表实现中,我们保存Graph对象中所有顶点的主列表,然后图中每个顶点对象维护连接到它的其它顶点的列表。

7.5.é»æ¥è¡¨.figure4

邻接表实现的优点是允许我们紧凑地表示稀疏图。邻接表还允许我们容易找到直接连接到特定顶点的所有链接。

广度优先搜索BFS

深度优先搜索DFS

拓扑排序是深度优先搜索的简单但有用的改造。

拓扑排序采用有向无环图,并且产生所有其顶点的线性排序,使得如果图 G 包含边(v,w),则顶点 v 在排序中位于顶点 w 之前。定向非循环图在许多应用中使用以指示事件的优先级。

可以帮助找到图中高度互连的顶点的集群的一种图算法被称为强连通分量算法(SCC)。我们正式定义图 G 的强连通分量 C 作为顶点 C⊂V 的最大子集,使得对于每对顶点 v,w∈C,我们具有从 v 到 w 的路径和从 w 到 v 的路径。

7.18.强è¿éåé.figure27

一旦确定了强连通分量,我们就可以通过将一个强连通分量中的所有顶点组合成一个较大的顶点来显示该图的简化视图。

7.18.强è¿éåé.figure31

最短路径的算法:“Dijkstra算法”

Prim生成树算法

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据结构与算法分析是一个专栏,主要记录了如何使用Python学习数据结构与算法笔记和练习题。这个专栏包括了Python的内置数据结构和扩展数据结构Python给我们提供了很多现成的数据结构类型,如列表、元组、字典等,这些是系统预先定义好的数据结构。而还有一些数据组织方式需要我们自己去定义和实现,比如栈、队列等,这些被称为Python的扩展数据结构。通过学习这些数据结构和算法分析,可以更好地理解和应用Python编程语言。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Python数据结构与算法】(一)基本概念和算法分析](https://blog.csdn.net/weixin_45052363/article/details/125099029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python 数据结构与算法详解](https://blog.csdn.net/qq_35029061/article/details/127561227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值