【发布时间】:2013-05-27 10:23:07
【问题描述】:
我有一个如下所示的矩阵:
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 |
我应该找出这个矩阵是否有一列全是 1。在这个矩阵中是第 4 列。据说时间复杂度是 O(n),内存是 O(1)。
这个矩阵表示一组(人)的二元关系。 n是集合的大小,所以矩阵的大小是n * n。
我可以看到 2 个可能的解决方案:
- 取第一列,通过它,如果看到零,跳到下一列,依此类推。但是这个算法最坏的情况是 O(n2);
- 下一个,如果我将得到所有列的总和,那么我可以在 O(n) 中给出答案。但是在任务条件下并没有说我们已经计算了总和。如果我计算它们,复杂度也将是 O(n2);
还有其他解决方案吗?
【问题讨论】:
-
n是矩阵的元素个数还是维数? -
您需要并行化您的算法以使用一个线程或进程处理一列。相机中的矩阵图像处理就是这样完成的。
-
@shazin 这不会改变算法的复杂性。
-
@shazin:并行化不会改变时间复杂度。
-
这个问题没有意义,除非你定义
n- 如果它是矩阵中元素的数量,那么 O(n),如果它是方阵的维数,那么 O( n^2).