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

news2024/10/21 15:56:01

本文目录

    • 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.coloradmin.cn/o/2220131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成都睿明智科技有限公司电商服务可靠不?

在这个短视频风起云涌的时代,抖音不仅成为了人们娱乐消遣的首选平台,更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司,作为抖音电商服务领域的佼佼者,正以其独到的洞察力和专业的服务,助力无数品牌在这片沃…

使用redis存储股股票数据及近一个月的行情数据

使用redis存储股票数据及近一个月的行情数据 性能瓶颈redis的使用odoo连接redis股票数据的读写结论 性能瓶颈 股票行情对数据的实时性是有要求的,在数据同步时如果都从数据库中查询数据,对于股票行情数据来说是有些慢了,因此我们使用redis来…

视频网站开发:Spring Boot框架的高效实现

5 系统实现 5.1用户信息管理 管理员管理用户信息,可以添加,修改,删除用户信息信息。下图就是用户信息管理页面。 图5.1 用户信息管理页面 5.2 视频分享管理 管理员管理视频分享,可以添加,修改,删除视频分…

HCIP-HarmonyOS Application Developer 习题(十五)

(判断)1、在HarmonyOs中发布带权限公共事件,发布者首先要在config.json中申请所需的权限。 答案:正确 分析:发布携带权限的公共事件:构造CommonEventPublishInfo对象,设置订阅者的权限。 &#…

基于springboot vue的音乐播放系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

【Postman】如何导出导入数据文件?Postman链接分享?

方式一:postman分享链接 1.1 导出 1.2 导入 1.3 导入完成后删除分享的链接 方式二:postman导出导入json 2.1 导出 2.2 post导入json数据

智慧监管:EasyCVR视频汇聚智能分析平台助力有限空间作业实现全天候可视化监控

随着工业化和城市化进程的加快,有限空间作业(如地下管道、储罐、隧道等)在各类企事业单位中日益频繁。然而,这类作业环境复杂、危险系数高,对作业人员的安全管理和实时监控提出了严峻挑战。为了保障有限空间作业的安全…

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

cocos Creator + fairyGUI 快速入门

版本 Creator 3.8.x,FairyGUI 2022 大部分内容来自 https://en.fairygui.com/docs/sdk/creator 1.新建cocos项目,根目录运行 npm install --save fairygui-cc 引入 fairyGUI库 2.assets目录之外新建fairyGUI项目 3.fairyGUI中编辑UI 完成后发布到Creato…

细数RAG的12个痛点,英伟达高级架构师亲授解决方案

检索增强式生成(RAG)是一种使用检索提升语言模型的技术。具体来说,就是在语言模型生成答案之前,先从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程。这种技术能极大提升内容的准确性和相关性&#x…

野外便携定位终端|北斗三代短报文通信终端|移动通信终端

QM200B北斗三号便携终端是一款面对野外环境的北斗三代便携设备,具有低功耗、体积小、重量轻等特点。该设备不仅集成了北斗三代区域短电文通信、北斗三代定位功能、移动通信功能,同时具有语音对讲功能,配有液晶屏和功能按键,可在海…

一文彻底弄清Redis的布隆过滤器

布隆过滤器(Bloom Filter)是一种空间效率极高的数据结构,用于快速判断一个元素是否在集合中。它能够节省大量内存,但它有一个特点:可能存在误判,即可能会认为某个元素存在于集合中,但实际上不存…

说了很久的建筑转大模型,也不过是想在职场完成赎身

问:为什么从规划转行到大模型? 1、房子卖不掉了,城镇化进入存量时代,发展的蛋糕有限,规划行业式微;而且生态规划更多是保护性规划,不是发展性规划,地方政府的驱动力不足。 2、智能…

ArchLinux VSCode 1.94.2无法安装or更新解决办法

此方法参考了这篇博客https://www.debugpoint.com/failed-connect-raw-githubusercontent-com-port-443/#google_vignette 某一次paru后,一直报错503什么的,在archlinux官网看到pacman安装的是个Open VSX版本的,是Arch官方的版本,…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

Vxe UI vue vxe-table grid 如何滚动、定位到指定行或列

Vxe UI vue vxe-table vxe-grid 在表格中有时候需要对数据会列进行操作。可以会定位到某一行或某一列,vxe-table 中提供了丰富的函数式 API,可以轻松对行与列进行各种的灵活的操作。 定位到指定行与列 通过调用 scrollColumn(columnOrField) 方法&…

【Python】图形用户界面

在Python中,开发图形用户界面(GUI)的工具包有许多种,常用的包括: Tkinter:Python的标准GUI库,作为Python内置的一部分,简单易用,适用于轻量级应用。PyQt/PySide&#xf…

探索面向对象编程的核心:类、对象与封装

探索面向对象编程的核心:类、对象与封装 在学习Java编程时,面向对象编程(OOP)是一个非常重要的核心概念。今天我们将深入探讨其中最基本、但却非常重要的组成部分:类和对象,以及它们是如何通过封装来实现数…

全网免费的文献调研方法以及获取外网最新论文、代码和翻译pdf论文的方法(适用于硕士、博士、科研)

1. 文献调研 学术搜索引擎(十分推荐前三个,超有用):使用 Google Scholar(https://scholar.google.com/)(https://scholar.google.com.tw/)(巨人学术搜索‬‬)、(三个都可以,镜像网站) arXiv(https://arxiv.org/)、&am…