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.hqwc.cn/news/155648.html

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

相关文章

Spring IOC - ConfigurationClassPostProcessor源码解析

上文提到Spring在Bean扫描过程中&#xff0c;会手动将5个Processor类注册到beanDefinitionMap中&#xff0c;其中ConfigurationClassPostProcessor就是本文将要讲解的内容&#xff0c;该类会在refresh()方法中通过调用invokeBeanFactoryPosstProcessors(beanFactory)被调用。 5…

【教程】R语言生物群落(生态)数据统计分析与绘图

查看原文>>>R语言生物群落&#xff08;生态&#xff09;数据统计分析与绘图实践 暨融合《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本方案 R 语言作的开源、自…

最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

13.7性能测试工具(LoadRunner)(简单扫盲)

下载LoadRunner和360极速浏览器 一.为什么选择LoadRunner而不是Jmeter 1.Jmeter没有录制功能. 2.LoadRunner可以设计非常丰富的测试场景. 3.LoadRunner能够产出非常丰富的测试报告. 二.LoadRunner三大组件 1.VUG: 功能: 录制脚本(编写脚本). 2.Controller: 功能: 设计场…

腾讯云轻量级服务器哪个镜像比较好?

腾讯云轻量应用服务器镜像是什么&#xff1f;镜像就是操作系统&#xff0c;轻量服务器镜像系统怎么选择&#xff1f;如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科来详细说下腾讯…

基于深度学习的安全帽识别检测系统(python OpenCV yolov5)

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的内容与方法二、基于深度学习的安全帽识别算法2.1 深度学习2.2 算法流程2.3 目标检测算法2.3.1 Faster R-CNN2.3.2 SSD2.3.3 YOLO v3 三 实验与结果分析3.1 实验数据集3.1.1 实验数据集的构建3.1.2 数据…

证照之星XE专业版下载专业证件照制作工具

值得肯定的是智能背景替换功能&#xff0c;轻松解决背景处理这一世界难题。不得不提及的是新增打印字体设置&#xff0c;包含字体选择、字号大小、字体颜色等。不同领域的应用证明了万能制作&#xff0c;系统支持自定义证照规格&#xff0c;并预设了17种常用的证件照规格。人所…

面向对象【this关键字】

文章目录 this关键字基本作用调用变量调用方法调用构造器this 关键字的限制 this关键字 它在方法&#xff08;实例方法或非 static 的方法&#xff09;内部使用&#xff0c;表示调用该方法的对象它在构造器内部使用&#xff0c;表示该构造器正在初始化的对象。 基本作用 引用…

驱动day10作业

基于platform驱动模型完成LED驱动的编写 驱动程序 #include <linux/init.h> #include <linux/module.h> #include<linux/platform_device.h> #include<linux/mod_devicetable.h> #include<linux/of.h> #include<linux/of_gpio.h> #inclu…

ChatGPT扩展系列之ChatExcel

文章目录 ChatGPT扩展系列之ChatExcel对某一列的文字进行处理对数据进行排序对数据进行计算微软官方又推出Excel AI插件ChatGPT扩展系列之ChatExcel 自从ChatGPT很空出世之后,很多基于ChatGPT的应用便如雨后春笋般应用而生,这些应用的底层本质就是利用了ChatGPT对自然语言的…

mysql---DCL(用户创建及限制)

DCL: 权限控制语句 grant revoke 数据库用户管理: 创建用户 修改用户的权限 删除用户 grant 要在终端执行。 用户创建语句注释 create user ky32localhost identified by 123456; create user 创建用户的开头 ky32localhost ky32 表示用户的主机名 localhost 新建的…