Ich lösen this programming problem, und ich überschreite das Zeitlimit mit meiner aktuellen Lösung. Ich glaube, dass die Lösung meines Problems die Memoisierung ist. Allerdings verstehe ich die Memoization-Lösungen nicht dokumentiert here.Memoisierung eines einzelnen Parameters in einer Multiparameter-Funktion in Haskell
Hier ist die primäre Funktion in meiner aktuellen Lösung.
maxCuts :: Int -> Int -> Int -> Int -> Int
maxCuts n a b c
| n == 0 = 0
| n < 0 = -10000
| otherwise = max (max amax bmax) cmax
where
amax = 1 + maxCuts (n - a) a b c
bmax = 1 + maxCuts (n - b) a b c
cmax = 1 + maxCuts (n - c) a b c
Diese Funktion dauert zu lange, wenn b und c relativ zu n klein sind. Ich würde einfach die Lösung kopieren, die sie für die faktorielle Funktion verwendet haben, aber diese Funktion benötigt nur einen Parameter. Ich habe vier Parameter, aber ich möchte nur die Memoization auf den ersten Parameter, n
. Beachten Sie, dass sich a
b
und c
in den rekursiven Aufrufen nicht ändern.
Das einfachste, was zu tun ist uncurry nur die Funktion, so gibt es, in der Tat, nur ein Argument: "maxCuts :: (Int, Int, Int, Int) -> Int" – user2297560