当前位置: 首页 > news >正文

算法学习(19)—— 队列与 BFS

关于bfs

bfs又称宽搜,全称是“宽度优先遍历”,然后就是关于bfs的三个说法:“宽度优先搜索”,“宽度优先遍历”,“层序遍历”,这三个都是同一个东西,前面我们介绍了大量的深度优先遍历的题目已经衍生算法,对这类比较熟悉的

在前面讲解深搜之前,我们上一篇数据结构相关的文章是介绍栈的,也列举了一些与栈相关的题目:算法学习(十一)—— 栈-CSDN博客

纯队列的题目很少很少,队列这种数据结构大部分都是用来服务BFS算法的,所以我们就把BFS和队列放一起来介绍。

和深搜一样,宽搜不仅仅只应用在树形结构中,这篇文章只列举了部分在树中的应用,先熟悉下BFS算法,后面会再展开细讲 

部分OJ题详解

429. N叉树的层序遍历

429. N 叉树的层序遍历 - 力扣(LeetCode)

第一道题就是简单的开胃菜,题目很简单,就是按顺序返回每一层的节点,下面来分析下这道题:

  • 绝大部分的bfs题的代码类系都差不多,相当于有一个模板。因为从左往右遍历第一层后,要再次从最左边的节点继续往下遍历,所以我们是需要借助队列这个数据结构的,因为队列是先进先出的,遍历最左边节点时需要记录下,以便往下一层遍历时能找到最左边节点
  • 这第一题我们就详细一点介绍下层序遍历的步骤:
  • ①先搞一个队列,然后如果根节点不为空,让根节点入队列
  • ②然后就是一个循环,条件是队列不为空时,先拿出队头元素,把队头元素的所有孩子节点都入队列,然后pop掉队头元素,一直重复这步,直到队列为空,层序遍历完成‘
  • ③然后就是统计元素的时机,每次遍历时,先统计下队列里有多少元素,因为此时队列里元素的个数刚好是这一层元素的个数,然后按照数量执行步骤②即可
class Solution 
{
public:queue<Node*> q;vector<vector<int>> ret;vector<vector<int>> levelOrder(Node* root) {bfs(root);return ret;}void bfs(Node* root){if(root == nullptr) return;q.push(root); //先把根节点入队列while(!q.empty()){int size = q.size(); //记录此时队列元素个数,该个数代表本层节点的个数vector<int> v;for(size_t i = 0; i < size; i++){Node* cur = q.front(); //拿到队头元素q.pop();v.push_back(cur->val);for(auto e : cur->children) //依次把队头下一层节点入队列{q.push(e);}}ret.push_back(v);}}
};

103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

锯齿形遍历,就是先从左往右(包括根节点),再从右往左遍历,依次循环直到遍历完成,其它的和第一题是一样的:

  • 只需要在上一道题的基础上稍加修改即可;只需要把偶数行的结果在添加进最终数组之前,逆序一下即可
class Solution 
{queue<TreeNode*> q;vector<vector<int>> ret;bool e = true;
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {bfs(root);return ret;}void bfs(TreeNode* root){if(root == nullptr) return;q.push(root); //先把根节点入队列while(!q.empty()){int size = q.size();vector<int> v;for(size_t i = 0; i < size; i++){TreeNode* cur = q.front(); //拿到队头元素q.pop();v.push_back(cur->val);if(cur->left) q.push(cur->left);if(cur->right) q.push(cur->right);}if(e == true){ret.push_back(v);e = false;}else{reverse(v.begin(), v.end());ret.push_back(v);e = true;}}}
};

662. 二叉树的最大宽度

662. 二叉树最大宽度 - 力扣(LeetCode)

宽度定义为“最左节点和最右节点之间的距离”,在这道题中,将题目给的二叉树视作满二叉树,两端点中间会出现一些延申到这一层的空节点,并且这些空节点也计入长度,下面来分析下这道题:

解法一: 

