让我们考虑内部表示为1维数组的矩阵。 例如,矩阵(3,4)实际上是一个数组(比如说是double类型)或3 * 4个元素。这是内存布局'矩阵:
00 01 02 03
04 05 06 07
08 09 10 11
因此,它很容易在矩阵的所有元素上迭代(逐行,从左到右):它只是一个从0到11的32位整数。这是转置的样子:
00 04 08
01 05 09
02 06 10
03 07 11
什么是(快速)算法,将一个 32位整数表示为转置矩阵的第i个元素(逐行,从左到右)返回相应的索引内部代表?单身我的意思是“增量”。算法不是我正在寻找的,该函数只是将一个32位整数(加上行数和列数)作为输入,并输出一个32位整数。我提到了逐位运算符,因为它可能是解决问题的最快方法,但任何有效的解决方案都足够了。 在上面的例子中:
0 --> 0
1 --> 4
2 --> 8
3 --> 1
4 --> 5
5 --> 9
6 --> 2
...
此外,需要对行数和列数施加什么限制(如果有的话)(我们已经将num_row * num_col置于32位整数中),以确保算法有效。
谢谢!
答案 0 :(得分:0)
只要维度很小,就可以使用常量作为查找表:
0x4cd0b73a62951840 >> (x*4)) & 15
如果它们稍微大一些,你可以把它分成例如生成结果的高位和低位:
((0x00fea540 >> (x*2)) & 3) | (((0x00924924 >> (x*2) & 3) << 2))
但最终,直接的方法会更快。