1. 程式人生 > >【平行計算】Bitonic Sort(雙調排序)基礎

【平行計算】Bitonic Sort(雙調排序)基礎

雙調序列

雙調序列(Bitonic Sequence)是指由一個非嚴格增序列X和非嚴格減序列Y構成的序列,比如序列(23,10,8,3,5,7,11,78)。

定義:一個序列a1,a2,…,an是雙調序列(Bitonic Sequence),如果:
(1)存在一個ak(1≤k≤n), 使得a1≥…≥ak≤…≤an成立;或者
(2)序列能夠迴圈移位滿足條件(1)

Batcher定理

將任意一個長為2n的雙調序列A分為等長的兩半X和Y,將X中的元素與Y中的元素一一按原序比較,即a[i]與a[i+n] (i < n)比較,將較大者放入MAX序列,較小者放入MIN序列。則得到的MAX和MIN序列仍然是雙調序列,並且MAX序列中的任意一個元素不小於MIN序列中的任意一個元素。

Bitonic merge(雙調合並)

假設我們有一個雙調序列,則我們根據Batcher定理,將該序列劃分成2個雙調序列,然後繼續對每個雙調序列遞迴劃分,得到更短的雙調序列,直到得到的子序列長度為1為止。這時的輸出序列按單調遞增順序排列。

由於每次劃分後問題長度都會減半,故所需要的劃分次數為log n。

這個應用雙調劃分來對雙調序列進行排序的過程稱為Bitonic merge(雙調合並)。


這裡寫圖片描述
合併一個有16個元素的雙調序列

這裡寫圖片描述
雙調合併網絡

Bitonic Sort(雙調排序)

對於兩個元素x,y,如果x<=y,則x,y都位於雙調序列的遞增部分,而遞減部分沒有元素,如果x>=y,則x,y都位於雙調序列的遞減部分,而遞增部分沒有元素,於是x和y構成一個雙調序列。因此,任何無序的序列都是由若干個只有2個元素的雙調序列連線而成。

於是,對於一個無序序列,我們按照遞增和遞減順序合併相鄰的雙調序列,按照雙調序列的定義,通過連線遞增和遞減序列得到的序列是雙調的。最終,我們可以將若干個只有2個元素的雙調序列合併成1個有n個元素的雙調序列。


這裡寫圖片描述
將無序的輸入序列轉換成雙調序列

如上圖,最終再對得到的雙調序列進行一次雙調合並,即可得到有序序列。

這是今天學到的雙調排序的一些基礎知識。雙調排序多用於平行計算,有空我再針對並行設計總結一下~