2.4 Übung 2 2-11 2.4 Übung 2 1. Komplexiät von einfachen Prozeduren Berechnen Sie die Komplexität der Prozeduren 1 bis 4. Wie oft wird do something() aufgerufen? Überprüfen Sie Ihre Lösungen, indem Sie die Prozeduren in Java implementieren und einen Zähler einbauen. void procedure1 ( int n ) { for(int i=0; i<=n; i++) do something(i,n); for(int j=n; j>=0; j--) do something(j,n); } void procedure2 ( int n ) { for(int i=0; i<n; i++) for(int j=0; j<2*i; j++) do something(i,j,n); } void procedure3 ( int n ) { for(int i=0; i<n; i++) { int j = 0; while( j < 2*n ) { j++; do something(i,j,n); } } } void procedure4 ( int n ) { int j=n; while( j > 0 ) { j = j/2; do something(i,j,n); } } 2-12 2 Komplexität von Algorithmen 2. Komplexität rekursiver Prozeduren Berechnen Sie die Komplexität der folgenden rekursiven Prozeduren. Wie oft wird do something() ausgeführt? Wählen Sie für n eine Zweierpotenz: n = 2k . void procRec1( int n ) { if( n<=1 ) return; int procRec2( int n, int res ) { res = do_something(res, n); if( n <= 1 ) return res; res = procRec2(n/2, res); res = procRec2(n/2, res); return res; do_something(n) procRec1(n/2); } } 3. Komplexität verschiedener Java Methoden Bestimmen Sie von den Java Klassen ArrayList und LinkedList die asymptotische Komplexität der Methoden - public public public public public public public boolean contains(Object o) E get(int index) E set(int index, E element) boolean add(E o) void add(int index, E element) E remove int(index) boolean remove(Object o) Sie müssen dazu die Algorithmen nicht im Detail verstehen. Es genügt, die Iterationen (auch der benötigten Hilfsfunktionen) zu zählen (wir werden diese Algorithmen in einem späteren Kapitel noch genauer betrachten).