Python 算法高级篇:深度优先搜索和广度优先搜索的高级应用

Python 算法高级篇:深度优先搜索和广度优先搜索的高级应用

  • 引言
  • 1. 深度优先搜索( DFS )回顾
  • 2. 广度优先搜索( BFS )回顾
  • 3. 拓扑排序
  • 4. 连通性检测
  • 5. 最短路径问题
  • 6. 案例分析:社交网络分析
  • 7. 总结

引言

深度优先搜索( DFS )和广度优先搜索( BFS )是图算法中的两个基本搜索算法,它们用于遍历和搜索图或树结构。这两种算法不仅在计算机科学中具有重要地位,还在现实世界的各种应用中发挥着关键作用。在本文中,我们将深入探讨 DFSBFS 的高级应用,包括拓扑排序、连通性检测、最短路径问题等,并提供详细的代码示例和注释。

😃😄 ❤️ ❤️ ❤️

1. 深度优先搜索( DFS )回顾

深度优先搜索是一种用于遍历或搜索树或图的算法。它从起始节点开始,沿着一条路径尽可能深入,直到到达叶子节点,然后返回并探索其他分支。 DFS 通常使用递归或栈来实现。

def dfs(graph, node, visited):if node not in visited:print(node)visited.add(node)for neighbor in graph[node]:dfs(graph, neighbor, visited)

2. 广度优先搜索( BFS )回顾

广度优先搜索是一种用于遍历或搜索树或图的算法。它从起始节点开始,首先访问所有与起始节点直接相连的节点,然后逐层扩展,直到遍历完整个图。 BFS 通常使用队列来实现。

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

3. 拓扑排序

拓扑排序是一种特殊的图算法,适用于有向无环图( DAG )。它用于确定一组任务或事件的执行顺序,以确保不会出现循环依赖。拓扑排序使用 DFSBFS 实现。

def topological_sort(graph):visited = set()stack = []def dfs(node):visited.add(node)for neighbor in graph[node]:if neighbor not in visited:dfs(neighbor)stack.append(node)for node in graph:if node not in visited:dfs(node)return stack[::-1]  # Reverse the order to get the topological order.

4. 连通性检测

DFSBFS 还用于检测图的连通性,即查找图中的所有连通分量。连通分量是图中的子图,其中的每个节点都可以通过边相互访问。

def connected_components(graph):visited = set()components = []def dfs(node, component):visited.add(node)component.append(node)for neighbor in graph[node]:if neighbor not in visited:dfs(neighbor, component)for node in graph:if node not in visited:component = []dfs(node, component)components.append(component)return components

5. 最短路径问题

DFSBFS 也用于解决最短路径问题,其中最著名的是 Dijkstra 算法和 Floyd-Warshall 算法。这些算法用于查找从一个节点到图中所有其他节点的最短路径。

以下是 Dijkstra 算法的示例:

import heapqdef dijkstra(graph, start):distances = {node: float('infinity') for node in graph}distances[start] = 0queue = [(0, start)]while queue:current_distance, current_node = heapq.heappop(queue)if current_distance > distances[current_node]:continuefor neighbor, weight in graph[current_node].items():distance = current_distance + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(queue, (distance, neighbor))return distances

6. 案例分析:社交网络分析

让我们通过一个案例来说明 DFSBFS 的高级应用。假设我们有一个社交网络,其中用户之间的关系用图表示。我们可以使用 DFSBFS 来执行以下任务:

  • 找到两个用户之间的最短路径,以确定他们之间是否有共同的联系。
  • 查找具有最多共同联系的用户,以寻找潜在的朋友或合作伙伴。
  • 检测社交网络中的连通分量,以识别具有相似兴趣的社区。

这些任务是社交网络分析中的常见问题,而 DFSBFS 是解决这些问题的强大工具。

7. 总结

深度优先搜索和广度优先搜索是图算法中的两个基本工具,它们具有广泛的应用。从拓扑排序到连通性检测和最短路径问题, DFSBFS 可以用于解决各种复杂的问题。在实际应用中,它们不仅用于计算机科学,还用于社交网络分析、地理信息系统、网络路由等各个领域。掌握这些算法的高级应用将使你能够更好地理解和解决各种实际问题。

[ 专栏推荐 ]
😃 Python 算法初阶:入门篇》😄
❤️【简介】:本课程是针对 Python 初学者设计的算法基础入门课程,涵盖算法概念、时间复杂度、空间复杂度等基础知识。通过实例演示线性搜索、二分搜索等算法,并介绍哈希表、深度优先搜索、广度优先搜索等搜索算法。此课程将为学员提供扎实的 Python 编程基础与算法入门,为解决实际问题打下坚实基础。
在这里插入图片描述

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

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

相关文章

TDengine 受邀参加 CNCC 2023,大会现场展位前“人山人海”!

10 月 26 日-28 日&#xff0c;2023 年度中国计算机大会&#xff08;CNCC 2023&#xff09;在沈阳新世界博览馆成功举办&#xff0c;本届大会以“发展数字基础设施&#xff0c;支撑数字中国建设”作为会议主题&#xff0c;参会规模头一次达到上万人。本届 CNCC 组织了 19 个特邀…

WebService与RESTful两种接口风格示例

下面我将分别用WebService&#xff08;SOAP&#xff09;和RESTful API的例子来说明它们是如何工作的。 1. WebService (SOAP) 示例&#xff1a; 假设有一个在线计算器服务&#xff0c;它提供了一个加法操作的SOAP WebService。 SOAP请求&#xff08;客户端到服务器&#xff…

JetBrains TeamCity远程命令执行漏洞

