滑动窗口机制的介绍

上周在学习网络通信的时候,发现滑动窗口协议还蛮有趣的。
简单地说,发送方和接收方各有一个窗口来处理帧的传输和确认。

2 02 3 年,我的一个朋友告诉我,发送者窗口中显示的是已发送但未确认的帧或可以发送的帧。
接收器窗口管理可以接收的帧。

例如,发送窗口大小为2 ,接收窗口大小为1 这意味着发送方可以连续发送两帧,而接收方一次只能接收一帧。

但是,不同协议的窗口大小可能不同,这隐含了窗口大小调整策略。
不确定这部分,但听起来很有趣。

顺便说一句,这取决于你。
你也想了解这个协议吗?

【hot100】最小覆盖子串【哈希、滑动窗口】

说白了,最小覆盖子串就是利用滑动窗口+哈希表来寻找满足条件的最小子串。
核心是动态维护窗口,直到找到最优解。
由于如何在记录最优解的同时有效地扩展和缩小窗口,这变得很复杂。

我们先来说说最重要的事情。
使用哈希表统计目标字符串t的字符频率(例如“ABC”为{'A':1 ,'B':1 ,'C':1 }),然后通过双指针左右移动窗口。
右首先向右扩展。
当窗口包含所有目标字符且数量达到标准时(例如window_variety等于t:3 中的字符类型数量),left向右收缩,寻找更小的子串。
去年我们运行这个项目时,当我们有3 000级数据时,这种方法比暴力枚举快了1 00多倍。

还有一点,缩小窗口时要特别注意。
例如,如果删除字符“A”后window_map[A]仍然等于t_map[A],则意味着window_variety需要减少。
很多人不注意这一点。
一开始我以为只要减少就可以了,但后来发现这是错误的。
这取决于被移除的关键人物是否是关键人物。
等等,还有一件事。
如果哈希表冲突处理不好就会超时,所以就得使用unordered_map。

最后提醒一下,在返回结果之前不要忘记检查min_len是否已更新,否则空字符串情况必须单独处理。
说实话,挺让人费解的,但是这个方法确实值得一试。