2011-02-17 48 views

回答

10

對於m個線程,給每個線程一個n/m個連續數字的塊,重疊1個數字。在每個線程中,檢查它被分配的順序是否按排序順序排列。如果所有的子序列都被排序,那麼整個序列就被排序。

實例:

[1, 4, 5, 6, 11, 42] => [1, 4, 5, 6*] and [6, 11, 42] with 2 threads 
[1, 4, 5, 6, 11, 42] => [1, 4, 5*], [5, 6, 11*] and [11, 42] with 3 threads 

*這是1

該溶液的重疊具有複雜度O(N/M)。

+0

如果我們在分割它們之前檢查邊界元素(沒有重疊),則可能會更高效。當然,對於較少數量的線程來說效率更高,因爲複雜度變爲O(m +(n/m));然而,這將形成一個更好的短路代碼來驗證在啓動線程之前是否對邊界進行了排序。 –