[AIGC] 图论基础入门

news2024/11/26 3:36:28

Graph Theory

图论是数学的一个分支,旨在研究图(graph)的属性和应用。这是一个跨学科领域,因为图论可以用于描述和解决各种实际问题。如社交网络分析,电脑网络,生物网络等。


文章目录

    • 什么是图?
    • 图的基本性质
    • LeetCode 图论相关问题解析及Python代码实现
    • LeetCode 题目:207. 课程表
      • 解题思路:
      • Python 代码实现:

什么是图?

图是由点(称为节点或顶点)和线(称为边)组成的。这些点和线可能代表现实生活中的某些对象或实体,边表示这些对象之间的某种关系。

基本上,有两种类型的图:

  1. 无向图:边没有方向。如果存在一条连接节点 A 和节点 B 的边,那么我们可以说 A 是 B 的邻居,反之亦然。

    eg. A – B

  2. 有向图:边有方向。如果存在一条从节点 A 指向节点 B 的边,那么我们只能说 B 是 A 的邻居,但不能说 A 是 B 的邻居。

    eg. A --> B

注意:在无向图中,边 (A,B)(B,A) 是相同的。但在有向图中,A->BB->A 代表两个不同的边。

图的基本性质

现在我们已经了解了图是什么,那么我们就可以进一步讨论图论的一些基本性质和术语了。

  1. 度(Degree):一个节点的度是其相邻节点的数量。在有向图中,我们区分入度(indegree)和出度(outdegree),分别表示指向节点和从节点指出的边的数量。

  2. 路径(Path):在图中,一条路径是一个节点序列,其中每个节点都通过边与下一个节点相连。

  3. 循环(Cycle):循环是一条路径的特殊类型,其中第一个节点和最后一个节点是同一节点。

  4. 连通性(Connectivity):在无向图中,如果从任何节点可以到达任何其他节点,那么图是连通的。在有向图中,这称为强连通性。

  5. 子图(Subgraph):子图是原图的一部分,包含原图的一些节点和边。树(Tree)就是一种没有环的连通无向图。

LeetCode 图论相关问题解析及Python代码实现

接下来,我们将讨论一些LeetCode上的图论相关问题,并提供Python代码及解题思路。

(注意:以下题目仅作为图论入门阶段的学习,可能不涵盖图论所有范围和技巧)

好的,我已经为您找到了一些具有图论问题的 LeetCode 代码解决方案。其中一些最受欢迎和全面的资源包括:

  1. coding-interview-gym by partho-maple

    • ⭐星数: 832
    • 💬描述: leetcode.com,algoexpert.io solutions in python and swift
    • 主要语言: Python
  2. leetcode by hongbo-miao

    • ⭐星数: 197
    • 💬描述: LeetCode solutions
    • 主要语言: Python
  3. Algorithms by kumailn

    • ⭐星数: 55
    • 💬描述: ✨ a bunch of algorithms in a bunch of languages ✨
    • 主要语言: Python

以上代码库大多专注于 LeetCode 的问题解决,并涉及诸多热门语言解决方案。虽然这些代码库提供了许多问题的解决方案,但每个问题的详细解析或讨论可能因代码库而异。建议在查看这些资源时,重点理解代码逻辑并尝试自己解决这些问题以提升技能。

如果您需要了解关于特定问题的更多信息,我建议访问 LeetCode的图论问题页面 , 这将提供大量有关图论问题的详细信息。

LeetCode 题目:207. 课程表

这是一道比较经典的图论问题。问题介绍如下:

现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些前置课程,例如想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们之间这种前置课程关系:[0,1]。

给定课程总量以及它们的前置课程,判断是否可能完成所有课程的学习?

解题思路:

我们要找的是课程间的依赖关系,这个关系其实就是一个有向图。我们可以使用拓扑排序来解决这个问题。一个有向图如果没有环,那么一定存在拓扑排序。

我们首先遍历所有的边,计算每门课程的入度(前置课程数量)。每次选择一个入度为0的课程,将它的所有后继课程的入度减1,直到所有的课程的入度都为0。如果还有课程的入度不为0,那么说明图中存在环,也就不能完成所有课程的学习。

Python 代码实现:


