diff options
Diffstat (limited to 'AufgabeFFP8.hs')
| -rw-r--r-- | AufgabeFFP8.hs | 26 |
1 files 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 | |||
| 116 | 116 | ||
| 117 | -- minfree refined daq higher order | 117 | -- minfree refined daq higher order |
| 118 | 118 | ||
| 119 | r_indiv :: (Int, [Int]) -> Bool | ||
| 120 | r_indiv (a, []) = True | ||
| 121 | r_indiv _ = False | ||
| 119 | 122 | ||
| 120 | -- refined divide-and-conquer mittels higher order function | 123 | r_solve :: (Int, [Int]) -> Int |
| 121 | --minfree_rhof :: [Int] -> Int | 124 | r_solve (a, _) = a |
| 122 | --minfree_rhof = divideAndConquer r_indiv r_solve r_divide r_combine | ||
| 123 | -- | ||
| 124 | --r_indiv :: (Int, [Int]) -> Bool | ||
| 125 | --r_indiv (a, xs) | ||
| 126 | |||
| 127 | -- optimised divide-and-conquer mittels higher order function | ||
| 128 | --minfree_ohof :: [Int] -> Int | ||
| 129 | 125 | ||
| 126 | r_divide :: (Int, [Int]) -> [(Int, [Int])] | ||
| 127 | r_divide (a, xs) | ||
| 128 | | length smaller == b-a = [(b, bigger)] | ||
| 129 | | otherwise = [(a, smaller)] | ||
| 130 | where | ||
| 131 | b = a + 1 + (length xs) `div` 2 | ||
| 132 | (smaller, bigger) = partition (<b) xs | ||
| 133 | |||
| 134 | r_combine :: (Int, [Int]) -> [Int] -> Int | ||
| 135 | r_combine _ (a:[]) = a | ||
| 130 | 136 | ||
| 137 | minfree_rhof :: [Int] -> Int | ||
| 138 | minfree_rhof xs = divideAndConquer r_indiv r_solve r_divide r_combine (0, xs) | ||
| 131 | 139 | ||
| 132 | -- QuickCheck part | 140 | -- QuickCheck part |
| 133 | 141 | ||
