【发布时间】:2016-10-25 21:26:30
【问题描述】:
给定一个 2D 正方形 (n*n) 矩阵,我试图找出是否有一种方法可以在小于 O(n^2) 的时间内对矩阵的上三角形执行操作[最好线性时间]。请注意,矩阵元素是连续的,如示例所示。即:每行和每列中的所有值都已排序。我已经使用 O(n^2) 复杂度解决了这个问题。下面的例子:
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40
41 42 43 44 45
现在,如果我想对上三角形执行 XOR 操作,这意味着 XOR -ing 以下元素: 21^22^23^24^25^26^27^28^29^31^32^33^36^37^41 = 35,就是想要的结果。
换句话说,我基本上是异或:
21 22 23 24 25
26 27 28 29
31 32 33
36 37
41
我尝试通过生成二进制等效项来查找模式来使用 DP 来解决问题,但找不到任何一致的模式。
【问题讨论】:
-
这个问题有点含糊。所以假设你想要的只是计算上三角形的异或。 那么 O(n^2 / 2)=O(n^2) 是下限,因为您需要查看三角形中的每个元素(=n^2/2 个元素)。这可能会因某些计算而改变,但 xor 函数非常敏感(不可能进行太多修剪;要查看的最后一个值可能会改变所有位)。
-
@sascha 另一方面,如果矩阵包含 n*n 个元素,那将被视为输入的大小 -> O(n/2)。
-
是否有任何模式可以在二维矩阵中生成给定的数字?
-
该矩阵中有哪些可能的值?
-
当你说“连续”时,你的意思是元素
m[i+1] = m[i] + 1吗?
标签: algorithm optimization bit-manipulation big-o dynamic-programming