From 205683f9690ff9231247ed18696ec64559eac393 Mon Sep 17 00:00:00 2001 From: Matthias Wisniowski Date: Wed, 30 May 2012 01:44:12 +0200 Subject: minfree_rhof --- AufgabeFFP8.hs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/AufgabeFFP8.hs b/AufgabeFFP8.hs index 436e6cb..fffc717 100644 --- a/AufgabeFFP8.hs +++ b/AufgabeFFP8.hs @@ -116,18 +116,26 @@ minfree_bhof xs = head $ divideAndConquer (b_indiv (length xs)) b_solve (b_divid -- minfree refined daq higher order +r_indiv :: (Int, [Int]) -> Bool +r_indiv (a, []) = True +r_indiv _ = False --- refined divide-and-conquer mittels higher order function ---minfree_rhof :: [Int] -> Int ---minfree_rhof = divideAndConquer r_indiv r_solve r_divide r_combine --- ---r_indiv :: (Int, [Int]) -> Bool ---r_indiv (a, xs) - --- optimised divide-and-conquer mittels higher order function ---minfree_ohof :: [Int] -> Int +r_solve :: (Int, [Int]) -> Int +r_solve (a, _) = a +r_divide :: (Int, [Int]) -> [(Int, [Int])] +r_divide (a, xs) + | length smaller == b-a = [(b, bigger)] + | otherwise = [(a, smaller)] + where + b = a + 1 + (length xs) `div` 2 + (smaller, bigger) = partition ( [Int] -> Int +r_combine _ (a:[]) = a +minfree_rhof :: [Int] -> Int +minfree_rhof xs = divideAndConquer r_indiv r_solve r_divide r_combine (0, xs) -- QuickCheck part -- cgit v1.2.3