小编Vas*_*liy的帖子

如何优化并行排序以改善时间性能?

我有一种算法可以对给定长度的列表进行并行排序:

import Control.Parallel (par, pseq)
import Data.Time.Clock (diffUTCTime, getCurrentTime)
import System.Environment (getArgs)
import System.Random (StdGen, getStdGen, randoms)


parSort :: (Ord a) => [a] -> [a]
parSort (x:xs)    = force greater `par` (force lesser `pseq`
                                         (lesser ++ x:greater))
    where lesser  = parSort [y | y <- xs, y <  x]
          greater = parSort [y | y <- xs, y >= x]
parSort _         = []

sort :: (Ord a) => [a] -> [a]
sort (x:xs) = lesser ++ x:greater
    where lesser …
Run Code Online (Sandbox Code Playgroud)

parallel-processing optimization haskell quicksort

10
推荐指数
1
解决办法
236
查看次数

如何在此示例中添加并行计算?

我有一种算法,可以在给定段上同步计算某个积分。我想使用Control.Parallel库,或者par :: a -> b -> b将并行计算添加到此算法。我怎样才能做到这一点?

integrate :: (Double -> Double) -> Double -> Double -> Double
integrate f a b =
  let
    step     = (b - a) / 1000
    segments = [a + x * step | x <- [0..999]]
    area x   = step * (f x + f (x + step)) / 2
  in sum $ map area segments
Run Code Online (Sandbox Code Playgroud)

algorithm parallel-processing haskell

8
推荐指数
1
解决办法
208
查看次数