Block swap algorithms
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
![]() | This article contains no links to other Wikipedia articles. (July 2019) |
In computer algorithms, it simple to swap two elements of an array. It is also simple to swap two non-overlapping regions of an array of equal size. However, it is not simple to swap two non-overlapping regions of an array in-place that are next to each other, but are of unequal sizes. Three algorithms are known to accomplish this: Bentley's Juggling, Gries-Mills, and Reversal.[1] All three algorithms are linear time O(N).
The reversal algorithm is the simplest to explain, using rotations. A rotation is an in-place reversal of array elements. This method swaps two elements of an array from outside in within a range. The rotation works for an even number of elements or an odd number of array elements. The reversal algorithm uses three in-place rotations to accomplish an in-place block swap:
- Rotate region A
- Rotate region B
- Rotate region AB
Gries-Mills and Reversal algorithms perform better than Bentley's Juggling, because of their cache-friendly memory access pattern behavior.
The Reversal algorithm parallelizes well, because rotations can be split into sub-regions, which can be rotated independently of others.
References
- ^ Jon Bentley, "Programming Pearls", pp. 13-15, 209-211.
This article needs additional or more specific categories. (July 2019) |