Given a multiset $A = \{a_1, \dots, a_n\}$ of positive integers and a target integer $t$, the Subset Sum problem asks if there is a subset of $A$ that sums to $t$. Bellman's [1957] classical dynamic programming algorithm runs in $O(nt)$ time and $O(t)$ space. Since then, much work has been done to reduce both the time and space usage. Notably, Bringmann [SODA 2017] uses a two-step color-coding technique to obtain a randomized algorithm that runs in $\tilde{O}(n+t)$ time and $\tilde{O}(t)$ space. Jin, Vyas and Williams [SODA 2021] build upon the algorithm given by Bringmann, using a clever algebraic trick first seen in Kane's Logspace algorithm, to obtain an $\tilde{O}(nt)$ time and $\tilde{O}(\log(nt))$ space randomized algorithm. A SETH-based lower-bound established by Abboud et al. [SODA 2019] shows that Bringmann's algorithm is likely to have near-optimal time complexity. We build on the techniques used by Jin et al. to obtain a randomized algorithm running in $\tilde{O}(n+t)$ time and $\tilde{O}(n^2 + n \log^2 t)$ space, resulting in an algorithm with near-optimal runtime that also runs in polynomial space. We use a multipoint evaluation-based approach to speed up a bottleneck step in their algorithm. We also provide a simple polynomial space deterministic algorithm that runs in $\tilde{O}(n^2t)$ time and $\tilde{O}(n \log^2 t)$ space.
翻译:给定一个由正整数构成的多重集 $A = \\{a_1, \\dots, a_n\\}$ 和一个目标整数 $t$,子集和问题询问是否存在 $A$ 的一个子集,其元素之和等于 $t$。Bellman [1957] 的经典动态规划算法运行时间为 $O(nt)$,空间复杂度为 $O(t)$。此后,许多研究工作致力于降低算法的时间与空间开销。值得注意的是,Bringmann [SODA 2017] 采用两步着色编码技术,提出了一种随机算法,运行时间为 $\\tilde{O}(n+t)$,空间复杂度为 $\\tilde{O}(t)$。Jin、Vyas 和 Williams [SODA 2021] 在 Bringmann 算法的基础上,借鉴了 Kane 在对数空间算法中首次使用的巧妙代数技巧,提出了一种运行时间为 $\\tilde{O}(nt)$、空间复杂度为 $\\tilde{O}(\\log(nt))$ 的随机算法。Abboud 等人 [SODA 2019] 基于 SETH 建立的下界表明,Bringmann 算法的时间复杂度很可能接近最优。我们在 Jin 等人所用技术的基础上,提出了一种随机算法,运行时间为 $\\tilde{O}(n+t)$,空间复杂度为 $\\tilde{O}(n^2 + n \\log^2 t)$,从而在保持接近最优运行时间的同时,实现了多项式空间复杂度。我们采用基于多点求值的方法,加速了其算法中的一个瓶颈步骤。此外,我们还提供了一种简单的多项式空间确定性算法,运行时间为 $\\tilde{O}(n^2t)$,空间复杂度为 $\\tilde{O}(n \\log^2 t)$。