首页 > 编程语言 >关于滑动窗口算法的应用场景

关于滑动窗口算法的应用场景

时间:2023-04-10 14:55:27浏览次数:48  
标签:场景 窗口 算法 right 数组 滑动 指针

算法原理

滑动窗口算法是一种基于双指针(又称滑动窗口)的算法,是一种常用的数据处理算法,通常用于解决数组或字符串中的子数组或子串问题。
滑动窗口算法的基本思想是使用两个指针left和right来定义一个窗口,窗口内包含满足特定条件的元素子序列,然后不断移动指针left和right来滑动窗口,以找到相应的子序列。

滑动窗口算法的具体步骤如下:

  • 初始化左指针left和右指针right,使它们都指向序列的起始位置。
  • 将窗口中的元素作为子序列进行处理,满足特定条件的子序列就是算法需要解决的问题。
  • 调整指针left和right,使得窗口向右移动:一般来说,先right边界先扩张,到达指定的位置(根据情况来定),然后left开始扩张,直到指定的位置。
  • 获得窗口内元素集合,执行业务逻辑,如记录最大值、最小值、求和等。
  • 重复上述步骤,直到滑动窗口遍历完整个序列。

由此可见,滑动窗口算法通过定义一个窗口并随着特定条件单向移动,使能够快速找到所需的子序列。
该算法也可以分类如下:

  • 固定窗口大小 —— 窗口大小是固定的,左右边界指针的扩张步长是固定的。
  • 可变窗口大小 —— 允许窗口大小随问题而变化,并且可以针对不同的问题选择最优的窗口大小。

常见应用场景

算法的优点在于时间复杂度为O(n),其中n为数组或字符串的长度。同时,由于只需要维护一个滑动窗口,算法的空间复杂度也比较低,通常为O(1)。因此滑动窗口算法可以将嵌套循环的问题,转换为单层循环问题,降低时间复杂度,提高效率。其可解决的问题,一般有如下特点:

  • 目标数据连续的、有序的、前后关联的数据集合。
  • 窗口可以通过单向递增(如由左向右滑动)实现移动

编程中常见的应用场景如下:

  • 业务接口限流模块,如电商秒杀限流、开放接口请求限流。
  • 离线统计业务场景:根据时间、账号等维度排序,以固定滑窗方式渐进执行直到跑完。
  • 算法题目如求解“子串的最大不同字符数”、“子数组的最大和”、“最长连续子数组”、“正数组中和为k的最长子数组”等,常见于针对字符串、数组、队列的运算。

限流场景应用

离线统计应用

标签:场景,窗口,算法,right,数组,滑动,指针
From: https://www.cnblogs.com/moffee/p/17285015.html

相关文章

  • 和我一起学 Three.js【初级篇】:1. 搭建 3D 场景
    欢迎关注「前端乱步」公众号,我会在此分享Web开发技术,前沿科技与互联网资讯。0.系列文章合集本系列第6,7章节支持微信公众号内付费观看,将在全系列文章点赞数+评论数>=500,1000时分别解锁发布。《0.总论》......
  • 【贪心算法】NO134 加油站
    134.加油站在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以绕环路行驶一周,则返......
  • 飞桨EasyDL落地三大工业场景,工业AI赋能产业升级
    数智化时代,如何利用人工智能实现传统生产方式的转型升级,成为摆在每个工业制造企业的一道必答题。工业生产、质检、管理等环节,持续产生海量数据。以机器视觉为代表的AI技术,广泛应用在3C电子、快消品制造、汽车零部件制造等多个领域,如瑕疵质检、仓储管理、生产安全。飞桨EasyDL零门槛......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-食谱智能生成从0到1快速入门——官网推荐的48
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-文章大纲智能生成器从0到1快速入门——官网推
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • jmeter-有一定时间规律的性能场景
    一定时间规律性能场景设计例如钉钉打卡、OA系统,只有上下班的时候才会使用,或者美团外卖,都是有一个高峰时间段,其他时间段都是不太忙,零零散散的人再用UltimateThreadGroupStartThreadsCount线程数InitialDelay,sec初始化时间单位秒StatupTime,sec......
  • 2023-04-09 有向图及相关算法
    有向图及相关算法1有向图的实现有向图的的应用场景社交网络中的关注互联网连接程序模块的引用任务调度学习计划食物链论文引用无向图是特殊的有向图,即每条边都是双向的改进Graph和WeightedGraph类使之支持有向图Graph类的改动WeightedGraph类的改动2有向图算......
  • 优先级队列PriorityQueue在算法问题中的使用
    文章目录优先级队列介绍与优先级队列有关的习题[179.最大数][918.环形子数组的最大和][1094.拼车][264.丑数II]前k个出现频率最高的数字用优先级队列合并k个有序链表滑动窗口的最大值其他:对二维数组自定义排序优先级队列介绍优先队列一般基于二叉堆实现,二叉堆:堆的根节点的优......
  • 通过MenuItem在场景中生成GameObject
    MenuItemAttribute允许你在主菜单中添加新的选项。而这个菜单选项来自于一个静态函数。publicclassTestMenuItem{//Createsanewmenuitem'Examples>CreatePrefab'inthemainmenu.[MenuItem("TestMenuItem/CreatePrefab")]staticvoidCreatePrefa......
  • 算法类问题
    木棒三角形(枚举)#include<iostream>#include<stdlib.h>usingnamespacestd;intmain()//木棒三角形有n根木棍挑出其中三根构成直角三角形输出面积最大的三角形面积输入n再输入每根三角形长度,n<100{ intn;//输入n根木棍再分别输入每根木棍的长度限制了n数量小于100 i......