紧凑通用k - 元组击中集:算法、复杂度与应用
1. DOCKS算法介绍
DOCKS算法旨在找到一个小的k - 元组集合,使其能够覆盖所有长度为L的序列。以下是该算法的具体步骤:
1. 生成一个阶为k的完整德布鲁因图G,并设置ℓ = L - k。
2. 使用Mykkeltveit算法找到一个去环顶点集X。
3. 从图G中移除集合X中的所有顶点,得到图G′。
4. 当图G′中仍然存在长度为ℓ的路径时,执行以下操作:
- 计算每个顶点处长度为i(0 ≤ i ≤ ℓ)的起始和结束路径的数量。
- 计算每个顶点的击中数。
- 从图G′中移除击中数最大的顶点,并将其添加到集合X中。
5. 输出集合X。
每次迭代使用动态规划在O(|Σ|kL)时间内计算所有顶点的击中数。迭代次数为1 + p,其中p是移除的顶点数。因此,总运行时间由步骤4 - 8主导,为O((1 + p)|Σ|kL)。
2. 复杂度分析
2.1 MINIMUM (k, L) - HITTING SET问题的NP - 难性
寻找特定数据集的击中集问题是NP - 难的,这促使我们设计通用的k - 元组集合。MINIMUM (k, L) - HITTING SET问题的定义如下:
- 实例:字母表Σ上长度为L的序列集合S和k。
- 有效解:k - 元组集合X,使得S ⊆ hit(X, L)。
- 目标:最小化|X|。
可以证明该问题是NP - 难的,通过将其从HITTING SET问题进行归约。具体步骤如下:
1. 给定HITTING SET问题的输入,即集合E
超级会员免费看
订阅专栏 解锁全文

5349

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



