A Faster FPTAS for #Knapsack
Given a set W = {w_1,..., w_n} of non-negative integer weights and an integer C, the #Knapsack problem asks to count the number of distinct subsets of W whose total weight is at most C. In the more general integer version of the problem, the subsets are multisets. That is, we are also given a set {u_1,..., u_n} and we are allowed to take up to u_i items of weight w_i. We present a deterministic FPTAS for #Knapsack running in O(n^2.5ε^-1.5(n ε^-1) (n ε)) time. The previous best deterministic algorithm [FOCS 2011] runs in O(n^3 ε^-1(nε^-1)) time (see also [ESA 2014] for a logarithmic factor improvement). The previous best randomized algorithm [STOC 2003] runs in O(n^2.5√( (nε^-1) ) + ε^-2 n^2 ) time. Therefore, in the natural setting of constant ε, we close the gap between the Õ(n^2.5) randomized algorithm and the Õ(n^3) deterministic algorithm. For the integer version with U = _i {u_i}, we present a deterministic FPTAS running in O(n^2.5ε^-1.5(nε^-1 U) (n ε) ^2 U) time. The previous best deterministic algorithm [APPROX 2016] runs in O(n^3ε^-1(n ε^-1 U) ^2 U) time.
READ FULL TEXT