chatGPT教你算法(3)——常用的图搜索算法

article/2025/8/20 14:29:36

0. 引言

这一次我们将会介绍常用的图搜索算法,分别BFS广度优先搜索和DFS深度优先搜索。

1. 图搜索算法介绍

常用的图搜索算法包括广度优先搜索(BFS)和深度优先搜索(DFS)。

广度优先搜索(BFS)是一种有序搜索算法,它从图的起点开始,按照图的宽度(即按照节点之间的距离)进行搜索。BFS会把起点与它相邻的所有节点都搜索一遍,然后再搜索与这些节点相邻的节点,以此类推,直到搜索完整张图。BFS可以用来找出两个节点之间的最短路径。

# 代码样例# 定义图结构
graph = {'A': ['B', 'C'],'B': ['A', 'C', 'D'],'C': ['A', 'B', 'D', 'E'],'D': ['B', 'C', 'E', 'F'],'E': ['C', 'D'],'F': ['D']
}# 定义访问标记数组
visited = {'A': False,'B': False,'C': False,'D': False,'E': False,'F': False
}# 定义初始路径
path = []# 定义广度优先搜索函数
def bfs(graph, visited, node, end, path):# 创建队列queue = []# 将起点加入队列queue.append(node)# 将起点加入访问列表visited[node] = True# 将起点加入路径path.append(node)# 当队列不为空时while queue:# 取出队列首元素temp = queue.pop(0)# 如果找到终点if temp == end:# 返回路径return path# 如果没有找到终点else:# 遍历该点的所有邻接点for neighbor in graph[temp]:# 如果该邻接点没有被访问过if not visited[neighbor]:# 将该邻接点加入队列queue.append(neighbor)# 将该邻接点加入访问列表visited[neighbor] = True# 将该邻接点加入路径path.append(neighbor)# 如果没有找到终点,返回空路径return []# 使用广度优先搜索函数求解最短路径问题
result = bfs(graph, visited, 'A', 'F', path)
# 输出结果
print(result)

上述代码样例中,首先定义了一张带权无向图,然后定义了一个访问标记数组用来记录每个节点是否被访问过。接着,定义了一个空的初始路径,并定义了一个广度优先搜索(BFS)函数来求解最短路径问题。最后,调用该函数,并输出结果。在这个例子中,结果为[‘A’, ‘B’, ‘C’, ‘D’, ‘F’],即从A到F的最短路径。

深度优先搜索(DFS)是一种无序搜索算法,它从图的起点开始,按照图的深度(即按照节点之间的拓扑关系)进行搜索。DFS会沿着一条路径搜索到尽头,然后再回溯到上一个节点,再沿着另一条路径搜索,直到搜索完整张图。DFS可以用来搜索图中的所有路径。

# 定义一个图
graph = {'A': ['B', 'C'],'B': ['A', 'D', 'E'],'C': ['A', 'F'],'D': ['B'],'E': ['B', 'F'],'F': ['C', 'E']
}# 定义一个深度优先搜索函数
def dfs(graph, node, visited):if node not in visited:visited.append(node)for n in graph[node]:dfs(graph, n, visited)return visited# 调用深度优先搜索函数
visited = dfs(graph, 'A', [])# 打印结果
print(visited)

在这段代码中,我们定义了一个图,然后定义了一个深度优先搜索函数,最后调用了这个函数来搜索图中的节点。

如果运行上面的代码,程序将会打印出所有被搜索到的节点,结果应该是这样的:[‘A’, ‘B’, ‘D’, ‘E’, ‘F’, ‘C’]。请注意,在深度优先搜索中,我们会按照深度来搜索图中的节点,因此上面的结果中,我们先搜索到了A节点,然后是B节点,接下来是D节点,然后是E节点,再然后是F节点,最后是C节点。

最后,请注意这只是一个简单的深度优先搜索的代码样例,在实际应用中,深度优先搜索算法可以用来解决各种各样的问题。例如,我们可以使用深度优先搜索来查找图中从某个节点到另一个节点的路径,或者使用深度优先搜索来寻找图中的某个环。此外,深度优先搜索还可以用来解决一些普遍性更强的问题,例如求解迷宫问题和解数独问题。

除了上面提到的用途之外,深度优先搜索还有很多其他的应用场景。总的来说,深度优先搜索是一种非常有用的算法,在很多场景下都能发挥重要作用。

如果您需要在Python程序中使用深度优先搜索算法,您可以使用上面的代码样例作为参考,并在此基础上进行更多的定制化开发。当然,您也可以使用Python中的第三方库,例如networkx库,来帮助您实现深度优先搜索算法。

