滑动窗口的使用

一、定义与基本原理

滑动窗口是一种流量控制技术,也用于管理和处理数据流。它通过定义一个固定大小或可根据特定条件动态调整的窗口,在数据流或数据序列上滑动,以便高效地处理其中的数据。这种技术能够限制同时处理的数据量,从而控制资源消耗并提高处理效率。

二、类型与特点

  1. 固定窗口:窗口大小固定不变,通常用于数据流的分段处理。
  2. 动态窗口:窗口大小可以根据特定条件动态调整,用于适应变化的网络或数据流特性。

滑动窗口的核心思想是通过一个窗口在数据流或数据序列上滑动,逐步覆盖整个数据流或数据序列,同时根据窗口内的数据满足特定条件时进行相应处理

三、应用领域

  1. 网络通信

    • 在TCP协议中,滑动窗口机制用于传输控制,通过接收方返回的确认信息来控制数据的发送速率,优化网络吞吐量和防止数据丢失。
    • 滑动窗口不仅是一个顺序控制的工具,更是一个流量控制和拥塞控制的重要手段。
  2. 算法设计

    • 滑动窗口法经常用于解决涉及到子字符串或子数组的问题,例如寻找给定长度的最大/最小值,或满足特定条件的子序列。
    • 它可以用于求解最长无重复子串、最小覆盖子串、长度为k的最小子数组等经典问题。
    • 滑动窗口算法:通常会设置俩个指针,一个指向窗口的左边界,另一个指向窗口的右边界。开始时,窗口的大小为0,然后右指针向右移动,直到满足特定条件为止。一旦满足条件,窗口的大小就会增加,然后左指针向右移动,直到不再满足条件为止。这样,窗口会不断滑动,直到遍历完整个数组或字符串,从而找到满足条件的子数组或子字符串。
  3. 图像处理

    • 在图像处理领域,滑动窗口技术可以用于图像分割、特征提取等任务。
  4. 数据流处理

    • 在数据流处理系统中,滑动窗口技术用于对连续的数据流进行分段处理和分析。

四、工作机制与示例

以TCP协议中的滑动窗口为例,其工作机制如下:

  1. 接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。
  2. TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。
  3. 发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。
  4. 当滑动窗口为0时,发送方一般不能再发送数据包,但有两种情况除外:一是可以发送紧急数据,例如允许用户终止在远端机上的运行进程;二是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

五、优势与挑战

  1. 优势

    • 滑动窗口技术能够显著提高系统的效率和响应能力。
    • 它通过限制在任何给定时间可以发送或接收的数据包的数量,允许使用固定大小的序列号传送无限数量的数据包。
  2. 挑战

    • 选择合适的窗口大小是一个挑战,窗口过大可能导致资源消耗过多,窗口过小则可能影响处理效率。
    • 在处理边界数据时也需要特别注意,以避免出现错误或遗漏。

综上所述,滑动窗口是一种高效且灵活的数据管理和处理技术,在多个领域都有广泛的应用。通过合理设计和优化,滑动窗口可以广泛应用于各种数据密集型任务中。

算法题

1.求长度最小的子数组

