中文

字符串网络频率的在线快速与简洁计算

数据结构与算法 2026-01-01 v3

摘要

字符串 SS 中重复子串 uu 的一次出现被称为净出现,如果将该出现向左或向右扩展会使出现次数减少到 1。子串 uu 在字符串 SS 中的净频率(NF)是指 uuSS 中的净出现次数。最近,Guo 等人 [SPIRE 2024] 提出了一种在线 O(nlogσ)O(n \log \sigma) 时间的算法,维护 O(n)O(n) 空间的数据结构,以 O(mlogσ+σ2)O(m\log \sigma + \sigma^2) 时间回答单一 NF 查询,并以 O(nσ2)O(n\sigma^2) 时间报告所有 NF 问题的答案。其中,nn 为输入字符串 SS 的长度,mm 为查询模式长度,σ\sigma 为字母表大小。由于计算字符串净频率最初是为中文语言处理而提出的,而 σ\sigma 可能非常大(可达数千),因此 σ2\sigma^2 项是其方法的主要缺陷。本文提出了改进的在线 O(nlogσ)O(n \log \sigma) 时间算法,单一 NF 查询时间缩短至 O(mlogσ)O(m \log \sigma),并以输出最优 O(NF+(S))O(|\mathsf{NF}^+(S)|) 时间报告所有 NF 问题的答案,其中 NF+(S)\mathsf{NF}^+(S) 为与正 NF 值配对的 SS 中子串的集合。我们指出,NF+(S)=O(n)|\mathsf{NF}^+(S)| = O(n) 永远成立。与 Guo 等人基于 Ukkonen 后缀树构建的算法不同,我们的方法基于 Weiner 后缀树构建。

关键词

引用

@article{arxiv.2410.06837,
  title  = {Faster and Simpler Online Computation of String Net Frequency},
  author = {Shunsuke Inenaga},
  journal= {arXiv preprint arXiv:2410.06837},
  year   = {2026}
}