除了BFS和DFS,还有一些其他常用的图搜索算法,例如贝尔曼-福特算法(Bellman-Ford)和迪杰斯特拉算法(Dijkstra)。

2. 图搜索算法的比较

广度度优先搜索(BFS)和深度优先搜索(DFS)是两种最常用的图搜索算法。BFS和DFS的主要区别在于搜索顺序。BFS按照图的宽度进行搜索,即按照节点之间的距离进行搜索,而DFS按照图的深度进行搜索,即按照节点之间的拓扑关系进行搜索。

BFS的优点在于,它能够找出两个节点之间的最短路径,因此常用于寻找最短路径问题。DFS的优点在于,它能够搜索图中的所有路径,因此常用于搜索所有路径问题。

贝尔曼-福特算法(Bellman-Ford)和迪杰斯特拉算法(Dijkstra)都是用来求解最短路径问题的算法。它们的主要区别在于处理负权边的方式。贝尔曼-福特算法能够处理带有负权边的图,而迪杰斯特拉算法不能。因此,贝尔曼-福特算法适用于带有负权边的图,而迪杰斯特拉算法适用于不带负权边的图。

总之,BFS和DFS适用于搜索图中的路径,而贝尔曼-福特算法和迪杰斯特拉算法适用于求解最短路径问题。贝尔曼-福特算法能够处理带有负权边的图,而迪杰斯特拉算法不能。因此,贝尔曼-福特算法适用于带有负权边的图,而迪杰斯特拉算法适用于不带负权边的图。

3. 还有哪些新颖的图搜索算法

除了提到的这些经典算法,还有许多其他有用的图搜索算法。例如,A* 算法是一种高效的搜索算法,它可以使用启发函数来估算每个节点到目标节点的代价,从而更快地找到最优解。另一个算法是启发式搜索(Heuristic Search),它类似于 A* 算法,但在搜索过程中可以更改启发函数的值,以达到更高的效率。

A* 算法是一种启发式搜索算法。它在搜索的过程中不仅考虑起点和目标点之间的距离,还会考虑其他因素,如障碍物、转弯次数等,以求出最优路径。A*算法通过不断地更新结点的代价和预估代价,来实现最优路径的搜索。

启发式搜索算法是一种图形搜索算法,它通过使用额外的启发信息,来优化搜索过程。它的基本思想是在搜索的过程中,根据额外的信息,不断更新每个结点的预估代价,以便找到最优解。启发式搜索算法的优点是搜索效率更高,能够快速找到最优解。

A*算法和启发式搜索算法通常用于路径规划问题中。比如在汽车导航系统中,它们可以用来快速搜索出车辆从起点到目标点的最优路径。它们还可以用于解决推箱子游戏、八数码游戏等问题。

4. 小结

以上就是我们关于图搜索的介绍啦,大家还有什么想问的呢?欢迎留言评论。


http://chatgpt.dhexx.cn/article/9BsZEm1C.shtml

相关文章

将ChatGPT集成到搜索引擎上(稳定版)

前言: ChatGPT已经火了有一段时间了,针对它的各种工具也层出不穷,笔者今天推荐的是一款google插件ChatGPT for Google,它是一款将ChatGPT集成到Google浏览器的插件,支持大多数搜索引擎,可能有些人已经使用过&#xff0…

ChatGPT时代,垂直搜索如何破?

ChatGPT这一现象级产品的热度在国内一路狂飙,不仅在技术界和商业界引起广泛讨论,还拉高了整个社会对AI的期待。不仅如此,这种大模型(LLM)所展现出的能力,给一些现有的技术和业务形态带来一种要被“降维打击…

ChatGPT为企业应用赋能

