【平行計算】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個元素的雙調序列。
將無序的輸入序列轉換成雙調序列
如上圖,最終再對得到的雙調序列進行一次雙調合並,即可得到有序序列。
這是今天學到的雙調排序的一些基礎知識。雙調排序多用於平行計算,有空我再針對並行設計總結一下~