2.4 ¨Ubung 2

Werbung
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).
Herunterladen