当前位置: 首页 > wzjs >正文

安阳网站建设优化企业网站展示生产的处方药介绍处罚案件

安阳网站建设优化,企业网站展示生产的处方药介绍处罚案件,平面设计免费网站,机关门户网站建设要求Python数据结构高级:图的表示与遍历 一、图的基本概念 1.1 图的定义与分类 图(Graph)是由顶点(Vertex)集合和边(Edge)集合组成的数据结构,形式化表示为 G (V, E) 主要分类&…

Python数据结构高级:图的表示与遍历

一、图的基本概念

1.1 图的定义与分类

图(Graph)是由顶点(Vertex)集合和边(Edge)集合组成的数据结构,形式化表示为 G = (V, E)

主要分类:

  • 无向图 vs 有向图
    # 无向图示例:A-B-C
    # 有向图示例:A→B→C
    
  • 权重图 vs 非权重图
    # 权重图示例:A-(5)-B-(3)-C
    # 非权重图示例:A-B-C
    

1.2 典型应用场景

  • 社交网络:用户为顶点,关注关系为边
  • 交通网络:城市为顶点,路线为带权边
  • 知识图谱:实体为顶点,关系为边
  • 推荐系统:用户-商品交互关系建模

二、图的表示方法

2.1 邻接矩阵

使用二维数组表示顶点间的连接关系

class AdjMatrixGraph:def __init__(self, vertices):self.size = len(vertices)self.vertices = verticesself.matrix = [[0]*self.size for _ in range(self.size)]self.index_map = {v:i for i,v in enumerate(vertices)}def add_edge(self, u, v, weight=1):i = self.index_map[u]j = self.index_map[v]self.matrix[i][j] = weight# 若是无向图需添加反向# self.matrix[j][i] = weight

时间复杂度分析:

  • 查询相邻节点:O(1)
  • 遍历所有边:O(V²)
  • 空间复杂度:O(V²)

2.2 邻接表

使用字典+链表存储连接关系(更节省空间)

from collections import defaultdictclass Graph:def __init__(self):self.adj_list = defaultdict(list)def add_edge(self, u, v, weight=None):self.adj_list[u].append((v, weight))# 若是无向图需添加反向# self.adj_list[v].append((u, weight))

时间复杂度分析:

  • 查询相邻节点:O(1)平均
  • 遍历所有边:O(V+E)
  • 空间复杂度:O(V+E)

三、图的遍历算法

3.1 深度优先搜索(DFS)

def dfs(graph, start):visited = set()stack = [start]while stack:vertex = stack.pop()if vertex not in visited:print(vertex, end=' ')visited.add(vertex)# 逆序压栈保证顺序一致性for neighbor in reversed(graph.adj_list[vertex]):if neighbor[0] not in visited:stack.append(neighbor[0])

应用场景:

  • 拓扑排序
  • 检测环路
  • 寻找连通分量

3.2 广度优先搜索(BFS)

from collections import dequedef bfs(graph, start):visited = set()queue = deque([start])while queue:vertex = queue.popleft()if vertex not in visited:print(vertex, end=' ')visited.add(vertex)for neighbor in graph.adj_list[vertex]:if neighbor[0] not in visited:queue.append(neighbor[0])

应用场景:

  • 最短路径查找(未加权图)
  • 社交网络的好友推荐
  • 网页爬虫的URL遍历

四、完整代码示例

class Graph:def __init__(self):self.adj_list = defaultdict(list)def add_edge(self, u, v, weight=None):self.adj_list[u].append((v, weight))def dfs(self, start):visited = set()self._dfs_recursive(start, visited)def _dfs_recursive(self, vertex, visited):if vertex not in visited:print(vertex, end=' ')visited.add(vertex)for neighbor in self.adj_list[vertex]:self._dfs_recursive(neighbor[0], visited)def bfs(self, start):visited = set()queue = deque([start])while queue:vertex = queue.popleft()if vertex not in visited:print(vertex, end=' ')visited.add(vertex)for neighbor in self.adj_list[vertex]:if neighbor[0] not in visited:queue.append(neighbor[0])# 使用示例
if __name__ == "__main__":g = Graph()g.add_edge('A', 'B')g.add_edge('A', 'C')g.add_edge('B', 'D')g.add_edge('C', 'E')g.add_edge('D', 'E')print("DFS遍历结果:")g.dfs('A')  # 输出:A B D E C print("\nBFS遍历结果:")g.bfs('A')  # 输出:A B C D E 

五、每日挑战:路径存在性判断

def has_path(graph, start, end):visited = set()stack = [start]while stack:current = stack.pop()if current == end:return Trueif current not in visited:visited.add(current)for neighbor in graph.adj_list[current]:if neighbor[0] not in visited:stack.append(neighbor[0])return False# 测试用例
g = Graph()
g.add_edge('A', 'B')
g.add_edge('B', 'C')
g.add_edge('C', 'D')print(has_path(g, 'A', 'D'))  # 输出:True
print(has_path(g, 'D', 'A'))  # 输出:False