def canFinish(numCourses: int, prerequisites: list[list[int]]) -> bool:
    from collections import deque
    # 入度表
    indegrees = [0 for _ in range(numCourses)]
    # 邻接表
    adjacency = [[] for _ in range(numCourses)]
    # 队列
    queue = deque()
    # 通过 prerequisites 得到入度表和邻接表
    for cur, pre in prerequisites:
        indegrees[cur] += 1
        adjacency[pre].append(cur)
    # 将所有入度为 0 的节点入队
    for i in range(len(indegrees)):
        if not indegrees[i]: queue.append(i)
    
    # BFS 拓扑
	  while queue:
	      pre = queue.popleft()
	      numCourses -= 1
	      for cur in adjacency[pre]:
	          # 将后继课程的入度 -1
	          indegrees[cur] -= 1
	          # 如果后继课程入度为 0,那么将其加入到队列中
	          if not indegrees[cur]: queue.append(cur)
	
	  # 如果所有的课程都已经学完,那么说明可以完成课程学习,否则就不能
	  return not numCourses

这是运用了图论中的拓扑排序的技术来解决这个问题的。

以上便是对于 LeetCode 207.课程表 这个题目的解题思路及其 Python 代码实现,希望对你有所帮助。如果需要更多的帮助或者有其他的问题,欢迎随时告诉我。

我希望这些信息对您有所帮助!如果您有其他问题或需要更深入的解析,请告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833830.html

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

相关文章

应急便携式气象观测站

TH-BQX5自然灾害,如台风、暴雨、洪涝、干旱等,给人们的生命财产安全带来了巨大威胁。在应对这些灾害时,准确的气象观测数据是制定有效应对策略的基础。近年来,应急便携式气象观测站在自然灾害的监测和预警中发挥了越来越重要的作用…

python GUI开发: tkinter选项卡,移动滑块,颜色选择框,文本对话框,对话输入框,通用消息框模块用法详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Vue57-组件的自定义事件_解绑

给谁绑的自定义事件,就找谁去触发;给谁绑的自定义事件,就找谁去解绑; 一、解绑自定义事件 1-1、解绑一个自定义事件 到student.vue组件中去解绑。 1-2、解绑多个自定义事件 使用数组来解绑多个。 1-3、解绑所有的自定义事件 二、…

Linux-远程访问及控制

