From 8e606aaf3e8233bdf15d9861cedd094f26e57246 Mon Sep 17 00:00:00 2001 From: Joppe Geluykens Date: Wed, 4 Jan 2017 16:42:18 +0100 Subject: [PATCH] Voeg bottom-up implementatie toe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reden: is een heel stuk efficiƫnter. Bron: "Prolog programming for artificial intelligence", Ivan Bratko, 1e editie - p. 196 --- .../Prolog/oefenzitting 2/Oefening 3.pl | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/semester1/DT/oefenzittingen/Prolog/oefenzitting 2/Oefening 3.pl b/semester1/DT/oefenzittingen/Prolog/oefenzitting 2/Oefening 3.pl index 66e6d6c..d65dd8b 100644 --- a/semester1/DT/oefenzittingen/Prolog/oefenzitting 2/Oefening 3.pl +++ b/semester1/DT/oefenzittingen/Prolog/oefenzitting 2/Oefening 3.pl @@ -12,8 +12,14 @@ % voor positie 5 wordt de som berekend van 3 en 4 % Het cijfer dat op positie 3 staat wordt dus meer dan 2 keer berekend, ook positie 4 wordt opnieuw berekend, % terwijl we deze al weten. +% +% time(fib(25,R)). : +% 300,097 inferences, 1.476 CPU in 1.476 seconds (100% CPU, 203329 Lips) % Betere methode is door een lijst op te stellen tot het benodigde nummer: +% +% time(fib2(50000,R)). : +% 99,999 inferences, 0.300 CPU in 0.300 seconds (100% CPU, 333319 Lips) fib2(X,Y) :- fib2(X,Y,[1,0]). fib2(1,0,_):- !. @@ -22,3 +28,20 @@ X1 is X - 1, R1 is A + B, fib2(X1,Y,[R1,A,B|Rest]). + +% Bottom-up implementatie (bron: "Prolog programming for artificial intelligence", Ivan Bratko, 1e editie - p. 196) +% +% time(fib3(50000,R)). : +% 199,995 inferences, 0.198 CPU in 0.198 seconds (100% CPU, 1010524 Lips) +fib3(1,0). +fib3(N,R) :- + forwardfib(2,N,0,1,R). + +forwardfib(M,N,_,F2,F2) :- + M >= N. + +forwardfib(M,N,F1,F2,F) :- + M < N, + MM is M + 1, + FF is F1 + F2, + forwardfib(MM,N,F2,FF,F).