我需要转置一个由字符数组表示的方阵。是否有一种低于o(n^2)复杂度的方法来执行它?无论如何,最高效的缓存方式是什么?
你还可以在矩阵类中添加一个1位标志,将转置操作简化为对该标志进行异或操作O(1)。如果设置了转置标志,则所有矩阵元素访问运算符应该交换行索引和列索引。
这将始终需要O(NM)的时间,因为您必须为每个元素计算相应的转置坐标:
// char matrix[N * M]
// char transpose[N * M]
for(int i = 0; i < N*M; i++)
transpose[i] = matrix[ (M * (i % N)) + (i / N) ];
如果您正在处理NxN矩阵,则计算转置需要O(n^2)的时间。如果您不需要存储转置,您可以在反转索引时迭代它,并有效地完成相同的操作而无需额外的内存。