【发布时间】:2016-12-19 09:17:38
【问题描述】:
我有 N 个比特串(每个大小为 M)X1[0..M], ..., XN[0..M]。我需要伪代码/算法来找到每个给定字符串中唯一的最小长度子序列(不一定是连续的)。例如,
如果字符串为 011011, 011000, 010010 ,则每个字符串的子序列 [2,4] (11, 10, 01) 不同。或子序列 [2, 4, 5] (111, 100, 010) 。或子序列 [4, 5] (11, 00, 10)。
但不是子序列 [0, 1, 5] (011, 010, 010) ---> 在每个字符串中不是唯一的。
编辑:1 <= M <= 1000, 2 <= N <= 10.
编辑:目前,我的解决方案是这样的:
子序列的最小长度将在ceil(log2(N)) 和N-1 之间。
所以,伪代码将是:
for i = ceil(log2(N)) to N-1 :
check all subsequence of size i
if any subsequence distinguish all N strings, return i
第一步可以通过生成所有组合 mCi 来完成。 第二步可以通过提取所有 N 个字符串的子序列并检查它们是否都不同来完成。 但是这个算法目前是指数级的复杂度。我想知道是否有更好的算法。
编辑:不,这不是家庭作业。在采访中被问到。
【问题讨论】:
-
这是什么应用程序?听起来像家庭作业。
标签: arrays algorithm substring subset bit