一、免责声明&#xff1a; 本次文章仅限个人学习使用&#xff0c;如有非法用途均与作者无关&#xff0c;且行且珍惜&#xff1b;由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;公众号望雪阁及作者不为此承…

vue2:路由前置守卫无法获取到this.$store.state.xxx

在获取到vuex的数据时候&#xff0c;想在router目录下的index.js文件去获取到vuex仓库中声明的全局变量&#xff0c;但是通过this.$store.stote.xxx去获取的时候&#xff0c;报错提示&#xff1a;$store未定义 一、store/index.js const store new Vuex.Store({state: {// 属…

【Jenkins】新建任务FAQ

问题1. 源码管理处填入Repository URL&#xff0c;报错&#xff1a;无法连接仓库&#xff1a;Error performing git command: ls-remote -h https://github.com/txy2023/GolangLearning.git HEAD 原因&#xff1a; jenkins全局工具配置里默认没有添加git的路径&#xff0c;如果…

洞见UI自动化测试

随着软件行业的不断发展&#xff0c;建立一个完善的自动化测试体系变得至关重要。自动化测试包括三个方面&#xff1a;UI前端界面&#xff0c;Service服务契约和Unit底层单元如下图&#xff1a; 越是底层的测试&#xff0c;运行速度越快&#xff0c;时间开销越少&#xff0c;金…

41.排序练习题(王道2023数据结构第8章综合练习)

试题1&#xff08;王道8.3.3节综合练习2&#xff09;&#xff1a; 编写双向冒泡排序算法&#xff0c;在正反两个方向交替扫描。即第一趟把关键字最大的元素放在序列的最后面&#xff0c;第二趟把关键字最小的元素放在序列最前面&#xff0c;如此反复。 首先实现冒泡排序&…

企业多部门VLAN间互访部署实战

1. 二层VLAN技术部署回顾&#xff1b; 2. 三层交换机上如何部署VLAN&#xff1f; 3. 部署VLAN的过程中有哪些注意事项&#xff1f; -- VLAN技术 - 虚拟局域网 -- 局域网 - 通过交换机连接的网络 -- VLAN - 把一个大的局域网 做一个分割 -- 常见局域网的问题&a…

信号类型(通信)——QAM调制信号

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 文章目录 前言 一、原理图 二、仿真 2.1、QAM仿真 2.2、不同滚降系数 2.3、不同M下QAM调制对比 总结 前言 本文主要结合仿真分析了QAM的信号处理过程&#xff0c;并简单分析了成型滤波器中的滚降系数对QA…

基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类 计算机竞赛

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

【Proteus仿真】【Arduino单片机】简易电子琴

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用无源蜂鸣器、按键等。 主要功能&#xff1a; 系统运行后&#xff0c;按下K1-K7键发出不同音调。 二、软件设计 /* 作者&#xff1a;嗨小易&a…

基于 Center 的 3D 目标检测和跟踪

论文地址&#xff1a;https://arxiv.org/abs/2006.11275 论文代码&#xff1a;https://github.com/tianweiy/CenterPoint 3D 目标通常表示为点云中的 3D Boxes。 CenterPoint 在第一阶段&#xff0c;使用关键点检测器检测对象的中心&#xff0c;然后回归到其他属性&#xff0…

CSAPP BOMB LAB

BOMB LAB lab phase1 bomb.c phase1 code: bomb.s phase1 code: 401338 对应 string_not_equal函数: 工具介绍 objdump 使用 objdump是一个用于分析可执行文件、目标文件和共享库的工具。它可以显示这些文件的二进制指令、符号表、段信息、重定位表等内容&#xff0c;帮…

C++的拷贝构造函数

目录 拷贝构造函数一、为什么用拷贝构造二、拷贝构造函数1、概念2、特征1. 拷贝构造函数是构造函数的一个重载形式。2. 拷贝构造函数的参数3. 若未显式定义&#xff0c;编译器会生成默认的拷贝构造函数。4. 拷贝构造函数典型调用场景 拷贝构造函数 一、为什么用拷贝构造 日期…

赛宁网安多领域创新成果亮相第五届“纵横”论坛

10月27日&#xff0c;第五届“纵横”网络空间安全创新论坛在安徽合肥举办&#xff0c;来自中央国家机关、地方政府、军队有关单位、高校、科研院所和部分高新技术企业的领导、专家和代表500余人参加。 本届论坛由军事科学院和国防科技大学等单位共同主办&#xff0c;国防科技大…

【原创】java+swing+mysql个人理财管理系统设计与实现

摘要&#xff1a; 个人理财管理系统是一款帮助用户有效管理个人财务的软件&#xff0c;本文将详细介绍该系统的设计过程&#xff0c;包括功能模块、数据库设计、界面设计等&#xff0c;系统采用javaswingmysql技术组合。 功能分析&#xff1a; 系统主要提供给管理员、用户使…

金蝶云星空创建自动下推并保存公共服务

文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…

M3重磅来袭 苹果多款新品上架

10月31日早上8点&#xff0c;苹果举行了新品发布会&#xff0c;正式发布了M3、M3 Pro、 M3 Max芯片&#xff0c;以及基于新款芯片打造的14英寸和16英寸MacBook Pro、新款iMac。 我们现在花一分钟&#xff0c;简单了解一下这次的新品。 M3、M3 Pro、M3 Max M3系列芯片就是M2系…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

Spring 事务不生效的几种场景

Spring 事务不生效的几种场景 详细内容参考以下链接&#xff0c;这个链接是原文&#xff1a; spring 事务不生效的15中场景 非原创。 以下内容只是为了学习&#xff0c;加深印象&#xff0c;仅作为个人学习笔记&#xff0c; 请支持原创&#xff0c;内容请点击 spring 事务不生效…