东莞网站建设营销服务平台泰安房产网签

张小明 2026/1/11 5:35:43
东莞网站建设营销服务平台,泰安房产网签,图片wordpress,纳税服务平台人工智能之数学基础 离散数学 第二章 图论—公式关注公众号 文章目录人工智能之数学基础 离散数学前言一、图的基本定义1. 什么是图#xff1f;2. 图的类型3. 基本术语二、图的表示方法1. 邻接矩阵#xff08;Adjacency Matrix#xff09;2. 邻接表#xff08;Adjacency L…人工智能之数学基础 离散数学第二章 图论—公式关注公众号文章目录人工智能之数学基础 离散数学前言一、图的基本定义1. 什么是图2. 图的类型3. 基本术语二、图的表示方法1. 邻接矩阵Adjacency Matrix2. 邻接表Adjacency List三、图的遍历算法1. 广度优先搜索BFS算法步骤2. 深度优先搜索DFS算法步骤递归版四、最短路径算法1. Dijkstra 算法单源最短路径算法步骤2. Floyd-Warshall 算法全源最短路径核心思想五、Python 代码实现1. 导入库2. 图类实现邻接表3. BFS 实现4. DFS 实现递归5. Dijkstra 算法6. Floyd-Warshall 算法7. 可视化使用 NetworkX8. 与 NetworkX 内置算法对比六、应用场景速览七、总结后续资料关注前言图论是离散数学的核心分支广泛应用于社交网络分析、路径规划、编译器优化、知识图谱、推荐系统等计算机科学领域。本文系统讲解图的基本概念有向图/无向图、权重、度图的表示方法邻接矩阵、邻接表图的遍历算法深度优先搜索 DFS、广度优先搜索 BFS最短路径算法Dijkstra、Floyd-Warshall配套 Python 代码实现从零构建 NetworkX 对比 可视化一、图的基本定义1. 什么是图图 $ G (V, E) $由两个集合组成顶点集Vertices / Nodes$ V {v_1, v_2, \dots, v_n} $边集Edges$E \subseteq V \times V $2. 图的类型类型边的性质示例无向图边无方向$ (u,v) (v,u) $社交好友关系有向图Digraph边有方向$(u,v) \ne (v,u) $网页链接、依赖关系带权图每条边有权重 $ w(u,v) \in \mathbb{R} $路网距离、通信成本简单图无自环、无重边大多数算法假设完全图任意两点间有边$ K_n $)3. 基本术语度Degree无向图节点连接的边数有向图入度in-degree出度out-degree路径Path顶点序列 $ v_1 \to v_2 \to \dots \to v_k $边连续环Cycle起点 终点的路径长度 ≥ 1连通性无向图任意两点间有路径 →连通图有向图任意两点互相可达 →强连通二、图的表示方法1. 邻接矩阵Adjacency Matrix定义$ n \times n $矩阵 $ A $其中A [ i ] [ j ] { 1 若存在边 ( v i , v j ) 0 否则 A[i][j] \begin{cases} 1 \text{若存在边 } (v_i, v_j) \\ 0 \text{否则} \end{cases}A[i][j]{10​若存在边(vi​,vj​)否则​带权图$ A[i][j] w(v_i, v_j) $无边用 $ \infty $ 表示特点空间复杂度$ O(n^2) $查询边$ O(1) $适合稠密图2. 邻接表Adjacency List定义数组 链表或字典每个节点存储其邻居列表Python 表示graph { A: [B, C], B: [A], ... }特点空间复杂度$ O(n m) m $ 为边数遍历邻居$ O(\text{degree}(v)) $适合稀疏图✅选择建议节点数少、边多 → 邻接矩阵节点数多、边少如社交网络→ 邻接表三、图的遍历算法1. 广度优先搜索BFS策略逐层扩展使用队列FIFO应用最短路径无权图连通分量二分图检测时间复杂度$ O(n m) $算法步骤将起始节点入队标记已访问当队列非空出队一个节点 $ u $遍历 $ u $ 的所有未访问邻居 $ v $标记 $ v $ 已访问入队2. 深度优先搜索DFS策略一条路走到黑使用栈LIFO或递归应用拓扑排序强连通分量Kosaraju环检测时间复杂度$ O(n m) $算法步骤递归版访问当前节点 $ u $标记已访问对每个未访问邻居 $ v $递归调用 DFS(v)四、最短路径算法1. Dijkstra 算法单源最短路径适用非负权重有向/无向图策略贪心 优先队列最小堆时间复杂度普通实现$ O(n^2) $堆优化$ O((n m) \log n) $算法步骤初始化dist[source] 0其余为 $ \infty $将所有节点加入优先队列按 dist 排序当队列非空取出 dist 最小的节点 $ u $对每个邻居 $ v $若dist[u] w(u,v) dist[v]更新dist[v]❌不能处理负权边可用 Bellman-Ford2. Floyd-Warshall 算法全源最短路径适用任意权重可含负权但无负环策略动态规划时间复杂度$ O(n^3) $空间复杂度$ O(n^2) $核心思想dist [ i ] [ j ] min ⁡ ( dist [ i ] [ j ] , dist [ i ] [ k ] dist [ k ] [ j ] ) \text{dist}[i][j] \min(\text{dist}[i][j],\ \text{dist}[i][k] \text{dist}[k][j])dist[i][j]min(dist[i][j],dist[i][k]dist[k][j])对所有中间节点 $ k $ 进行动态更新。五、Python 代码实现1. 导入库importheapqfromcollectionsimportdeque,defaultdictimportmatplotlib.pyplotaspltimportnetworkxasnx# 设置中文字体可选plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False2. 图类实现邻接表classGraph:def__init__(self,directedFalse):self.graphdefaultdict(list)# 邻接表self.directeddirected self.weights{}# 存储边权重: {(u,v): w}defadd_edge(self,u,v,weight1):self.graph[u].append(v)ifnotself.directed:self.graph[v].append(u)self.weights[(u,v)]weightifnotself.directed:self.weights[(v,u)]weightdefget_neighbors(self,u):returnself.graph[u]defget_weight(self,u,v):returnself.weights.get((u,v),float(inf))defvertices(self):returnlist(self.graph.keys())3. BFS 实现defbfs(graph,start):visitedset()queuedeque([start])visited.add(start)order[]whilequeue:nodequeue.popleft()order.append(node)forneighboringraph.get_neighbors(node):ifneighbornotinvisited:visited.add(neighbor)queue.append(neighbor)returnorder# 测试gGraph()edges[(A,B),(A,C),(B,D),(C,E)]foru,vinedges:g.add_edge(u,v)print(BFS 顺序:,bfs(g,A))# 输出: [A, B, C, D, E]4. DFS 实现递归defdfs_recursive(graph,start,visitedNone):ifvisitedisNone:visitedset()visited.add(start)order[start]forneighboringraph.get_neighbors(start):ifneighbornotinvisited:order.extend(dfs_recursive(graph,neighbor,visited))returnorderprint(DFS 顺序:,dfs_recursive(g,A))# 输出: [A, B, D, C, E]5. Dijkstra 算法defdijkstra(graph,start):dist{node:float(inf)fornodeingraph.vertices()}dist[start]0prev{node:Nonefornodeingraph.vertices()}# 优先队列: (distance, node)pq[(0,start)]whilepq:current_dist,uheapq.heappop(pq)# 跳过已处理的更优路径ifcurrent_distdist[u]:continueforvingraph.get_neighbors(u):weightgraph.get_weight(u,v)new_distdist[u]weightifnew_distdist[v]:dist[v]new_dist prev[v]u heapq.heappush(pq,(new_dist,v))returndist,prev# 带权图测试gwGraph(directedTrue)gw.add_edge(A,B,4)gw.add_edge(A,C,2)gw.add_edge(B,C,1)gw.add_edge(B,D,5)gw.add_edge(C,D,8)gw.add_edge(C,E,10)gw.add_edge(D,E,2)dist,prevdijkstra(gw,A)print(Dijkstra 距离:,dist)# 输出: {A: 0, B: 4, C: 2, D: 9, E: 11}6. Floyd-Warshall 算法deffloyd_warshall(vertices,get_weight):nlen(vertices)idx{v:ifori,vinenumerate(vertices)}INFfloat(inf)# 初始化距离矩阵dist[[INF]*nfor_inrange(n)]foriinrange(n):dist[i][i]0fori,uinenumerate(vertices):forj,vinenumerate(vertices):ifi!j:wget_weight(u,v)ifw!INF:dist[i][j]w# 动态规划更新forkinrange(n):foriinrange(n):forjinrange(n):ifdist[i][k]dist[k][j]dist[i][j]:dist[i][j]dist[i][k]dist[k][j]# 转回字典result{}fori,uinenumerate(vertices):result[u]{}forj,vinenumerate(vertices):result[u][v]dist[i][j]returnresult# 测试fw_distfloyd_warshall(gw.vertices(),gw.get_weight)print(Floyd-Warshall A→E:,fw_dist[A][E])# 输出: 117. 可视化使用 NetworkX# 构建 NetworkX 图G_nxnx.DiGraph()for(u,v),wingw.weights.items():G_nx.add_edge(u,v,weightw)posnx.spring_layout(G_nx)nx.draw(G_nx,pos,with_labelsTrue,node_colorlightblue,node_size1500,font_size12,arrowsize20)labelsnx.get_edge_attributes(G_nx,weight)nx.draw_networkx_edge_labels(G_nx,pos,edge_labelslabels)plt.title(带权有向图)plt.show()8. 与 NetworkX 内置算法对比# BFSprint(NetworkX BFS:,list(nx.bfs_tree(G_nx,A)))# Dijkstranx_distnx.single_source_dijkstra_path_length(G_nx,A)print(NetworkX Dijkstra:,nx_dist)# 验证一致性assertdistnx_dist,结果不一致print(✅ 自实现与 NetworkX 结果一致)六、应用场景速览算法应用场景示例BFS无权最短路径社交网络“六度空间”DFS拓扑排序课程先修关系、任务调度DijkstraGPS 导航高德地图最短路径Floyd-Warshall全对最短路径航空网络票价计算强连通分量网页聚类Google PageRank 预处理七、总结概念关键点复杂度邻接矩阵快速查边内存大$ O(n^2) $邻接表节省内存遍历快$ O(n m) $BFS队列层序遍历$ O(n m) $DFS栈/递归深度优先$ O(n m) $Dijkstra贪心非负权$ O((nm)\log n) $Floyd-Warshall动态规划全源$ O(n^3) $工程建议小图 1000 节点邻接矩阵 Floyd-Warshall大稀疏图邻接表 Dijkstra堆优化无权图直接用 BFS 求最短路径负权边改用 Bellman-Ford 或 SPFA后续python过渡项目部分代码已经上传至gitee后续会逐步更新。资料关注公众号咚咚王giteehttps://gitee.com/wy18585051844/ai_learning《Python编程从入门到实践》《利用Python进行数据分析》《算法导论中文第三版》《概率论与数理统计第四版 (盛骤) 》《程序员的数学》《线性代数应该这样学第3版》《微积分和数学分析引论》《西瓜书周志华-机器学习》《TensorFlow机器学习实战指南》《Sklearn与TensorFlow机器学习实用指南》《模式识别第四版》《深度学习 deep learning》伊恩·古德费洛著 花书《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》《深入浅出神经网络与深度学习(迈克尔·尼尔森MichaelNielsen》《自然语言处理综论 第2版》《Natural-Language-Processing-with-PyTorch》《计算机视觉-算法与应用(中文版)》《Learning OpenCV 4》《AIGC智能创作时代》杜雨张孜铭《AIGC原理与实践零基础学大语言模型、扩散模型和多模态模型》《从零构建大语言模型中文版》《实战AI大模型》《AI 3.0》
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