算法选择建议:

  • 最短路径问题 → BFS
  • 拓扑排序 → DFS
  • 存在性判断 → 两者均可

六、扩展应用

  1. 加权图的最短路径(Dijkstra算法)
  2. 最小生成树(Prim/Kruskal算法)
  3. 社交网络分析(使用NetworkX库)
  4. 图数据库应用(Neo4j的Python接口)
# Dijkstra算法示例
import heapqdef dijkstra(graph, start):distances = {vertex: float('inf') for vertex in graph}distances[start] = 0heap = [(0, start)]while heap:current_dist, current_vertex = heapq.heappop(heap)if current_dist > distances[current_vertex]:continuefor neighbor, weight in graph[current_vertex]:distance = current_dist + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(heap, (distance, neighbor))return distances

学习建议:

  1. 使用可视化工具(如Graphviz)辅助理解
  2. 在LeetCode上练习相关题目(如207.课程表、133.克隆图)
  3. 阅读NetworkX库源码学习工业级实现
  4. 尝试实现A*算法等高级图算法

掌握图的表示与遍历是理解复杂算法的基础,后续可继续学习强连通分量、最大流等高级主题。


文章转载自:

http://626hqK90.qyqdz.cn
http://1rAPRtkJ.qyqdz.cn
http://qnclW8Wg.qyqdz.cn
http://xkcT377M.qyqdz.cn
http://kvAYP0l3.qyqdz.cn
http://opNAFErs.qyqdz.cn
http://Glb8sZy7.qyqdz.cn
http://YTjvuOYf.qyqdz.cn
http://XhzCHahO.qyqdz.cn
http://riKFiUm1.qyqdz.cn
http://EvCfMgn7.qyqdz.cn
http://mDS82YnD.qyqdz.cn
http://1EbUPJcK.qyqdz.cn
http://gIyngaEq.qyqdz.cn
http://y4nIZEgc.qyqdz.cn
http://ScpYS2ea.qyqdz.cn
http://voYefg6b.qyqdz.cn
http://Vy6PwCW6.qyqdz.cn
http://oi3aCJRw.qyqdz.cn
http://Jf5tRNrt.qyqdz.cn
http://bouygLoL.qyqdz.cn
http://JifWVKGb.qyqdz.cn
http://ncfLUOD7.qyqdz.cn
http://WtIyvN9R.qyqdz.cn
http://uf5x34B5.qyqdz.cn
http://qQNVzkca.qyqdz.cn
http://mmX8Mq8b.qyqdz.cn
http://VNpw1wtK.qyqdz.cn
http://muAVl9gA.qyqdz.cn
http://4EpDBI4z.qyqdz.cn
http://www.dtcms.com/wzjs/778507.html

相关文章:

  • 建立网站如何赚钱大学学校类网站设计
  • 网站域名注册哪家好wordpress仿百度
  • seo网站推广排名手机在线制作表白网站
  • 微商的自己做网站叫什么软件下载长春模板自助建站
  • 金华公司建站模板微信公众号手机怎么登录
  • Kgvid wordpress.org优化是什么意思网络用语
  • 企业网站建站企业要怎么做网站动图
  • 网站策划与建设阶段的推广的目标wordpress重定向规则
  • 网站模板哪里好怎么制作网站教程步骤
  • 怎样与知名网站做友情链接wordpress怎么调用外部主题网页
  • 祁阳县住房和城乡规划建设局网站河北抖音seo系统
  • 做轴承生意的网站网络服务提供者的侵权责任
  • 开发网站需要时间同一域名可以做相同网站吗
  • 建网站流程 知乎南京学做网站
  • 建团购网站WordPress 镜像同步
  • 网页与网站的区别与联系是什么完整的网站建设平台协议书
  • 常州做企业网站海口网络建站模板
  • 赣icp网站建设东莞网站建设方案外包
  • scratch编程网站上海网站备案核验单状态查询
  • 营销推广的目标通常是什么网络网站推广首荐乐云seo
  • asp企业网站源码wordpress网站插件下载
  • 郑州网站建设代理网络运营主要做什么工作
  • 网站域名永久辽宁省交通建设投资集团官方网站
  • 中小企业网站免费设计logo的app
  • 驾校视频网站模板手机电脑同步网站开发
  • 网站怎么去优化青岛房产交易中心官网
  • 公司网站优化方案一级a做爰片迅雷网站
  • 做网站困难嘛wordpress怎么设置语言
  • 厦门市住房和城乡建设局网站搜索引擎推广的优势
  • 如何填写网站建设计划表kangle搭建wordpress