zoukankan      html  css  js  c++  java
  • 基础算法 --- BFS(广度优先搜索/宽度优先搜索)

    个人理解

    BFS是一种最简便的图搜索算法,通过遍历整张图直到找到目标节点;

    从算法的角度看,所有因为展开节点而得到的字节点会被存储到一个FIFO的数据结构中,被遍历过的节点存储在一个容器中(一般是一个set),防止重复搜索

    图解

     如图所示,我们想要获取从S到E节点的最短路径,运用BFS,如何处理??

    主要思想是:从节点S开始将其所有临近子节点存放到一个队列中,然后标记这些节点到最初顶点S的距离为1;

                          然后根据队列的先进先出特定,出队列,判断是否为目标节点;如果不是,将出队节点的临近子节点入队,直到队列为空

    伪代码

    int BFS(Node root, Node target) {

      Queue<Node> queue;

      Set<Node> set; // 用来存储访问过的节点

      queue.add(root);

      set.add(root);

      int instance = 0; // 标识根节点到目标节点的距离

           while(queue is not empty) {

        instance++;

        int queueSize;

                  for (index = 0; index < queueSize; index++) {

          node = queue.remove(); // 取队列根节点

             if (node is target node) {

            return instance;

          }

          add node next nodes in queue; // 将节点的所有临近子节点入队列

        }

      }

      return -1;

    }

    力扣对应习题

    https://leetcode-cn.com/problems/open-the-lock/

    https://leetcode-cn.com/problems/perfect-squares/

    个人观点 --- 不喜勿喷,欢迎指正,共同学习共同进步

    此类算法题的难点在于如何将给定的题目拆解,并应用到BFS中;没有什么捷径,需要深刻理解BFS思想,然后勤加练习吧。

  • 相关阅读:
    java获取服务器的ip和地址
    如何产生好的词向量
    谈谈评价指标中的宏平均和微平均
    在NLP中深度学习模型何时需要树形结构?
    Windows下MetaMap工具安装
    ML 感知机(Perceptrons)
    ML 神经网络 NeuralNetworks
    NLP-特征选择
    ML 逻辑回归 Logistic Regression
    ML 线性回归Linear Regression
  • 原文地址:https://www.cnblogs.com/sniffs/p/12042046.html
Copyright © 2011-2022 走看看