Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- Laufzeit durch Speicher ersetzen (http://www.informatikerboard.de/board/thread.php?threadid=3473)


Geschrieben von Olaf3577 am 18.02.2017 um 17:53:

  Laufzeit durch Speicher ersetzen

Meine Frage:
Guten Tag,

Wie kann man bei der mehrfachen Berechnung der Fakultät Laufzeit durch Speicher ersetzen?



Meine Ideen:
Nach etwas Recherche würde ich sagen: -über Rekursion und Zwischenspeicherung



Geschrieben von eulerscheZahl am 18.02.2017 um 18:16:

 

Rekursion ist schlecht, wenn du schnell sein willst. Eine einfache Schleife ist schneller. Zwischenspeichern kann Sinn machen - je nachdem wie oft du die Fakultät brauchst. Wenn du das Ergebnis ständig brauchst, ist es schnell im Cache und du sparst Zeit. Bei nur wenigen Zugriffen kann das Nachschlagen länger dauern als neu berechnen.



Geschrieben von ed209 am 19.02.2017 um 16:36:

 

Hi

Die Frage ist etwas vage, aber hier ein naiver Ansatz in python (ungetested):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
calculated = 1
faculty = dict()
faculty[1] = 1

def getFaculty(n):
	if n>calculated:
		for i in range(calculated+1, n):
			faculty[i]=faculty[i-1]*i
	return faculty[n]


Kurz: Merk dir alle Zwischenergebnisse.
Bestimmt gibt es schlauere Wege die Fakultaet zu berechnen, aber Du hast nicht beschrieben was Dein Ursprungsalgorithmus ist smile

Es wuerde auch mit Rekursion funktionieren, das ueberlasse ich Dir als Uebungsaufgabe Augenzwinkern

Gruss,
ED



Geschrieben von eulerscheZahl am 19.02.2017 um 16:38:

 

Auch ungetestet, aber das sieht mir falsch aus:
faculty[i]=[i-1]*i, vor [i-1] fehlt die Fakultät.



Geschrieben von ed209 am 19.02.2017 um 16:41:

 

Zitat:
Original von eulerscheZahl
Auch ungetestet, aber das sieht mir falsch aus:
faculty[i]=[i-1]*i, vor [i-1] fehlt die Fakultät.


Wollte nur gucken ob Du auch aufpasst Augenzwinkern
Habs geaendert, danke


Forensoftware: Burning Board, entwickelt von WoltLab GmbH