设计师个人网站源码网络营销策划书的结构及技巧

在数字时代,远程设备管理已成为IT运维的核心需求。PiKVM作为一款基于树莓派的开源IP-KVM解决方案,让用户能够通过网络远程控制计算机的键盘、视频和鼠标。但你是否想过,从源码开始构建一个完全定制化的PiKVM OS?这不仅是对技术能力…

张小明 2026/1/9 17:34:47 网站建设

做百度联盟做什么类型网站优秀设计师网站

各位同学,大家好。今天我们将深入探讨一个在高性能计算和系统安全领域都至关重要的话题:JavaScript 集合操作中的哈希碰撞。我们将一同揭开 Map 和 Set 这些看似高效的数据结构背后,潜在的性能陷阱——哈希碰撞攻击,以及攻击者如何…

张小明 2026/1/9 6:54:11 网站建设

做统计表的网站简单的静态网页模板

jflash跨平台配置实战:如何让烧录脚本在Windows、Linux、Mac上无缝运行? 你有没有遇到过这样的场景? 同事在 Windows 上写好的 jflash 烧录脚本,推到 GitLab CI 里跑 Linux 流水线时突然报错:“找不到文件”&#xff…

张小明 2026/1/6 10:37:16 网站建设

网站建设于朦胧域名更新自动转跳

第一章:量子计算任务调度的挑战与机遇随着量子计算从理论研究逐步迈向实际应用,如何高效调度量子任务成为制约系统性能的关键瓶颈。传统经典计算中的任务调度策略难以直接迁移至量子环境,主要受限于量子比特的脆弱性、门操作的时序依赖以及硬…

张小明 2026/1/8 8:08:53 网站建设

高端网站设计教程店标logo设计

FileBrowser终极指南:5步打造高效文件管理系统 【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/gh_mirrors/fi/filebrowser 你是否正在为团队文件管理混乱而头疼?想要一个既安全又灵活的文件共享解决…

张小明 2026/1/7 22:17:27 网站建设

如何美化网站首页网站开发页面设计报价

在数据库的世界里,索引就像是一本书的目录,它能帮助我们快速定位到所需的数据,大大提高数据库的查询效率。在这一小节中,我们将深入探讨数据库索引的原理、不同类型索引的特点,并且通过具体的 SQL 代码示例&#xff0c…

张小明 2026/1/9 15:12:37 网站建设