int MinSubArrayLen(int target, std::vector<int>& nums)
{int len = INT32_MAX;int n = nums.size(), sum = 0;int left = 0, right = 0;for (; right < n; right++){sum += nums[right];while (sum >= target){if (sum == target) //如果想找等于的就加上这行len = len < right - left + 1 ? len : right - left + 1;sum -= nums[left++];}}return len == INT32_MAX ? 0 : len;
}int MaxSubArrayLen(int target, std::vector<int>& nums)
{int len = INT32_MIN;int n = nums.size(), sum = 0;int left = 0, right = 0;for (; right < n; right++){sum += nums[right];while (sum >= target){if (sum == target) //如果想找等于的就加上这行len = len > right - left + 1 ? len : right - left + 1;sum -= nums[left++];}}return len == INT32_MIN ? 0 : len;
}int main()
{std::vector<int> a = { 2,3,5,3,5,2,4,1,9,5,5 };int lenMin = MinSubArrayLen(17, a);  //输出为0int lenMax = MaxSubArrayLen(15, a);  //输出为5std::cout << lenMin << std::endl;std::cout << lenMax << std::endl;return 0;
}

2.无重复最长字串

采取哈希表统计字符个数,滑动窗口控制子串长度的操作,当right处于一个新位置就将其加入窗口,若当前字符的出现次数 > 1则表明当前字符串出现重复字符,此时让left所在位置的元素出窗口,直到当前字符出现次数 == 1

int MaxStringLen(std::string& src)
{int len = INT32_MIN, n = src.size();std::unordered_map<char, int> hash;int left = 0, right = 0;for (; right < n; right++){char in = src[right];hash[in]++;while (hash[in] > 1){char out = src[left++];hash[out]--;}len = len > right - left + 1 ? len : right - left + 1;}return len;
}int main()
{std::string s = "acbcag";int len = MaxStringLen(s);std::cout << len << std::endl;return 0;
}

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

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

相关文章

Python学习26天

集合 # 定义集合 num {1, 2, 3, 4, 5} print(f"num&#xff1a;{num}\nnum数据类型为&#xff1a;{type(num)}") # 求集合中元素个数 print(f"num中元素个数为&#xff1a;{len(num)}") # 增加集合中的元素 num.add(6) print(num) # {1,2,3,4,5,6} # 删除…

android开发

文章目录 android开发 类微信界面整体框架展示&#xff1a;主页Fragment_MainActivity2&#xff1a;1. 聊天界面2. 用户界面用户界面的跳转 3. 朋友圈界面4. 我的界面 android开发 类微信界面 整体效果展示&#xff1a; 整体框架展示&#xff1a; 4个主要的fragment页面&#…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去&#xff0c;比如说送到HDFS、Hbase&#xff0c;简单来说flume就是收集日志的。 Flume两个版本区别&#xff1a; ​ 1&…

vmware安装Ubuntu桌面版系统

1安装环境 vmware版本&#xff1a;VMware Workstation 17 Ubuntu版本&#xff1a;ubuntu-24.04.1-desktop-amd64.iso 文档时间&#xff1a;2024年11月 每一个Ubuntu的版本安装显示可能不一样&#xff0c;但安装方法是类似的 2镜像下载 Ubuntu官网&#xff1a;[https://ubun…

STL--map、set的使用和模拟实现

1.set 1.1 set的概念 set 是一种基于 平衡二叉搜索树&#xff08;通常是红黑树&#xff09; 实现的容器&#xff0c;它提供了有序集合的功能。set 用于存储唯一的元素&#xff0c;并且元素是按照某种顺序排列的&#xff08;通常是升序&#xff09;。 set 确实是一个关联式容…

软件测试之什么是缺陷

软件测试之什么是缺陷 1. 缺陷定义2. 缺陷判定标准3. 缺陷产生原因3.1 缺陷产生的原因3.2 缺陷的生命周期 4. 缺陷核心内容5. 缺陷提交要素6. 缺陷类型 1. 缺陷定义 软件在使用过程中存在的任何问题都叫软件的缺陷, 简称Bug. 2. 缺陷判定标准 3. 缺陷产生原因 3.1 缺陷产生的…

二叉树的遍历(手动)

树的遍历分四种&#xff1a; 层序遍历 前序遍历 中序遍历 后序遍历 层序遍历&#xff1a; 很好理解&#xff0c;就是bfs嘛&#xff08;二不二叉都行&#xff09; 前序遍历&#xff1a; 又叫先跟遍历&#xff0c;遍历顺序是根->左->右&#xff08;子树里也是&#…

Unix进程

文章目录 命令行参数进程终止正常结束异常终止exit和_exitatexit 环境变量环境变量性质环境表shell中操作环境变量查看环境变量设置环境变量 环境变量接口获取环境变量设置环境变量 环境变量的继承性 进程资源shell命令查看进程的资源限制 进程关系进程标识进程组会话控制终端控…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

关于离散模型优化的一份介绍

离散模型优化是运筹学和计算机科学领域中的一个重要分支&#xff0c;它主要研究如何在有限的、通常是计数的决策变量空间中寻找最优解。这类问题通常出现在资源分配、生产计划、物流管理、网络设计等实际应用场景中。在这篇文章中就将介绍离散模型优化中关于线性规划等部分内容…

hadoop_yarn详解

YARN秒懂 YARN定义基础架构ResourceManagerNodeManagerApplicationMasterContainer 工作流程资源调度器FIFO SchedulerCapacity SchedulerFair Scheduler 常用命令 YARN定义 YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Hadoop的一个框架&#xff0c;它负责…

【MYSQL】数据库日志 (了解即可)

一、错误日志 可以通过 tail查看文件的日志的&#xff0c;如果发生错误&#xff0c;就会在日志里出现问题。 二、二进制日志&#xff08;binlog&#xff09; BINLOG记录了insert delete update 以及 alter create drop 等语句。作用是灾难时的数据恢复&#xff0c;还有就是主…

接口测试整体框架

接口测试 1. 接口 接口&#xff0c;也叫api&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;&#xff0c;接口&#xff08;Interface&#xff09;是指不同软件组件或系统之间进行交互的点。接口定义了组件之间如何通信&#xff0c;包括…

递归搜索与回溯算法

递归搜索与回溯算法 名词解释 递归 在解决⼀个规模为n的问题时&#xff0c;如果满⾜以下条件&#xff0c;我们可以使⽤递归来解决&#xff1a; a. 问题可以被划分为规模更⼩的⼦问题&#xff0c;并且这些⼦问题具有与原问题相同的解决⽅法。 b. 当我们知道规模更⼩的⼦问题&…

基于java+SpringBoot+Vue的中小型医院网站设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

图神经网络研究综述(GNN),非常详细收藏我这一篇就够了!

图神经网络由于其在处理非欧空间数据和复杂特征方面的优势&#xff0c;受到广泛关注并应用于推荐系统、知识图谱、交通道路分析等场景。 大规模图结构的不规则性、节点特征的复杂性以及训练样本的依赖性给图神经网络模型的计算效率、内存管理以及分布式系统中的通信开销带来巨…

36.安卓逆向-壳-脱壳实战

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。第一…

办公耗材管理新纪元:系统化解企业挑战,助力高效运营

在当今竞争激烈的商业环境中&#xff0c;无论是大型企业还是中小型企业&#xff0c;办公耗材管理都是关乎企业运营效率与成本控制的关键环节。有效的办公耗材管理不仅能显著降低运营成本&#xff0c;还能提升整体工作效率&#xff0c;确保业务的顺畅进行。然而&#xff0c;许多…

2、 家庭网络发展现状

上一篇我们讲了了解家庭网络历史(https://blog.csdn.net/xld_hung/article/details/143639618?spm1001.2014.3001.5502),感兴趣的同学可以看对应的文章&#xff0c;本章我们主要讲家庭网络发展现状。 关于家庭网络发展现状&#xff0c;我们会从国内大户型和小户型的网络说起&…

时序论文20|ICLR20 可解释时间序列预测N-BEATS

论文标题&#xff1a;N-BEATS N EURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/pdf/1905.10437.pdf 前言 为什么时间序列可解释很重要&#xff1f;时间序列的可解释性是确保模型预测结果可靠、透明且易…