12.01.2014 Aufrufe

2-up - ETH Zürich

2-up - ETH Zürich

2-up - ETH Zürich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Effizienz des Multiplikationsalgorithmus<br />

• Frage: Wie lange dauert eine Multiplikation von a und b?<br />

static int f(int a, int b){<br />

if (b == 1) return a;<br />

if (b%2 == 0) return f(a+a, b/2);<br />

else return a + f(a+a, b/2);<br />

} <br />

• Effizienzmass: Gesamtzahl der elementaren Operationen<br />

• Verdoppeln, Halbieren, Test auf „gerade“ bzw. „1“, Addition<br />

• Kommen offenbar pro Aufruf insgesamt nicht mehr als 5 Mal vor<br />

• Aber: Handelt es sich bei „b%2 == 0“ nicht um zwei Operationen statt einer einzigen?<br />

• Antwort: So wie der Test auf „gerade“ hier realisiert ist, werden für „b%2 == 0“<br />

tatsächlich mehr Maschineninstruktionen ausgeführt, als z.B. für „b == 1“ – wir wollen<br />

aber von der konkreten Realisierung abstrahieren; auf Maschineninstruktionsebene lässt<br />

sich ein Test auf „gerade“ jedenfalls einfach und effizient realisieren, indem man testet,<br />

ob das rechteste Bit der Speicherzelle von b eine 0 oder eine 1 ist.<br />

67<br />

Effizienzabschätzung<br />

• Genauere Überlegungen müssten die unterschiedlichen<br />

„Kosten“ der verschiedenen Operationen berücksichtigen<br />

• Verdoppeln ist „billiger“ als Addieren etc.<br />

Kosten ≈ Zeit<br />

• Grosse Zahlen sind „teurer“ als kleine Zahlen<br />

• Wir setzen aber (vereinfachend) alle Operationen als gleich „teuer“ an<br />

• Wesentliches Kriterium: Anzahl der (rekursiven) Aufrufe<br />

• Dies ist nur von b abhängig, nicht von a<br />

if (b == 1) return a;<br />

if (b%2 == 0) return f(a+a, b/2);<br />

else return a + f(a+a, b/2);<br />

• Also: wie viele rekursive Aufrufe gibt es?<br />

• Wie oft kann man b halbieren, bis ein Wert 1 herauskommt?<br />

(durch das Abrunden beim Halbieren ist dies konservativ geschätzt)<br />

• b / (2 x ) ≤ 1 ⇒ x ≥ log 2 b (Logarithmen in der Informatik i.Allg. zur Basis 2)<br />

• Es werden also nicht mehr als 5 log 2 b Operationen benötigt<br />

68<br />

26

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!