首页 > 编程知识 正文

广度优先遍历,广度和深度是什么意思

时间:2023-05-04 14:14:55 阅读:50814 作者:62

1、宽度优先搜索宽度优先搜索是图搜索算法,有助于回答两类问题吗?

类型1问题:是否有从节点a出发到节点b的路径? 类型2问题:从节点a出发到节点b的哪个路径最短? 2、例如,假设m经营鱼塘,为了卖饲养的鱼需要找销售商。 此时,m联系经销商有两种方法。

1、用m的通讯录联系,确认有没有经销商。 2、用m的通讯录联系朋友,有没有销售地址的联系方式。 假设m的通讯录中有a、b、c联系人,a有m、n、g联系人,b有m、n联系人,c有m、p、k联系人。

MA,b,CAM,n,GBM,NCM,p,K 那此时M怎么找到销售商呢?(假设K是销售商)

假设朋友是一次关系,朋友的朋友是两次关系。

一次关系是a、b、c的二次关系是m、n、g、p、k。 对m来说,m是用一次关系调查,用二次关系调查,所以这样找到的是最近的经销商。广度优先遍历不仅能查找从A到B的路径还能找到最短路径。适合广度优先搜索。 为了能够依次检查是否是销售商,有解决这个问题的数据结构。 队列是先进先出的数据结构,堆栈是后退先进的数据结构。

哈希表可以映射人与人之间的关系,搜索速度快,无序,所以不需要在意先从通讯录中查谁。 哈希表可以引用如下: 散列表。 表示此映射关系的Python代码如下:

graph={}graph['M']=['A '、' b '、' C']graph['A']=['M '、' n '、' g ' ] graph [ ' b ]=[ ' m ]

M A B C N G P K算法实现: fromcollectionsimportdequegraph={ } graph [ ' m ' ]=[ ' a '、' b '、' C']graph['A']=['M ' k ' ] graph [ ' n ' ]=[ ] graph [ ' g ' ]=[ ] graph [ ' p ' ]=[ ] graph [ ' k ' ]=[ ] #或更高版本的内容也使用字典search_queue =graph[name] #将名称的邻居添加到此搜索队列中。 searched=[] #用于记录检查的人的whilesearch _ queue : person=search _ queue.pop left (#其中的第一个人ifpersonnotinsearched 3360 3360print(person,'是销售人员') returntrueelse : search _ queue=graph [ person ] searched.append )将此人标记为已检查的reeson 将一个人添加到队列的时间是固定的,即o(1),因此对任何人这样做所需的总时间为o ),因此队列

广度优先搜索的运行时间为 O ( 人 数 + 边 数 ) O(人数+边数) O(人数+边数),通常写作 O ( V + E ) O(V+E) O(V+E),其中V为顶点数,E为边数。:拓扑排序可以这样理解,如果任务a依赖任务b,则列表中的a必须在任务b之前。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。