浅谈滑动窗口

news2024/11/17 12:35:53

滑动窗口是什么?
滑动窗口其实是一个想象出来的数据结构。有左边界L和有边界R。
举例来说:数组 arr = {3,1,5,7,6,5,8}; 其窗口就是我们规定的一个运动轨迹。
最开始时,边界LR都在数组的最左侧,此时没有包住任何数。
在这里插入图片描述
此时规定:
1.可以在任何时候让R只能往右滑动。此时一个数会从右侧进入窗口。直到滑动到终止位置8。因为再往右就没位置了。
2. 可以在任何时候让L只能往右滑动(但是不能超过R,到R右侧),此时一个数会从左侧出窗口。

在这种原则下,可以动态从窗口右侧进数,从窗口左侧出数。

R向右滑动经过了3,1,5,此时3个数依次从窗口右侧进入窗口。
在这里插入图片描述
此时R不动了,L向右滑动,那此时3这个数就从左侧出窗口。
在这里插入图片描述
规定好窗口后。因为LR可以在任何时候进行移动,所以此时窗口是个动态的。
那每次移动形成的窗口,客观上来讲都会有一个窗口内的最大值。那用什么办法可以来获取到窗口内最大值呢?

  1. 每次形成窗口,都进行遍历窗口内的值来取得最大值(复杂度太高)。
  2. 每次在形成窗口后,值在进出窗口时,可以迅速更新某种结构,以此来获取窗口内最大值。

双端队列
用双端队列(可以从头部进头部出、尾部进尾部出,时间复杂度( O ( 1 ) O(1) O(1)))来维护在任何状态下窗口内最大值的更新结构。

用双端队列维护最大值更新来举例:
一开始,假设窗口停留在数组左边,一个数没囊括,双端队列中没有任何东西。
在这里插入图片描述
此时,R向右移动一个位置,来看双端队列中是如何变化的。
R向右移动,包裹了索引0位置上的3这个数,从尾端加到双端队列中去,在它加入之前,双端队列是空的,直接加入。窗口头部代表窗口内最大值,此时最大值为3。
在这里插入图片描述
R再次向右滑动,囊括进索引1位置的1,因为没有破坏我规定的由大到小的原则,所以将1从尾端加入到队列中,此时队列有2个数,3和1,当前窗口内最大值为3。
在这里插入图片描述
R再次移动,来到了2位置的5,此时队列中有0位置3和1位置的1,因为要求队列中的数要从大到小的顺序。所以不能直接将5加进来,那么弹出。因为3和1都比5小,所以将3和1从尾端弹出(弹出后不再找回,值相等也弹出)。将5加入。
在这里插入图片描述
以此类推,这就是R向右移动时队列的更新情况。

双端队列的含义:
如果此时让窗口依次缩小,哪些位置的数会依次成为窗口内最大值。

上面描述了R向右移动时队列的情况。此时如果R来到了1位置后不动了,变成L向右移动,L++。
在这里插入图片描述
因为我L和R只能向右移动,不能回退,所以此时0位置的3会过期出队列,1位置1成为窗口内最大值。
在这里插入图片描述
为什么R右移时要将比它本小的或者相等的数踢出队列呢?
因为不能回退,R从0下标向N下标处走,后进入队列的都是下标大的数,而R不动,想要缩小窗口的话,只能L++,L向右移动后,也是从0 ~ N 的运动轨迹,所以先进队列的先过期。所以不担心踢出队列后数组最大值的问题。
而L++弹出时,只需要判断队列当中头部的值是否等于当前值即可,等于即弹出,后面新的头部值就是双端队列中新的最大值。

总结:
窗口滑动过程中,假设LR会划过数组中所有数字,双端队列中每个数最多只会进来1次出去1次,并且踢出后不再找回。窗口运动过程中,双端队列更新总代价 O ( N ) O(N) O(N),均摊每个数时间复杂度就是 O ( 1 ) O(1) O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1226758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试老鸟总结,Web/APP与接口测试测试流程总结,避背黑锅...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、web测试流程 …

数据结构——树状数组

文章目录 前言问题引入问题分析树状数组lowbit树状数组特性初始化一个树状数组更新操作前缀和计算区间查询 总结 前言 原题的连接 最近刷leetcode的每日一题的时候,遇到了一个区间查询的问题,使用了一种特殊的数据结构树状数组,学习完之后我…

智慧工地APP全套源码,智慧工地云平台

智慧工地平台 ,智慧工地源码,智慧工地APP全套源码 智慧工地以施工现场风险预知和联动预控为目标,将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场地进出关…

SOME/IP 协议介绍(五)指南

指南(信息性) 选择传输协议 SOME/IP直接支持互联网上使用最广泛的两种传输协议:用户数据报协议(UDP)和传输控制协议(TCP)。UDP是一种非常简洁的传输协议,仅支持最重要的功能&#…