一、SSH远程管理 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的 Telent(远程登录…

计算机毕业设计Python+Vue.js知识图谱音乐推荐系统 音乐爬虫可视化 音乐数据分析 大数据毕设 大数据毕业设计 机器学习 深度学习 人工智能

开发技术 协同过滤算法、机器学习、LSTM、vue.js、echarts、django、Python、MySQL 创新点协同过滤推荐算法、爬虫、数据可视化、LSTM情感分析、短信、身份证识别 补充说明 适合大数据毕业设计、数据分析、爬虫类计算机毕业设计 介绍 音乐数据的爬取:爬取歌曲、…

DFS 迷宫

个人感觉DFS没有递归那么烧脑 简单迷宫 如何接受二维数组 先构建A[MAXN][MAXN]&#xff0c;人后二重循环 #include <iostream> #include <vector> #include <cmath> #include <string> #include <cstring> using namespace std; const int N…

Ubuntuwin11双系统

一、准备工作 win11与ubuntu20.4双系统安装案例教程,先查看引导模式参数不服则不要安装否则会报异常 查看BIOS引导模式 查看磁盘分区格式 下载Ubuntu镜像 所有版本下载地址,我的华为云镜像ubuntu20.4这个版本地址

【ComfyUI】Stable Diffusion 3 加Controlnet

基于 instantX-research/diffusers_sd3_control: &#x1f917; Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX. (github.com) 和 ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers: ComfyUI SD3-Medium ControlNet&#…

HTTPS原理详解新版

http和https区别 附注&#xff1a; &#xff08;1&#xff09;SSL和TLS其实是一个东西&#xff1b; &#xff08;2&#xff09;完整性通过摘要和原文按照一定算法比对 Https的工作流程 加密算法 数据完整性 Https性能优化

强大的api管理系统Storm Core API_V1.1免授权源码

强大的api管理系统Storm Core API_V1.1免授权源码&#xff0c;带用户key和ip白名单功能 可设置付费操作等 更新日志 此次更新功能比较多 1.完善个人中心页面 2.完善注册登录页面 3.完善key功能 4.增加ip白名单功能 5.以及一些其他小小的美化 6.模板dxx的图片可单个自定…

uniapp 微信小程序更改轮播图指示点

仅微信小程序有效 /* #ifdef MP-WEIXIN */// 默认指示点样式wx-swiper .wx-swiper-dot {position: relative;background-color: #ffffff;width: 28rpx;border-radius: 10rpx;height: 8rpx;opacity: 0.4;}// 当前选中样式wx-swiper .wx-swiper-dot-active {background-color: #f…

Avalonia for VSCode

1、在VSCode中编辑AvaloniaUI界面&#xff0c;在VSCode中搜索Avalonia&#xff0c;并安装。如下图&#xff0c;可以发现Avalonia for VSCode还是预览版。 2、 创建一个Avalonia 项目。 选择项目类型 输入项目名称 选择项目所在文件夹 打开项目 3、项目架构如下图。 4、builde…

记一次线上jVM调优

文章目录 问题描述问题分析尝试优化业务代码优化方案修改后代码补充点 问题描述 部门调整&#xff0c;接手一个新项目&#xff0c;为方便后续描述叫user-web&#xff0c;随后推动IT降本&#xff0c;要求根据实际业务量调整服务器实例数量和配置&#xff0c;调整前服务器配置为…

docker命令docker desktop 安装 xiaomimi8/awvs14-log4j-2022 详细图文教程

docker命令docker desktop 安装 xiaomimi8/awvs14-log4j-2022 详细图文教程 1. 拉取镜像 通过命令拉取 # 拉取镜像 docker pull xiaomimi8/awvs14-log4j-2022 # 查看镜像 docker images通过doker desktop直接查看镜像 2. 启动镜像 通过命令启动 docker run -it -d -p 13…

SpringBoot购物网站

摘要 随着信息技术的高速发展&#xff0c;二十一世纪的网络技术和网络应用正在快速融入人们的生活&#xff0c;并且由于网络服务以及网络应用日渐普及&#xff0c;人们对于现在生活的需求也随之增长&#xff0c;而网上购物的便捷对人们的吸引力越来越大&#xff0c;购物网站可…

阿里云 邮件系统DNS域名解析 搭配 postfix+dovecot 邮件服务器

1 创建邮箱域名A记录(一般邮箱客户端&#xff0c;增加pop,imap,stmp 3条记录) 登录阿里云控制台--云解析DNS 2 MX记录 3 SPF记录

STM32高级控制定时器(STM32F103):PWM输出模式

目录 概述 1 PWM模式介绍 2 PWM类型 2.1 PWM边缘对齐模式 2.2 PWM中心对齐模式 3 使用STM32Cube配置PWM 3.1 STM32Cube配置参数 3.2 生成Project 4 设置PWM占空比 4.1 函数介绍 4.3 函数源码 5 测试代码 5.1 编写测试代码 5.2 函数源码 6 运行代码 概述 本文主…

微信小程序-界面提示框和消息

一.Loading加载框 小程序提供了wx.showLoading用来在加载界面的时候使用&#xff0c;比如加载图片和数据的时候可以使用。 常常和wx.hideLoading()配合使用&#xff0c;否则加载框一直存在。 其效果如下&#xff1a; 代码如下&#xff1a; //显示加载消息wx.showLoading({//提…

编译原理:代替LR的MP:2.遇到的问题

用指针加速 MP是multi-pass&#xff0c;多遍分析法&#xff0c;它是从“先乘除后加减”中得来的灵感。在实践中&#xff0c;发现C语言优先级有15级&#xff0c;如果将源代码处理15遍&#xff0c;每一遍都从头开始找&#xff0c;势必很慢。所以&#xff0c;有了用指针加速的想法…

Vue58-组件的自定义事件_总结

一、需求 父组件App收到子组件student传过来的数据&#xff0c;要在页面上呈现&#xff01; name是App的子组件student&#xff0c;通过自定义事件传过来的。 计算属性&#xff0c;得有原数据才能计算&#xff01;计算的属性要是已经存在的&#xff1a;data里面有的、props里面…