The text-to-pattern Hamming distances problem asks to compute the Hamming distances between a given pattern of length $m$ and all length-$m$ substrings of a given text of length $n\ge m$. We focus on the $k$-mismatch version of the problem, where a distance needs to be returned only if it does not exceed a threshold $k$. We assume $n\le 2m$ (in general, one can partition the text into overlapping blocks). In this work, we show data structures for the dynamic version of this problem supporting two operations: An update performs a single-letter substitution in the pattern or the text, and a query, given an index $i$, returns the Hamming distance between the pattern and the text substring starting at position $i$, or reports that it exceeds $k$. First, we show a data structure with $\tilde{O}(1)$ update and $\tilde{O}(k)$ query time. Then we show that $\tilde{O}(k)$ update and $\tilde{O}(1)$ query time is also possible. These two provide an optimal trade-off for the dynamic $k$-mismatch problem with $k \le \sqrt{n}$: we prove that, conditioned on the strong 3SUM conjecture, one cannot simultaneously achieve $k^{1-\Omega(1)}$ time for all operations. For $k\ge \sqrt{n}$, we give another lower bound, conditioned on the Online Matrix-Vector conjecture, that excludes algorithms taking $n^{1/2-\Omega(1)}$ time per operation. This is tight for constant-sized alphabets: Clifford et al. (STACS 2018) achieved $\tilde{O}(\sqrt{n})$ time per operation in that case, but with $\tilde{O}(n^{3/4})$ time per operation for large alphabets. We improve and extend this result with an algorithm that, given $1\le x\le k$, achieves update time $\tilde{O}(\frac{n}{k} +\sqrt{\frac{nk}{x}})$ and query time $\tilde{O}(x)$. In particular, for $k\ge \sqrt{n}$, an appropriate choice of $x$ yields $\tilde{O}(\sqrt[3]{nk})$ time per operation, which is $\tilde{O}(n^{2/3})$ when no threshold $k$ is provided.
翻译:文本到窗外的距离问题要求计算一个给定的长度 $ 美元和所有长度- 美元 美元 美元 长度 美元 美元 美元 。 我们关注一个问题 的 $ 美元 美元, 只有当它不超过一个阈值时, 才会返回一个距离 。 首先, 我们假设 $\ le 2 美元 (一般情况下, 我们可以将文本分割成重叠的区块 。 在此工作中, 我们为这个问题的动态版本显示数据结构支持两个操作 : 更新在模式或运行中进行单字母替换 美元 美元 。 以 美元 美元 美元, 美元 美元 美元 。 我们显示一个数据结构 $\ 美元 美元 美元 更新 和 美元 美元 。 然后, 我们显示 美元 (k) 的动态版本, 美元 更新和 美元 美元 运行运行 美元 美元 。