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

数据结构编程实践20讲(Python版)—16有向图

本文目录

    • 16 有向图(Directed Graph)
      • S1 说明
        • 特征
        • 应用领域
      • S2 示例
      • S3 问题:利用有向图构建贝叶斯网络
        • Python代码
        • 代码说明
        • 结果
      • S4 问题:有依赖的任务调度
        • Python代码
        • 代码说明
        • 结果
      • S5 问题:基于有向图的搜索引擎排序算法
        • Python代码
        • 代码说明
        • 结果

往期链接

01 数组 02 链表 03 栈 04 队列 05 二叉树 06 二叉搜索树 07 AVL树 08 红黑树 09 B树 10 B+树
11 线段树 12 树状数组 13 图形数据结构 14 邻接矩阵 15 完全图

16 有向图(Directed Graph)

S1 说明

有向图也称为有向网络,是一种由节点(顶点)和有向边(弧)组成的图。每条边有一个方向,从一个节点指向另一个节点。与无向图不同,有向图的边是有方向的,表示一种从一个节点到另一个节点的关系。

特征
  • 节点和边: 有向图由一组节点和一组有向边组成。每条边连接两个节点,并具有一个起始节点和一个终止节点。
  • 出度和入度:
    • 出度:某个节点的出度是指从该节点出发的边的数量。
    • 入度:某个节点的入度是指指向该节点的边的数量。
  • 路径: 在有向图中,路径是指从一个节点到另一个节点的一系列边,遵循边的方向。
  • 连通性: 有向图可以是强连通的(每对节点都有路径相连)或弱连通的(忽略边的方向后,图是连通的)。
应用领域

有向图在许多领域都有广泛应用,包括:

  • 社交网络:表示用户之间的关注关系。
  • 网页链接:表示网页之间的超链接关系。
  • 任务调度:表示任务之间的依赖关系。
  • 路由问题:表示网络中的路由关系。

S2 示例

import networkx as nx
import matplotlib.pyplot as plt

# 创建有向图
G = nx.DiGraph()

# 添加节点
G.add_nodes_from([1, 2, 3, 4])

# 添加有向边
G.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 4)])

# 绘制图形
pos = nx.spring_layout(G)  # 使用弹簧布局
nx.draw(G, pos, with_labels=True, arrows=True)
plt.title("Directed Graph Example")
plt.show()

# 计算入度和出度
for node in G.nodes():
    print(f"Node {
     node}: In-degree = {
     G.in_degree(node)}, Out-degree = {
     G.out_degree(node)}")

# 查找路径
path = nx.shortest_path(G, source=1, target=4)
print(f"The shortest path from 1 to 4 is: {
     path}")

结果

Node 1: In-degree = 0, Out-degree = 2
Node 2: In-degree = 1, Out-degree = 1
Node 3: In-degree = 1, Out-degree = 1
Node 4: In-degree = 2, Out-degree = 0
The shortest path from 1 to 4 is: [1, 2, 4]

在这里插入图片描述

S3 问题:利用有向图构建贝叶斯网络

Python代码
# 导入必要的库
from pgmpy.models import BayesianNetwork  # 贝叶斯网络模型
from pgmpy.factors.discrete import TabularCPD  # 条件概率分布(CPD)
from pgmpy.inference import VariableElimination  # 变量消除推理算法
import matplotlib.pyplot as plt  # 绘图库
import networkx as nx  # 网络图处理库

# macos系统显示中文
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

# 定义贝叶斯网络的结构
# 有向边列表,表示节点之间的依赖关系
edges = [
    ('Cloudy', 'Sprinkler'),     # 多云影响洒水器的开启
    ('Cloudy', 'Rain'),          # 多云影响是否下雨
    ('Sprinkler', 'WetGrass'),   # 洒水器影响草坪是否湿润
    ('Rain', 'WetGrass'

http://www.kler.cn/news/354332.html

相关文章:

  • 前端面试题16 | Http和Https相比,有什么区别?
  • repo 命令大全详解(第十一篇 repo init)
  • 什么叫IDS
  • 【数据集】香港数据收集:气象站点、DTM等
  • 大舍传媒-海外媒体发稿:为您打造全球品牌影响力
  • Pytest日志收集器配置
  • websocket的使用
  • 脚本科技攻击导致平台崩溃的判定规则编写及实现
  • FreeRTOS - 软件定时器
  • 网络编程(18)——使用asio协程实现并发服务器
  • MySQL(python开发)——(5)聚合操作
  • 汽车3D动画外包还是自己动手渲染?
  • C++核心编程、面向对象
  • 读取远程windows共享目录中文件+解析后缀为.mdb文件
  • 云原生周刊:优化 Uber 的持续部署丨2024.10.14
  • 5.计算机网络_抓包工具wireshark
  • 使用dotnet-counters和dotnet-dump 分析.NET Core 项目内存占用问题
  • C语言如何实现截取字符串
  • 2024大二上js高级+ES6学习10.13(扩展运算符,Array和String的扩展方法,set数据结构)
  • Kubernetes API