经过一番尝试和尝试/绊脚石之后,我认为我已经开始理解,尽管数学对我来说仍然很困难。我认为它是这样的:
确定换位的置换周期(这可以在实际数据传输期间或之前完成)。公式
to = 2*from mod (M*N - 1), where M = 2, N =array length / 2可以用来查找索引目标(排列)。(因为我们知道M =
2,所以我简化了该问题的公式。)访问索引的标记可以帮助确定下一个循环的开始(从技术上讲,可以使用循环计算而不是位集作为标记,仅保留下一个循环开始(在内存中)。临时变量保存从起始地址到循环结束的数据。
总之,这可能意味着两个临时变量,循环计算和每个数组元素就位移动。
例如:
arr = 0,1,2,3,4,5,6,7,8,9destinations: 0,2,4,6,8,1,3,5,7,9start = 1, tmp = arr[1]cycle start5->1, 7->5, 8->7, 4->8, 2->4, tmp->2cycle endnot visited - 3start = 3, tmp = arr[3]cycle start6->3, tmp->6cycle endTransposition complete.
任何问题?
随意提问,请访问http://en.wikipedia.org/wiki/In-
place_matrix_transposition