  • 解法一:硬来;由于空节点也要计入长度,如果遇到空节点,把空节点也加入到队列里,然后后面遇到空节点时,默认加两个空节点即可
  • 但是这样搞会有问题,以示例二为例,由于9只有左孩子一个孩子,那么右孩子会当成空加入到队列,但是这样的话队列的长度就是8了,不符合要求;这个也可以解决,就是用一个变量empty,统计空节点的个数,比如从6开始,empty一直++,直到遇到不是空节点也就是7时,empty + 2就是我们需要的长度。这种解法理论可行,但是提交过后会超时,假设3000个节点,然后只有2两条路径,就是纯左边和右边一路干到底,那么这个时间复杂度就非常夸张了,如下图:

解法二

  • 解法二:利用数组存储二叉树的方式给节点编号;树是可以通过顺序的方式存储的,比如堆结构,就是用的数组形式
  • 我们先回一下用数组存储二叉树:默认根节点的下标是从1开始计数,然后按照层次遍历的顺序依次遍历并且入数组。所以就可以发现一个规律,对于每个节点都有:“假设一个节点下标是x,那么它的左孩子下标是2x,右孩子下标是2x + 1”:
  • 所以我们仍然创建一个队列,但是队列不再存int了,而是存一个键值对pair,first表示这个节点的指针,second表示这个节点的编号,然后对于左右孩子的下标就按照上面的公式入队列
  • 然后就是计算宽度,直接拿出队头和队尾的元素,然后让两个的下标相减再+1就是我们最终需要的值
  • 细节一:如果再优化的话,我们可以直接用数组vector<pair<TreeNode*, int>>来代替队列,因为对于不同的语言对于队列的实现是不一样的,有的队列的容器可以查队头队尾,有的只能查队尾
  • 细节二:下标又可能溢出,以解法一的极端情况为例,左右如果各有1500个节点,那么数量就是2的1500次方-1,这个数是非常大的,任何数据类型都存不下;但是当我们相减之后,即使结果溢出,结果也是正确的,因为数据的存储可以看作是一个环形的,比如char类型,如下图:
  • 整型也是同理,就算溢出,相减完之后结果依旧是正确的,但是C++中用int的话会直接报错,所以我们用无符号整数unsigned int来存下标就OK了;如果没想到用unsigned int,那么就可以用字符串来存这个数,然后最后减法的时候做一次高精度减法也是可以的

 

class Solution 
{vector<pair<TreeNode*, unsigned int>> v;unsigned int ret;
public:int widthOfBinaryTree(TreeNode* root) {bfs(root);return ret;}void bfs(TreeNode* root){v.push_back({root, 1}); //先把根节点放进去while(!v.empty()){auto& [x1, y1] = v[0]; //拿到首元素auto& [x2, y2] = v.back(); //拿到结尾元素ret = max(ret, y2 - y1 + 1);//遍历下一层vector<pair<TreeNode*, unsigned int>> tmp; //让下一层进入这个队列,然后覆盖掉前面那个即可for(auto& [x, y] : v){if(x->left) tmp.push_back({x->left, y * 2});if(x->right) tmp.push_back({x->right, y * 2 + 1});}v = tmp; //覆盖}}
};

515. 在每个树行中找最大值

515. 在每个树行中找最大值 - 力扣(LeetCode)

题目很简单,就算让我们找出一棵树中每一行的最大值然后返回即可:

  • 算法也很简单,就是在层序遍历的过程中,用一个变量记录下最大值,然后在进入下一次遍历之前记录一下最大值即可
class Solution 
{queue<TreeNode*> q;vector<int> ret;
public:vector<int> largestValues(TreeNode* root) {bfs(root);return ret;}void bfs(TreeNode* root){if(root == nullptr) return;q.push(root);while(!q.empty()){int tmp = INT_MIN;int sz = q.size();for(int i = 0; i < sz; i++){auto t = q.front();q.pop();tmp = max(tmp, t->val);if(t->left) q.push(t->left);if(t->right) q.push(t->right);}ret.push_back(tmp);}}
};

相关文章:

算法学习(19)—— 队列与 BFS

关于bfs bfs又称宽搜&#xff0c;全称是“宽度优先遍历”&#xff0c;然后就是关于bfs的三个说法&#xff1a;“宽度优先搜索”&#xff0c;“宽度优先遍历”&#xff0c;“层序遍历”&#xff0c;这三个都是同一个东西&#xff0c;前面我们介绍了大量的深度优先遍历的题目已经…...

python|利用ffmpeg按顺序合并指定目录内的ts文件

前言&#xff1a; 有的时候我们利用爬虫爬取到的ts文件很多&#xff0c;但ts文件只是视频片段&#xff0c;并且这些视频片段是需要按照一定的顺序合并的&#xff0c;通常ts文件合并输出格式为mp4格式 因此&#xff0c;本文介绍利用python&#xff0c;调用ffmpeg来批量的按自己…...

腾讯音乐:说说Redis脑裂问题?

Redis 脑裂问题是指&#xff0c;在 Redis 哨兵模式或集群模式中&#xff0c;由于网络原因&#xff0c;导致主节点&#xff08;Master&#xff09;与哨兵&#xff08;Sentinel&#xff09;和从节点&#xff08;Slave&#xff09;的通讯中断&#xff0c;此时哨兵就会误以为主节点…...

jmeter并发用户逐步递增压测找性能拐点

jmeter并发用户逐步递增压测找性能拐点 目的&#xff1a; 使用逐层递增的并发压力进行测试&#xff0c;找到单功能的性能拐点&#xff08;一般需要包含四组测试结果&#xff0c;拐点前一组&#xff0c;拐点一组&#xff0c;拐点后两组&#xff09;&#xff0c;统计响应时间、…...

跟着问题学3.2——Fast R-CNN详解及代码实战

R-CNN的不足 2014年&#xff0c;Ross Girshick提出RCNN&#xff0c;成为目标检测领域的开山之作。一年后&#xff0c;借鉴空间金字塔池化思想&#xff0c;Ross Girshick推出设计更为巧妙的Fast RCNN&#xff08;https://github.com/rbgirshick/fast-rcnn&#xff09;&#xff…...

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白&#xff0c;通过语言大模型百度进行搜索&#xff0c;磕磕绊绊的实现了初步效果&#xff0c;能有一些锁头效果&#xff0c;但识别速度不是非常快&#xff0c;且没有做敌友区分&#xff0c;效果不是非常的理想&#xff0c;但在4399小游戏中爽一下还是可以…...

软考高级:磁盘阵列(RAID)

** 概念讲解 ** 磁盘阵列是由多个磁盘组合成的一个大容量存储设备。它主要有以下几个作用&#xff1a; 提高存储容量&#xff1a;通过将多个磁盘组合在一起&#xff0c;可以获得比单个磁盘更大的存储容量。比如&#xff0c;一个磁盘的容量是 1TB&#xff0c;使用四个磁盘组成…...

梳理你的思路(从OOP到架构设计)_介绍Android的Java层应用框架05

1、认识ContentProvider...

torch.nn.LSTM介绍

torch.nn.LSTM 是 PyTorch 提供的一个高级封装,用于构建长短时记忆网络(LSTM)。相比手动实现,torch.nn.LSTM 更高效且支持批量处理、双向 LSTM、多层 LSTM 等功能,适合大多数实际应用。 LSTM基本原理 门控机制(Gating Mechanism)是深度学习中常见的一种设计,用于控制信…...

React 组件的通信方式

在 React 应用开发中&#xff0c;组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据&#xff08;父组件向子组件传递数据&#xff0…...

关于 覆铜与导线之间间距较小需要增加间距 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

使用seata实现分布式事务管理

配置 版本说明&#xff1a;springCloud Alibaba组件版本关系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系统中对数据库进行事务回滚&#xff0c;保证全局事务的一致性。 seata的使用…...

【机器学习】深度学习(DNN)

文章目录 1. 神经网络结构2. 训练步骤3. 反向传播4. 为什么深&#xff0c;而不是宽&#xff08;模块化&#xff09;5. 初始化参数能否全为0&#xff1f; 1. 神经网络结构 输入层隐藏层&#xff1a;用于特征转换输出层&#xff1a;用于分类技巧&#xff1a;将网络中的参数写成矩…...

C++ 设计模式:门面模式(Facade Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 代理模式 链接&#xff1a;C 设计模式 - 中介者 链接&#xff1a;C 设计模式 - 适配器 门面模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个一致&#…...

自动化测试之Pytest框架(万字详解)

Pytest测试框架 一、前言二、安装2.1 命令行安装2.2 验证安装 三、pytest设计测试用例注意点3.1 命名规范3.2 断言清晰3.3 fixture3.4 参数化设置3.5 测试隔离3.6 异常处理3.7 跳过或者预期失败3.8 mocking3.9 标记测试 四、以案例初入pytest4.1 第一个pytest测试4.2 多个测试分…...

YOLOv10-1.1部分代码阅读笔记-conv.py

conv.py ultralytics\nn\modules\conv.py 目录 conv.py 1.所需的库和模块 2.def autopad(k, pNone, d1): 3.class Conv(nn.Module): 4.class Conv2(Conv): 5.class LightConv(nn.Module): 6.class DWConv(Conv): 7.class DWConvTranspose2d(nn.ConvTranspose2d)…...

大模型-Ollama使用相关的笔记

大模型-Ollama使用相关的笔记 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09;Postman请求样例 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09; 安装Ollama完毕后&#xff0c; /etc/systemd/system/ollama.service进行如下修改&#…...

【机器学习】概述

文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数&#xf…...

什么是网络安全(Cybersecurity)?

不同组织机构对网络安全&#xff08;Cybersecurity或Cyber Security&#xff09;的定义不尽相同。从目标上来说&#xff0c;网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击&#xff0c;避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…...

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议&#xff0c;分为以下主要步骤&#xff1a; 1、建立连接&#xff08;三次握手&#xff09; 目的&#xff1a;保证双方建立可靠的通信连接。 过程&#xff1a; 1>客户端发送 SYN&#xff1a;客户端向服务器发送一个 SYN&#xff08;同步&…...

基于单片机的电梯模拟控制系统

摘要: 文章主要针对基于单片机的电梯模拟控制系统进行研究,指出基于单片机的电梯模拟控制系统应用优点,并在此基础上介绍单片机控制技术,分析单片机在电梯模拟控制系统中的具体应用。 关键词: 单片机;电梯;模拟控制系统 1 基于单片机的电梯模拟控制系统应用优点概述 1…...

区块链安全常见的攻击——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】

区块链安全常见的攻击分析——ERC777 重入漏洞 ERC777 Reentrancy Vulnerability【5】 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】1.1 漏洞合约1.2 漏洞分析1.3 攻击分析1.4 攻击合约1.5 hardhat…...

MusicFree - 免费播放全网歌曲!无广告开源网络音乐聚合播放器 (安卓电脑版)

大家平常听歌可能都会在 QQ 音乐、网易云音乐、酷狗、喜马拉雅等不同平台来回切换&#xff0c;体验其实很烦。曾经推荐过不少“聚合”音乐应用&#xff0c;比如 洛雪音乐助手、Listen1 等等。 最近又有一个新选择了&#xff01;MusicFree 是一款免费开源清爽无广告的音乐播放器…...

html+css+js网页设计 美食 美拾9个页面

htmlcssjs网页设计 美食 美拾9个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff0…...

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器&#xff0c;Key教程 首先需要准备一个域名&#xff0c;并将其指定到你的 rustdesk 服务器 ip 地址上&#xff0c;这里编译采用的是Github Actions &#xff0c;说白了是就workflows&#xff0c;可以创建一些自动化的工作流程&#xff0c;例如代码的检查&a…...

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…...

Spring Boot 学习笔记

学习代码第一步&#xff1a;如何写 Hello world &#xff1f; 1、新建项目 新建一个 Maven Java 工程&#xff0c;在 pom.xml 文件中添加 Spring Boot Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...

UML统一建模语言测试题汇总

2-UML概念模型测试 (单选题, 1.0 分) UML中的关系不包括&#xff08;&#xff09;。 A. 抽象 B. 实现 C. 依赖 D. 关联 我的答案:A正确答案: A 知识点&#xff1a; UML的构成 1.0分 (单选题, 1.0 分) 下列事物不属于UML结构事物的是&#xff08;&#xff09;。 A. 组件 B.…...

【微服务】SpringBoot 自定义消息转换器使用详解

目录 一、前言 二、SpringBoot 内容协商介绍 2.1 什么是内容协商 2.2 内容协商机制深入理解 2.2.1 内容协商产生的场景 2.3 内容协商实现的常用方式 2.3.1 前置准备 2.3.2 通过HTTP请求头 2.3.2.1 操作示例 2.3.3 通过请求参数 三、SpringBoot 消息转换器介绍 3.1 H…...

数据结构(哈希表(中)纯概念版)

前言 哈希表&#xff08;Hash Table&#xff09;是计算机科学中的一个基础而重要的数据结构&#xff0c;它广泛评估各种算法和系统中&#xff0c;尤其是在需要快速查找、插入和删除操作的场景中。由于其O( 1)的平均时间复杂度&#xff0c;存储表在性能要求较高的应用中表现得非…...

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网&#xff0c;下载 Node.js&#xff0c;上面有好几种下载方式&#xff0c;文中下载的是 zip 压缩包。 如图&…...

工作流并行网关退回思路

问题描述 在设计工作流时遇到并行的流程&#xff0c;会出现并行流程的退回&#xff0c;这里记录下想到的解决思路&#xff0c;后续问题会记录在这里。 流程图 这里是一个简单的流程图&#xff1a; 并行退回思路 若是正常流程退回&#xff0c;流程是&#xff1a; 获取回退…...

C#数学相关开发性能优化方法

本文Github地址&#xff1a;CSharp-MathOptimization.md 华为公司的C语言编程规范在开头就强调了&#xff1a; 一般情况下&#xff0c;代码的可阅读性高于性能&#xff0c;只有确定性能是瓶颈时&#xff0c;才应该主动优化。 本文讲述的方法没有经过大项目和大公司的检验&…...

vulnhub jangow靶机

1.扫描靶机IP arp-scan -l如果扫不到靶机的话根据以下配置 启动时点击第二个 按回车 继续选择第二个 按e进入编辑 删除"recovery nomodeset" 在末尾添加"quiet splash rw init/bin/bash" Ctrlx 启动进入如下界面 passwd修改root密码 重启电脑登录root修…...

配置搜索无人机

升级ubuntu内核 https://www.bilibili.com/video/BV11X4y1h7qN/?spm_id_from333.337.search-card.all.click 进入四个内核文件并安装 sudo dpkg -i *.deb安装ROS&#xff0c;PX4&#xff0c;XTDrone&#xff0c;QGC https://blog.csdn.net/qq_45493236/article/details/13…...

2-6-1-1 QNX编程入门之进程和线程(四)

阅读前言 本文以QNX系统官方的文档英文原版资料“Getting Started with QNX Neutrino: A Guide for Realtime Programmers”为参考&#xff0c;翻译和逐句校对后&#xff0c;对在QNX操作系统下进行应用程序开发及进行资源管理器编写开发等方面&#xff0c;进行了深度整理&…...

Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II NPM永久使用淘宝源安装 cnpm安装pnpm【推荐】see also: vscode常用插件引言 淘宝镜像:http://npm.taobao.org 和 http://registry.npm.taobao.org 已在 2022.06.3…...

2.微服务灰度发布落地实践(agent实现)

文章目录 前言java agent的介绍基础实现agent端 http服务实现agent端api接口 前言 据上一篇&#xff0c;设计方案的分析&#xff0c;综合考虑&#xff0c;最终决定,客户端采用agent方案实现&#xff0c;具本原因不再赘述&#xff0c; 感觉兴趣的小伙伴可以回头了解一下.该篇主…...

网络安全专业术语

网络安全专有名词详解 1.肉鸡 被黑客操控的终端设备&#xff08;电脑、服务器、移动设备等等&#xff09;&#xff0c;黑客可以随心所欲的操作这些终端设备而不会被发觉。 2.木马 表面上伪装成正常的程序&#xff0c;但是当这些程序运行时候就会获取整个系统的控制权限&#…...

SpringMVC核心、两种视图解析方法、过滤器拦截器 “ / “ 的意义

SpringMVC的执行流程 1. Spring MVC 的视图解析机制 Spring MVC 的核心职责之一是将数据绑定到视图并呈现给用户。它通过 视图解析器&#xff08;View Resolver&#xff09; 来将逻辑视图名称解析为具体的视图文件&#xff08;如 HTML、JSP&#xff09;。 核心流程 Controlle…...

ubuntu快速入门

1.进入某个文件夹 cd workspace/2.tab自动补全 3.列出当前文件夹所有文件 ls列出所有文件包括隐藏文件 ls -a 4.创建文件夹 mkdir linuxLearn 5.创建文件 gedit command.sh在commmand.sh键入 echo hello echo hi? echo how are you? PS:touch hello.txt(也可以创建新…...

HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐

在开发鸿蒙操作系统应用时&#xff0c;网络接口的实现往往是一个繁琐且重复的过程。为了提高开发效率&#xff0c;坚果派(nutpi.net)特别推出了一个非常实用的插件——JsonFormat。这款插件的主要功能是将JSON格式的数据直接转换为arkts的结构定义&#xff0c;让我们在编写接口…...

光谱相机与普通相机的区别

一、成像目的 普通相机&#xff1a;主要目的是记录物体的外观形态&#xff0c;生成人眼可见的、直观的二维图像&#xff0c;重点在于还原物体的形状、颜色和纹理等视觉特征&#xff0c;以供人们进行观赏、记录场景或人物等用途。例如&#xff0c;拍摄旅游风景照片、人物肖像等…...

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。 贝叶斯神经网络(Bayesian Neural Network) 贝叶斯神经网络(Bayesian Neural Network)1. BNN 的核心思想2. BNN 的优化目标3. BNN 的结构与特点4. BNN 的训练过程5. BNN 的优缺点6. …...

使用FFmpeg进行拉流和推流操作

FFmpeg是一款强大的多媒体处理工具&#xff0c;可以用于视频的录制、转换、推流和拉流等操作。下面将详细介绍如何使用FFmpeg进行拉流和推流操作。 1. FFmpeg推流操作 推流是将本地的音视频流推送到流媒体服务器上&#xff0c;例如主播将本地电脑上的画面推流到直播平台的流媒…...

flutter插件开发-ios

flutter插件开发是一个重要的技能&#xff0c;拓展flutter与原生的通信&#xff0c;将一些公用的东西封装&#xff0c;给不同的项目使用。 阅读前置&#xff1a; flutter基本通道调用 objective-c基础语法 ios项目基础知识 目录 1、创建一个插件项目2、项目结构3、编写原生代码…...

【代码随想录|完全背包问题】

518.零钱兑换|| 题目链接&#xff1a;518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; 这里求的是组合数&#xff0c;就是不强调元素排列的顺序&#xff0c;211和121是同一个数那种&#xff0c;要先遍历物品&#xff0c;这样的话我算出来的每个值才是按顺序121&…...

xss csrf怎么预防?

一、XSS&#xff08;跨站脚本攻击&#xff09;预防 XSS 是指攻击者向目标网站注入恶意脚本&#xff0c;从而在用户浏览器中执行。 1. 输入过滤 清理用户输入&#xff1a; 拦截或清理HTML特殊字符&#xff08;如 <, >, , ", &&#xff09;。使用安全库&#x…...

黑神话悟空游戏鼠标光标使用教程与下载

效果图&#xff1a; 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话&#xff1a;悟空》游戏中的角色和元素&#xff0c;具有以下特点&#xff1a; • 主题鲜明&#xff1a;光标设计紧扣游戏主题&#xff0c;采用了游戏中的元素&#xff0c;让玩家在使用电脑时也能感受到…...

<数据集>芝麻作物和杂草识别数据集<目标检测>

数据集下载链接 &#xff1c;数据集&#xff1e;芝麻作物和杂草识别数据集&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90181548数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1300张 标注数量(xml文件个数)&#xff1a;130…...