Informatik II Übung 02

Werbung
Informatik II
Übung 02
Benjamin Hepp
[email protected]
8 March 2017
Nachbesprechung U1
08.03.2017
Informatik II - Übung 01
2
Nachbesprechung U1.1
f(a,b) = a x b =
§
a) Induktionsbeweis ueber a nicht moeglich
§ Fuer b > 0 wird f mit immer groesserem a aufgerufen.
Daher ist eine Reduktion auf einen Induktionsanfang nicht moeglich
§
08.03.2017
b) Fuer b > 0 muss b zwangslaeufig b = 1 erreichen. Somit terminiert der
Algorithmus.
Informatik II - Übung 02
3
Nachbesprechung U1.1
c) Terminierung bei b == 0
f(a,b) = a x b =
Der Induktionsanfang erfolgt nun fuer b == 0 à f(a, 0) = 0.
Der Induktionschrit bleibt aehnlich (bis auf b/2 \in {0, 1, ...} etc.)
Die ganzzahl-Division 1 / 2 ergibt 0. Da wir gezeigt haben, dass b zwangslaeufig
den Wert 1 erreicht, erreicht b auch zwangslaeufig den Wert 0. Damit
terminert der Algorithmus weiterhin.
08.03.2017
Informatik II - Übung 02
4
Nachbesprechung U1.2
a)
public static boolean gerade( int x ){
if( x == 0 ) return true;
return !gerade( x-1 );
}
public static int verdopple( int x ){
if( x == 0 ) return 0;
return 2 + verdopple( x-1 );
}
public static int halbiere( int x ){
if( x == 0 ) return 0;
if( x == 1 ) return 0;
return halbiere( x-2 ) + 1;
}
08.03.2017
Informatik II - Übung 02
➡ x
➡ x
➡ ⌊x/2⌋
5
Nachbesprechung U1.2
b) Aufrufe der drei Methoden in Abhaengigkeit von a und b
Falls b != 0 werden alle drei Methoden einmal aufgerufen:
3 + b + a + [b/2] ~= 3 + a + 3 b/2Typeequationhere.
08.03.2017
Informatik II - Übung 02
6
Nachbesprechung U1.2
c) Gesamtzahl Methodenaufrufe
𝑁(𝑎, 𝑏) ~= 3 + 𝑎 +
=
=
=
;
<
+ 𝑁(2𝑎, )
:;
;
+ 𝑁(4𝑎, )
>
>
:;
:;
;
3 + 3 + 2@ 𝑎 + 2A 𝑎 + B + C + 𝑁(4𝑎, )
<
<
>
:;
3 + 3 + 3 + ⋯ + 2@ 𝑎 + 2A 𝑎 + 2< 𝑎 + ⋯ + ( B
<
:;
H
G
∑HIA
GJ@ 2 𝑎 + ∑GJA <K + 3𝑘
= 3+𝑎+
:;
<
:;
<
+ 3 + 2𝑎 +
+
:;
<C
+
:;
<E
+ ⋯)
Rekursionsende wenn b == 0.
Dies ist der Fall nach ⌊𝑙𝑜𝑔< 𝑏⌋ + 1 Aufrufen.
08.03.2017
Informatik II - Übung 02
7
Nachbesprechung U1.2
c) Geometrische Reihe fuer 𝑞 < 1
V
S 𝑎𝑞H
𝑁(𝑎, 𝑏) ~= 3 + 𝑎 +
=
=
=
;
<
+ 𝑁(2𝑎, )
:;
;
+ 𝑁(4𝑎, )
>
>
:;
:;
;
3 + 3 + 2@ 𝑎 + 2A 𝑎 + B + C + 𝑁(4𝑎, )
<
<
>
:;
3 + 3 + 3 + ⋯ + 2@ 𝑎 + 2A 𝑎 + 2< 𝑎 + ⋯ + ( B
<
:;
H
G
∑HIA
GJ@ 2 𝑎 + ∑GJA <K + 3𝑘
= 3+𝑎+
:;
<
:;
<
HJ@
𝑎
=
1−𝑞
+ 3 + 2𝑎 +
+
:;
<C
+
:;
<E
+ ⋯)
Rekursionsende wenn b == 0.
Dies ist der Fall nach ⌊𝑙𝑜𝑔< 𝑏⌋ + 1 Aufrufen.
08.03.2017
Informatik II - Übung 02
8
Nachbesprechung U1.3
/**
* This function implements the ancient Egyptian multiplication.
*
* @param a must be a positive integer
* @param b must be a positive integer
* @return the product of a and b
* @throws IllegalArgumentException
*/
public static int mult(int a, int b) throws IllegalArgumentException {
if (a < 1) throw new IllegalArgumentException("Parameter a
must be a positive integer but is " + a);
if (b < 1) throw new IllegalArgumentException("Parameter b
must be a positive integer but is " + b);
return f(a, b);
}
08.03.2017
Informatik II - Übung 02
9
Nachbesprechung U1.3
Aufruf einer Funktion die eine Exception wirft
public static int function(int a, int b) {
try {
int prod = mult(a, b);
}
catch (IllegalArgumentException e) {
// Handle exception
}
}
08.03.2017
Informatik II - Übung 02
10
Hinweise zu U2
8 March 2017
Informatik II - Übung 01
11
Hinweise U2
08.03.2017
§
1. Wurzelbäume
§
2. Rekursives Sortieren
§
3. Binärbäume als Arrays
Informatik II - Übung 02
12
Hinweise U2.1
§ Baum: Kreisfreier Graph
§ Wurzelbaum: Ein gerichteter, kreisfreier Graph, so dass jeder Knoten von
der Wurzel aus erreichbar ist
§ Verschiedene Darstellungen moeglich
§ Was ist die Hoehe eines Baumes?
§ Was ist ein Pfad?
A
B
C
08.03.2017
Informatik II - Übung 02
E
D
13
Hinweise U2.2
§ Array im Konstruktor initialisieren!
numbers = new int[length];
§ Zufallszahlen im Konstruktor erzeugen:
import java.util.Random;
...
Random r = new Random();
int n = r.nextInt(maxValue);
08.03.2017
Informatik II - Übung 02
14
Hinweise U2.2
§ Sortieren mittels Rekursion
§ Annahme: Array enthaelt bereits die until - 1 groessten Elemente in den until - 1
ersten Stellen
§ Wir suchen das groesste Element im uebrigen Array und tauschen, falls
groesser, mit dem Element an der Stelle until - 1
§ -> Array enthaelt nun die until groessten Elemente in den until ersten Stellen
§ Wenn until == length dann ist das Array absteigend sortiert
§ Beispiel: 8 3 4 2 9
08.03.2017
Informatik II - Übung 02
15
Hinweise U2.3
A
B
D
08.03.2017
C
F
E
§
int father(int node) { ... }
§
int leftChild(int node) { ... }
§
int rightChild(int node) { ... }
Informatik II - Übung 02
16
Hinweise U2.2
§ Sortieren mittels Rekursion
void recursiveSort(int until) { ... }
§ Rekursionsabbruch: until == 0
§ Sonst rekursiver Aufruf mit until - 1
§ Achtung: Wenn until == numbers.length nach dem rekursiven Aufruf fertig.
§ Ansonsten Tausch des Elements bei until - 1 mit dem groessten Element im uebrigen Array
§ Schreibt eine extra Methode fuer das Tauschen eines Elements
void swap(int i, int j) { ... }
08.03.2017
Informatik II - Übung 02
17
Hinweise U2.3
§ Ein Wurzelbaum bei dem jeder Knoten zwei „Nachfahren“ hat
§ Der Nachfahre eines Knotens kann auch der „leere Knoten“ sein
§ Darstellung als Array sinnvoll wenn maximale Tiefe bekannt ist und
schneller Zugriff erwuenscht
§ Die Ebenen des Baumes werden nacheinander im Array angeordnet
08.03.2017
Informatik II - Übung 02
18
Hinweise U2.3
§
toString() rekursiv implementieren
§ Also String toString(int node, String indentation) { ... }
§ Erster Aufruf: public String toString() { return toString(0, ““); }
§ Achtung, Sonderfaelle beachten: Leerer Baum
§
checkTree()
§ Prueft fuer jeden Knoten der kein leerer Knoten ist, ob sein „Vater“ existiert.
§ Ignoriert leere Knoten
08.03.2017
Informatik II - Übung 02
19
Herunterladen