硬背包问题的新型通用算法
1. 复杂度分析
在分析算法复杂度时,若忽略记录解集 Sol 的最内层循环,对应 σM 的循环迭代执行时间约为 $\tilde{O}(S^{(1)}(\sigma_M) + S^{(2)}(\sigma_M))$,其中存在一个关于 n 的多项式因子,源于排序和搜索操作。对循环的所有迭代求和,总运行时间为 $\tilde{O}(S^{(1)} + S^{(2)}) = \tilde{O}(2^{n/2})$,除非 Sol 的大小大于 $\tilde{O}(2^{n/2})$。
在内存方面,存储 $S^{(1)} L$、$S^{(1)}_R$、$S^{(2)}_L$ 和 $S^{(2)}_R$ 的成本为 $O(2^{n/4})$。然而,存储 $S^{(1)}$ 的分区表示所需的内存为 $\max {\sigma_M} S^{(1)}(\sigma_M)$,且不能保证这个最大值一直很小。例如,当(前半部分的)所有 $a_i$ 值都是 M 的倍数时,$S^{(1)}(0)$ 的大小为 $2^{n/2}$。但一般情况下,不会出现这种糟糕情况,具体如下:
定理 2 :对于任意实数 $\epsilon > 0$ 和接近 $2^{(1/4 - \epsilon)n}$ 的模数 M ,对于至少 $1 - 2^{-4\epsilon n}$ 比例的、由 n 元组 $(a_1, \cdots, a_n)$
超级会员免费看
订阅专栏 解锁全文
911

被折叠的 条评论
为什么被折叠?



