谈谈滑动窗口算法的思想

学过计算机网络的同学,都知道滑动窗口协议(Sliding Window Protocol),该协议是 TCP协议 的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。

滑动窗口算法其实和这个是一样的,只是用的地方场景不一样,可以根据需要调整窗口的大小,有时也可以是固定窗口大小。

滑动窗口算法(Sliding Window Algorithm)

Sliding window algorithm is used to perform required operation on specific window size of given large buffer or array.

滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作。

This technique shows how a nested for loop in few problems can be converted to single for loop and hence reducing the time complexity.

该技术可以将一部分问题中的嵌套循环转变为一个单循环,因此它可以减少时间复杂度。

简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,这样就降低了问题的复杂度,从而也达到降低了循环的嵌套深度。其实这里就可以看出来滑动窗口主要应用在数组和字符串上。

滑动窗口法的大体框架 

在介绍滑动窗口的框架时候,大家先从字面理解下:

  • 滑动:说明这个窗口是移动的,也就是移动是按照一定方向来的。

  • 窗口:窗口大小并不是固定的,可以不断扩容直到满足一定的条件;也可以不断缩小,直到找到一个满足条件的最小窗口;当然也可以是固定大小。

为了便于理解,这里采用的是字符串来讲解。但是对于数组其实也是一样的。滑动窗口算法的思路是这样:

  1. 我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。

  2. 我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符)。

  3. 此时,我们停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求(不包含 T 中的所有字符了)。同时,每次增加 left,我们都要更新一轮结果。

  4. 重复第 2 和第 3 步,直到 right 到达字符串 S 的尽头。

这个思路其实也不难,第 2 步相当于在寻找一个「可行解」,然后第 3 步在优化这个「可行解」,最终找到最优解。左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动。

蒙特卡罗树搜索算法(Monte Carlo Tree Search, MCTS)是一种用于决策制定的启发式搜索算法,特别适用于那些具有大量可能的状态和不完全信息的问题。它在许多领域都有广泛应用,在游戏中尤为著名。 MCTS的核心思想是通过模拟随机样本来评估候选行动的价值,并根据模拟结果进行选择。它通过构建一棵搜索树来组织和指导搜索过程。下面是MCTS的基本步骤: 1. 选择(Selection):从根节点开始,根据一定策略选择子节点,直到达到叶节点。选择策略可以使用Upper Confidence Bound(UCB)算法,平衡探索与利用之间的关系。 2. 扩展(Expansion):如果叶节点不是终止状态,那么根据可行的行动扩展新的子节点。 3. 模拟(Simulation):从扩展的子节点开始,使用随机策略或启发式策略模拟游戏的进行,直到达到终止状态,得到一个模拟结果。 4. 回溯(Backpropagation):将模拟结果反向传播到搜索树中,更新每个节点的统计信息,例如访问次数和收益。 通过不断重复以上步骤,MCTS搜索树会逐渐收敛于最佳行动。在每次决策时,选择访问次数最多的子节点作为最佳行动。 蒙特卡罗树搜索算法在围棋、国际象棋、扑克等复杂的博弈游戏中取得了显著的成功,尤其是在AlphaGo的实现中。它的优势在于能够处理大规模状态空间和不完全信息,并且不依赖领域专家的知识。此外,MCTS还可以用于其他领域的决策问题,如路径规划和资源分配等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值