深度优先搜索DFS、广度优先搜索BFS

比较

  • 拿谚语打比方的话,深度优先搜索可以比作打破砂锅问到底不撞南墙不回头;广度优先搜索则对应广撒网,多敛鱼
  • 两者没有绝对的优劣之分,只是适用场景不同
  • 当解决方案离树根不远或搜索深度可变时,BFS通常更好,因为只需搜索所有数据中的一部分。另外BFS的一个重要优点是它可以用于找到无权图(有权图用Dijkstra算法,贪心思想)中任意两个节点之间的最短路径(不能使用DFS)
  • 如果树比较宽而且深度有限,DFS可能是更优选项,因为DFS比BSF更节省空间,另外由于使用递归,DFS更好写(BFS必须手动维护队列)

时间复杂度

都是O(n)

空间复杂度

都是O(n)

经典题目

  1. LeetCode 102题,二叉树的层序遍历
    思路:

    1. DFS,深度优先,用level记录当前层,如果当前层记录完毕就return,结果数组用level索引当前层,结果数组容量小于等于level就扩容,再DFS递归到下一层
    2. BFS,广度优先,用队列先进先出的特性,先确定当前层的节点数量,遍历当前层,把当前层的下一层所有节点入队,当前层节点出队并放到一个临时数组,再添加到结果
// DFS-Java

// BFS-Java

二分查找

本质

二分查找的本质是在一组单调有上下界可索引的数据中搜索目标值,三大条件缺一不可。

时间复杂度

O(logN)

空间复杂度

O(1)

经典题目

  1. LeetCode 69 题,x的平方根
    思路:

    1. 二分查找,因为y=x^2在x正半轴单调递增,且存在上下界1和x,所以可以使用二分查找逼近
    2. 牛顿迭代法,利用切线逼近,公式为 x = (x + a/x) / 2
// 二分查找

// 牛顿迭代法

贪心算法

本质

贪心的本质是通过每一步的局部最优,期望实现全局最优的一种算法思想。关键在于局部最优是否真的能实现全局最优。如果能实现,那么贪心算法基本上就是问题的最优解。

经典例题

  1. LeetCode 55题,跳跃游戏
    思路:

    1. 倒序贪心,看最后能不能到达第一个点
    2. 正序贪心,如果某个点可以跳到最后,那么它左边的点一定可以
// 倒序贪心

// 正序贪心

codeforces 贪心+优先队列_算法基础04-深度优先搜索、广度优先搜索、二分查找、贪心算法...相关推荐

  1. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  2. 深度优先搜索广度优先搜索

    1 概述 算法是作用于具体的数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于图这种数据结构的.主要原因是因为图的这种数据结构表达能力很强,大部分涉及搜索的场景都可以抽象成图. 图上的搜索算法 ...

  3. 6.1 图的深度优先和广度优先搜索

    图的广度优先搜索 图的的搜索算法主要分为广度优先搜索(breadth-first search或BFS)和深度优先搜索(depth-first search或DFS).首先讨论广度优先搜索算法. 称之 ...

  4. 图的遍历——深度优先搜索+广度优先搜索

    一:图的遍历--深度优先搜索 在本文其他内容中只是大体概括了主要的图论内容,更加详细的代码实现及算法分析在此给出. 深度优先搜索(DFS)类似树的先序遍历. 假设初始状态是图中所有顶点未曾被访问,则深 ...

  5. Python 实现图的深度优先和广度优先搜索

    在介绍 python 实现图的深度优先和广度优先搜索前,我们先来了解下什么是"图". 1 一些定义 顶点 顶点(也称为"节点")是图的基本部分.它可以有一个名称 ...

  6. 深度优先搜索 广度优先搜索理解

    深度优先搜索广度优先搜索 1. 什么是 "搜索" 算法 我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的. 图上的搜索 ...

  7. 实验题7.1 实现二分查找的算法

    [实验目的] (1)掌握查找的概念: (2)熟练掌握二分查找的原理及实现方法. [实验准备] (1)阅读教材中二分查找的相关内容: (2)熟悉二分查找的算法. [实验要求] (1)采用函数调用的方式完 ...

  8. 邻接矩阵的深度优先和广度优先搜索

    c语言中图的邻接矩阵的深度优先和广度优先搜索 #include<stdio.h> #include<stdlib.h> typedef struct {int vexs[7]; ...

  9. 深度优先和广度优先搜索

    目录 前言 1 深度优先搜索 2 广度优先搜索 3 深度优先和广度优先的比较 前言 最近面试,被问到了深度优先和广度优先搜索,这个我似曾相识,曾经大学的时候学到过,但是由于这几年的工作都未接触到,所以 ...

最新文章

  1. LIVE 预告 | 华为诺亚韩凯:Transformer in Transformer
  2. apache2 cgi配置
  3. matlab神经模糊推理系统
  4. 奔跑了24年,中国零售业会员制到底该怎么玩?
  5. BOOST_CONSTANTS_GENERATE宏相关用法的测试程序
  6. 16个经典面试问题回答规律
  7. css盒子模型圆形运用,【前端】CSS3学习笔记(三)——盒子模型
  8. 高一计算机网络技术应用计划,高一计算机网络应用基础教学计划
  9. Text段、Data段和BSS段
  10. 北京欢迎你 (歌词)
  11. 微课|《Python编程基础与案例集锦(中学版)》第2章(2)
  12. [WPF]有Focus(), 那Unfocus()呢?
  13. uploadify php 重命名,关于uploadify上传插件获取文件名问题
  14. 第十届泰迪杯数据挖掘挑战赛A题解题思路附代码
  15. 怎么将mp3音乐转成ogg格式
  16. 覆盖和覆盖D2D通信网络的传输容量分析(Matlab代码实现)
  17. TVP大佬组队,吐槽鹅厂数据库?!
  18. Js isNaN()和Number.isNaN()、isFinite() 和 Number.isFinite()
  19. MATLAB实现2ASK,2PSK,2FSK
  20. Some NCCL operations have failed or timed out.

热门文章

  1. linux系统修改为静态IP地址
  2. Python常用第三方库大盘点
  3. IT桔子分布式项目1
  4. 大数据 自学视频资料,纯分享
  5. 小程序剖析 | 小程序中Page的数据设置
  6. 深度 | 理解深度学习中的卷积
  7. 登录iis7 网站服务器上网站网页可以访问 但远程访问网站网页不能访问的解决方法
  8. 每天进步一点点《SVD学习》
  9. Leetcode--8
  10. 【图像处理】灰度加权距离变换(GWDT)