双调排序网络学习笔记

双调序列

若序列进行循环位移后能分割成两个单调的序列,则该序列被称为双调序列。

Batcher 定理

一个长度为偶数的双调序列分成前后等长的两部分,每两个对应位置元素调用比较器后,仍然得到两个双调序列,并且较小那部分的 \(\max\) 不大于较大那部分的 \(\min\)

把双调序列的走势画出来,把后半部分平移至与前半部分重叠,一旦走势相交出现额外的转折点就说明元素交换后所处部分产生了互换。对于先不增后不降再不增的双调序列,有如下四种情况:

其中绿色表示前半部分,红色表示后半部分,黄点表示额外的转折点。因为额外转折点最多只有一个,而且第一个元素不大于最后一个元素,所以得证。先不降后不增再不降的双调序列同理。

序列长度为 \(2^k\) 的双调排序

双调排序总体还是一种归并排序,只是合并时不基于数值。

递归排序左右区间,其中一个区间不增另一个区间不降,这样整个区间就是一个双调序列。然后不断应用 Batcher 定理,再次递归到最底层就能得到排好序的区间。

比较器调用次数 \(O(n\log^2n)\)

序列长度无要求的双调排序

对于序列长度不是 \(2^k\) 的序列,在递归分割双调序列时必然会遇到奇数长度的情况,没有直接的办法将元素归位到对应区间。

观察发现最多只有一个转折点的双调序列是比较特殊的。当左区间方向与排序方向相反右区间方向与排序方向相同,中点取在转折点右侧,每两个对应位置元素调用比较器后(直到较短区间最后一个元素),所有元素都能归位到对应区间并且右区间仍然最多只有一个转折点。这是因为转折点左侧越靠左的排序后越靠右,而转折点右侧到分割点这一段中的元素不可能到右区间去。

所以在递归排序左右区间时,左区间必须和整个区间排序方向相反,右区间必须和整个区间排序方向相同,确保初始符合上面的条件。这样当递归应用 Batcher 定理,整个区间长度 \(n\) 不为 \(2^k\) 时,只需令左区间长度为小于 \(n\) 的最大的 \(2^k\) 即可。

posted @ 2025-02-24 07:18  Sumering  阅读(134)  评论(0)    收藏  举报