22、滑动窗口中的最小缺失词及其应用

滑动窗口中的最小缺失词及其应用

1. Senft算法概述

Ukkonen算法可以在 $O(n)$ 时间内,通过从左到右处理长度为 $n$ 的单词,在线构建恒定大小字母表上的后缀树。为了将其应用于滑动窗口,且每次窗口移动的摊还时间为常数,需要解决两个额外问题:
- 删除窗口最左边的字母 :考虑当前窗口的最长重复前缀。当删除最左边的字母时,所有比这个前缀长的前缀都需要从树中移除,但最长重复前缀和所有更短的前缀将保留在树中。具体操作如下:
- 如果最长重复前缀对应一个显式节点,该节点是要删除的叶子节点的父节点。如果该节点只剩下一个子节点,则删除该节点并合并两条边;否则,不做任何操作。
- 如果最长重复前缀对应一个隐式节点,它等于最长重复后缀。在删除的叶子节点的位置创建一个新的叶子节点,用最长重复后缀的起始位置标记它,并相应地标记其入边。
- 在窗口移动时维护边标签 :假设通过归纳法,所有边标签相对于当前窗口都已正确定位。对于窗口的接下来 $m$ 次移动,仍然保持边标签的相同相对定位。在 $m$ 次移动后,通过自底向上遍历树重新计算边标签。由于 $m$ 次移动最多创建 $2m$ 个节点,每次移动的摊还时间为 $O(1)$。

2. 算法介绍

考虑一个长度为 $n$ 的单词 $y$,其字母表 $\Sigma$ 的大小为 $\sigma$。目标是维护大小为 $m$ 的滑动窗口的最小缺失词(MAWs)集合。即,对于所有连续的 $i \in [0, \ldots, n - m]$,计算 $M_m(i) = M(y[i \ldots i + m - 1])$。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值