03. Python中的语句

1、前言 在《Python基础数据类型》一文中,我们了解了Python中的基础数据类型,今天我们继续了解下Python中的语句和函数。 2、语句 在Python中常用的语句可以大致分为两类:条件语句、循环语句。 2.1、条件语句 条件语句就是我们编码时常见…

C语言ASCII码排序(1086: ASCII码排序(多实例测试))

题目描述 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。 输入:输入数据有多组,每组占一行,由三个字符组成,之间无空格。chu 输出:对于每组输入数据,输出一行,字符…

Codeforces Round 909 (Div. 3)(A~G)(启发式合并 , DSU ON TREE)

1899A - Game with Integers 题意:给定一个数 , 两个人玩游戏,每人能够执行 操作,若操作完是3的倍数则获胜,问先手的人能否获胜(若无限循环则先手的人输)。 思路:假如一个数模3余1或者2&#…

【具身智能评估2】具身视觉语言规划(EVLP)数据集基准汇总

参考论文:Core Challenges in Embodied Vision-Language Planning 论文作者:Jonathan Francis, Nariaki Kitamura, Felix Labelle, Xiaopeng Lu, Ingrid Navarro, Jean Oh 论文原文:https://arxiv.org/abs/2106.13948 论文出处:Jo…

Python PyQt 程序设置图标

源码运行时图标 第一步:阿里巴巴是两图标库下载喜欢的图标 iconfont-阿里巴巴矢量图标库 第二步:转化png为ico https://www.aconvert.com/cn/icon/png-to-ico/ 256x256为大图标 默认的32x32很小(不建议用) 转化后右键点击文件链接&…

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于金鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

【Android】Android Framework系列--CarUsbHandler源码分析

Android Framework系列–CarUsbHandler源码分析 本文基于Android12源码。 CarUsbHandler是Android Car提供的服务之一,其用车载USB连接的场景。 车载USB有其特殊应用场景,比如AndroidAuto、CarLife等。而Android的做法是在其原有的USB服务上&#xff0…

十七、Linux的组管理

1、Linux组基本介绍 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件所有者、所在组、其它组的概念 1.所有者 2.所在组 3.其他组 4.改变用户所在的组 2、文件/目录 所有者 一般为文件的创建者,谁创建了该文件,就自…

【图解算法】- 快乐数还能这么解?

一 - 前言 介绍:大家好啊,我是hitzaki辰。 社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的知识星球。 自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名&#xff…

MongoDB随记

MongoDB 1、简单介绍2、基本术语3、shard分片概述背景架构路由功能chunk(数据分片)shard key(分片键值) 4、常用命令 1、简单介绍 MongoDB是一个分布式文件存储的数据库,介于关系数据库和非关系数据库之间&#xff0c…

第 372 场 LeetCode 周赛题解

A 使三个字符串相等 求三个串的最长公共前缀 class Solution { public:int findMinimumOperations(string s1, string s2, string s3) {int n1 s1.size(), n2 s2.size(), n3 s3.size();int i 0;for (; i < min({n1, n2, n3}); i)if (!(s1[i] s2[i] && s2[i] s…

【智能家居】5、主流程设计以及外设框架编写与测试

目录 一、主流程设计 1、工厂模式结构体定义 &#xff08;1&#xff09;指令工厂 inputCmd.h &#xff08;2&#xff09;外设工厂 controlDevices.h 二、外设框架编写 1、创建外设工厂对象bathroomLight 2、编写相关函数框架 3、将浴室灯相关操作插入外设工厂链表等待被调…

内容运营工具:标签体系

一.分类和标签的区别 ■标签是扁平的&#xff0c;分类是层级的。 ■标签是精确的&#xff0c;分类是粗糙的。 ■标签是多维的&#xff0c;分类是一维的。 二.标签的本质&#xff1a;元数据 事实上&#xff0c;在数据领域&#xff0c;有一个鼎鼎大名的词汇与标签极其雷同&…

再高级的打工人也只是打工人!

再高级的打工人也只是打工人&#xff01; OpenAI CEO 奥特曼被罢免的事情人尽皆知「虽然&#xff0c;今天又复职了。。」&#xff0c;我们能从中学到什么呢&#xff1f; CEO 也能被裁&#xff0c;这应该是最近几年被裁名单里面&#xff0c;职级最高的一个人了吧。你再也不用担…

吐血整理,金融银行测试的“火“到底在哪里?银行测试真正实施...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行里的软件测试…

C#WPF中的实现读取和写入文件的几种方式

说明&#xff1a;C#中实现读取和写入的类根据需要来选择。 1、File类 File类是用于操作文件的工具类&#xff0c;提供了对文件进行创建、复制、删除、移动和打开单一文件的静态方法。但需要注意的是&#xff0c;WPF中使用File的类&#xff0c;需要先引用System.IO下的命名空间。…