当前位置:

【搜索算法】(1) 深度优先搜索 DFS

xiaoming 2023-12-15 25 0

人工智能研究如何构建理性动作(Act Rationally)的代理(Agent)。 大多数时候,这些代理会在后台执行某种搜索算法,以完成其任务,比如AlphaGo进行的蒙特卡洛树搜索。

搜索问题包括:

状态空间:可设置的所有可能状态的集合;起始状态:搜索开始的状态;目标测试(Goal Test):查看当前状态的函数,返回是否为目标状态。

搜索问题的解是一系列动作(Action),也称计划(Plan),将开始状态转换为目标状态。通过搜索算法找到计划。

搜索算法可分为“盲搜”(Blind Search / Uninformed Search)和Informed Search两大类。盲搜是指算法在除了问题定义外,没有其他的额外信息,包括:深度优先,广度优先,等成本等搜索策略;与之相对的Informed Search则使用的与问题相关的知识,因此能更快的找到解,包括贪心搜索,A*和图搜索等策略。本文先讨论深度优先搜索(DFS)。

19世纪,法国数学家Charles Pierre Trémaux在研究迷宫时,提出了DFS的一个版本。

DFS作为一个基础算法,单独使用时功能有限,但在与确定节点间是否连通,连通的块数计算和发现桥等其他功能协同时,体现出很大价值。

DFS的时间复杂度为O(V+E),V,E分别表示顶点与边的数量。

DFS可用递归的方式来实现。

# 定义图 graph = { 1 : [2,5,9], 2 : [3], 3 : [4], 4 : [], 5 : [6,8], 6 : [7], 7 : [], 8 : [], 9 : [10], 10 : [] } visited = set() # 递归函数 def dfs(visited, graph, node): if node not in visited: print (node) visited.add(node) for neighbour in graph[node]: dfs(visited, graph, neighbour) dfs(visited, graph, 1)

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~
您是本站第7241名访客 今日有0篇新文章