美文网首页
广度优先算法

广度优先算法

作者: overad | 来源:发表于2019-03-13 00:06 被阅读0次

本章内容

  1. 学习使用新的数据结构来建立网络模型
  2. 实习广度优先搜索,你可对图是用这种算法回答诸如“到X的最短路径是什么”等问题;
  3. 学习有向图和无向图
  4. 学习拓扑排序,这种排序算法指出了节点之间的依赖关系

解决最短路径问题的算法被称为广度优先算法(breadth-first search, BFS)

图示由节点(node)和边(edge)组成

查找最短路径问题:

广度优先搜索回答两类问题:

  1. 第一类问题:从节点A出发,有前往节点B的路径吗?(在你的人际关系网中,有芒果销售商吗?)
  2. 第二类问题:从节点A出发,前往节点B的哪条路径最短?(哪个芒果销售商与你的关系最近?)

队列:先进先出(First in First Out,FIFO)
栈:后进先出(Last In First Out,LIFO)

#广度优先算法
graph = {}
graph["you"] = ["alice","bob","claire"]
graph["bob"] = ["anuj","peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom","jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []

from collections import deque
# search_deque = deque()      #创建一个队列
# search_deque += graph["you"]

def search(name):
    search_deque = deque()
    search_deque += graph[name]
    searched = []
    while search_deque:
        person = search_deque.popleft()
        if person not in searched:
            if person_is_seller(person):
                print(person + " is a mango seller!")
                return  True
            else:
                search_deque += graph[person]
                searched.append(person)
    return False


def person_is_seller(name):
    if name[-1] == 'm':
        return True

树是一种特殊的图:其中没有往后指的边;
如果任务A依赖于任务B,在列表中任务A就必须在任务B后面,这被称为拓扑排序;

小结:

  • 广度优先搜索指出的是否有从A到B的路径;
  • 如果有,广度优先搜素将找出最短路径;
  • 面临类似于寻找最短路径的问题时,可尝试使用图来建立模型,再使用广度优先搜素来解决问题;
  • 有向图中的边为箭头,箭头的方向表示了关系的方向,例如,rama->adit表示rama欠adit钱;
  • 无向图中的边不带箭头,其中的关系是双向的;
  • 队列是先进先出(FIFO)
  • 栈是后进先出(LIFO)
  • 你需要按加入顺序检查搜素列表中的人,否则找到的就不是最短路径,因此搜素列表必须是队列;
  • 对于检查过的人,务必不要再去检查,否则可能导致无限循环;

相关文章

  • Algorithm进阶计划 -- 广度优先算法

    广度优先算法广度优先算法框架广度优先算法运用 1. 广度优先算法框架 DFS(Deep First Search)...

  • 搜索算法

    BFS广度优先算法(Breadth-First Search) A*算法的出现时因为 深度/广度优先算法找到的路径...

  • 【数据结构】广度优先搜索算法BFS

    对于广度优先遍历算法DFS可以参考前一篇文章【数据结构】深度优先搜索算法DFS 广度优先遍历 广度优先遍历(Bre...

  • python 广度优先算法

    文章概述 广度优先搜索算法概述 广度优先搜索算法 广度优先算法是基于树或者图的,当然树也是一种特殊的图,因此我们先...

  • 广度优先搜索算法(BFS)

    广度优先搜索算法(BFS) 标签(空格分隔): algorithm 1.广度优先搜索算法(Breadth Firs...

  • 广度优先搜索算法

    上一篇简书小编分享了“深度优先搜索”算法,今天小编继续分享下“广度优先搜索”算法。 一、何为“广度优先搜索” 广度...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • python分布式爬虫搜索引擎实战-2-深度优先和广度优先

    深度优先和广度优先 目录: 网站的树结构 深度优先算法和实现 广度优先算法和实现 网站url树结构:分层设计 子域...

  • 算法与数据结构 之 搜索算法

    搜索分为广度优先搜索、深度优先搜索、A*算法。 一、广度优先算法(BFS) 1.1、基本实现和特性:BFS是从一个...

  • 爬虫(3-5)

    深度优先和广度优先1 网站的树结构2 深度优先算法和实现3 广度优先算法和实现 深度优先输出A,B,D,E,I,C...

网友评论

      本文标题:广度优先算法

      本文链接:https://www.haomeiwen.com/subject/gmkapqtx.html