chatgpt-on-wechat和bot-on-anything两个项目都支持企业微信部署,其中前者功能比较丰富,推荐! 如需帮助,可以搜索wx:Youngerer 找到我! 功能展示: ![在这里插入图片描述](https://img-blog.csd…

ChatGPT 的 AskYourPDF 插件所需链接如何获取?

一、背景 目前 ChatGPT 主要有两款 PDF 对话插件,一个是 AskYourPDF 一个是 ChatWithPDF(需 ChatGPT Plus),他们都可以实现给一个公共的PDF 链接,然后进行持续对话,对读论文,阅读 PDF 格式的文…

谷歌Bard(ChatGPT的竞品)申请方法详解

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

ChatGPT新进展GPT-4 模型介绍

文章目录 背景工具功能使用增强 背景 2023.3.14 GPT-4 模型发布 创建了GPT-4,这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型多模态模型(接受图像和文本输入,输出文本输出),虽然在许多现实场景中不如人类,但在各种专…

ChatGPT 自定义提示词模板提升使用效率

相关文章推荐: 《提问的艺术:如何通过提示词让 ChatGPT 更准确地理解你的问题?》 《这些免费插件,让你的 ChatGPT 效率爆炸》 一、背景 现在 ChatGPT 异常火爆,很多人都在体验甚至购买 ChatGPT Plus。 现在使用 ChatG…

如何用ChatGPT搞科研?

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自知乎:芯片斯多葛 、量子位(QbitAI) 这位研究僧,GPT-4都发布了,你还在纯人工…

使用范例调教ChatGPT

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

亲测:Chatgpt国内就能使用,全面支持中文

ChatGPT是什么? ChatGPT是一个基于人工智能技术的聊天机器人网站,它使用了GPT(Generative Pre-trained Transformer)模型来生成自然语言响应。用户可以在ChatGPT上与机器人进行对话,机器人会根据用户的输入生成相应的回…

摆脱网络限制:用Vercel打造属于你的ChatGPT网站

摆脱网络限制:用Vercel打造属于你的ChatGPT网站 前言 上一篇分享了如何用自己的服务器搭建chatgpt服务器,但是需要你有一个服务器,还是有点成本的。今天我带来一个无需自备服务器的方式,让你也能搭建属于自己的chatgpt专属助手&a…

不限次数的chatGPT

不说废话直接看方法: 不用翻墙,开干 第一步:打开电脑的Edge浏览器,就是windows系统的默认浏览器,搜索wetab,点击如下的官方链接就会进入安装插件界面 第二步:点击chat AI就会弹出这个弹窗&…

推荐一个免费的集成ChatGPT的代码编辑器,程序员写代码将被颠覆

上周,Open AI团队正式宣布:GPT-4来了!GPT-4的出现,随后 Microsoft的多个产品就集成了GPT-4。紧接着基于Open AI公司发布的GPT-4编写、编辑和讨论代码新一代编辑器 Cursor 的出现。 Cursor是一款独立的应用。从界面来看&#xff0c…

零基础也能用ChatGPT写代码,简直不要太爽

最近朋友圈刷到最多的动态和话题都是围绕ChatGPT的,作为一个功能强大,用途广泛的聊天机器人,我们能用它做的事情太多了。比如用它写文案,写剧本,规划旅游路线,甚至写小说等等。在本文中,我们将探…

用ChatGPT科学学习Python和写代码

你的朋友圈被ChatGPT攻占了吗? ChatGPT最近太火了! ChatGPT是什么? ChatGPT 是一种预训练的语言模型,用于对话生成。它的名字来源于它的两个主要组成部分:「聊天」(chat)和「生成式语言模型」&a…

不会写代码,也能部署一个独立ChatGPT?

本教程使用GPT-3模型接口模拟ChatGPT项目,虽然与真正的ChatGPT存在差异,但是演示了ChatGPT的工作原理。 (ChatGPT服务是基于GPT-3模型,经过大量的微调训练而来的,本教程暂时不包含训练内容,之后我们会讲如…

ChatGPT教你写代码

问题: 本人是个菜鸟,想将HTID字段和LDaiHao字段相同,且个数大于1的记录 的Feature字段值改为“共压”。 于是我凭着自己粗浅的学识,写了个sql Update 线号表 T1, (Select HTID,LDaiHao ,Count(HTID) as NUM From 线号表 Group By …

ChatGPT 能自己跑代码了!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! time leap, sci-fi, photorealistic, --niji 5 --ar 3:2 --s 1000 自 ChatGPT 发布以来,各行各业对其能力探索的举措一直没有停止。 很多大厂纷纷跟进,竞相推出自研…

如何让ChatGPT Plus教你写代码?

1、什么是chatgptPlus?和chatgpt的比较? ChatGPT 是 OpenAI 开发的一种人工智能语言模型,是对原有的 ChatGPT 模型的升级版。与 ChatGPT 相比,ChatGPT 在以下几个方面进行了改进: 更高的生成质量:ChatGPT…

如果让ChatGPT来写代码他会怎么写?

一、前言 今天突发奇想想试一下如果让ChatGPT来写51代码会怎么样呢?今天我们就一起来看一下他会怎么写51代码,机器人写出来的代码到底可不可以运行? 在开始之前我们首先让ChatGPT做一个自我介绍吧! 问: ChatGPT介绍…