【发布时间】:2014-08-30 21:37:24
【问题描述】:
给出了n 行和m 列的二进制矩阵。 n 和 m 最多可以达到 2000 个。
我们需要知道,是否可以删除一列,这样剩余矩阵的行将是唯一的。
n = 3 和 m = 4 的示例:
1010
0001
1001
答案是是的。我们可以删除第二列,剩下的行(110、001、101)将是唯一的。
n = 4 和 m = 2 的示例:
00
01
10
11
答案是否。无论我们选择哪一列,0 和 0 行都将保留。
我have O(m*m*n) 蛮力算法。我通过删除每一列来检查行的唯一性。
你知道更快的算法吗?
【问题讨论】:
-
在删除列之前,您是否假设行是唯一的?如果可能,您是否需要知道要删除哪一列?
-
@user3923424 我不想知道要删除哪一列。他们也没有这样的假设
-
你的实现不是 O(mmn*n) 吗?对于每 m 列,您正在检查 (m-1)*n 矩阵中的行是否唯一。检查行是否获取每 n*(n-1) 对行并比较它们,
testing[i]==testing[j]。但是字符串比较是 O(m),而不是 O(1)。 -
行必须已经是唯一的,否则任务是不可能的——删除一列永远不会使两个相同的行不同。根据鸽巢原理,如果 n > 2^m 也是不可能的。
标签: algorithm language-agnostic