Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 58.8MB ·虚拟内存 1300.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
图在解决许多重要的数学难题中是非常有用的数据结构。例如计算机网络拓扑或分析化学化合物的分子结构。它们还用于城市交通或路线规划,甚至用于人类语言和语法。所有这些应用程序都有使用它们的边遍历图的共同挑战,并确保图的所有节点都被访问。有两种常见的已建立的方法来进行这种遍历,下面将对其进行描述。
也称为深度优先搜索(DFS),该算法遍历深度病房运动中的图形,并使用堆栈记住在任何迭代中发生死角时开始搜索的下一个顶点。我们使用设置的数据类型在python中实现DFS图表,因为它们提供了跟踪访问和未访问节点所需的功能。
class graph: def __init__(self,gdict=None): if gdict is None: gdict = {} self.gdict = gdict # Check for the visisted and unvisited nodes def dfs(graph, start, visited = None): if visited is None: visited = set() visited.add(start) print(start) for next in graph[start] - visited: dfs(graph, next, visited) return visited gdict = { "a" : set(["b","c"]), "b" : set(["a", "d"]), "c" : set(["a", "d"]), "d" : set(["e"]), "e" : set(["a"]) } dfs(gdict, 'a')
当上面的代码被执行时,它会产生以下结果 -
a b d e c
也称为宽度优先搜索(BFS),该算法遍历图的宽度运动,并使用队列记住在任何迭代中发生死角时开始搜索的下一个顶点。请访问我们网站的链接,了解BFS图表步骤的详细信息。
我们使用之前讨论的队列数据结构在python中实现BFS。当我们继续访问相邻的未访问节点并继续将其添加到队列中时。然后,我们开始只出现没有未访问节点的节点。当没有下一个相邻节点被访问时,我们停止程序。
import collections class graph: def __init__(self,gdict=None): if gdict is None: gdict = {} self.gdict = gdict def bfs(graph, startnode): # Track the visited and unvisited nodes using queue seen, queue = set([startnode]), collections.deque([startnode]) while queue: vertex = queue.popleft() marked(vertex) for node in graph[vertex]: if node not in seen: seen.add(node) queue.append(node) def marked(n): print(n) # The graph dictionary gdict = { "a" : set(["b","c"]), "b" : set(["a", "d"]), "c" : set(["a", "d"]), "d" : set(["e"]), "e" : set(["a"]) } bfs(gdict, "a")
当上面的代码被执行时,它会产生以下结果 -
a c b d e
必须分析算法的效率和准确性,以便对它们进行比较,并为特定场景选择特定的算法。进行这种分析的过程称为渐近分析。它是指以数学计算单位计算任何操作的运行时间。例如,一个操作的运行时间被计算为f(n),并且可能针对另一个操作 ...