Pascal Schärli 25.09.2020
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
public static boolean gerade( int x ){
if( x == 0 ) return true;
return !gerade(x - 1);
}\(x\) Aufrufe
public static int verdopple( int x ){
if( x == 0 ) return 0;
return 2 + verdopple( x-1 );
}\(x\) Aufrufe
public static int halbiere( int x ){
if( x == 0 || x == 1 ) return 0;
return halbiere(x - 2);
}\(\lfloor \frac{x}{2} \rfloor\) Aufrufe
Pascal Schärli 02.10.2020
private static int f(int a, int b){
if (b == 0) return 0;
if (gerade(b)) return f(verdopple(a), halbiere(b));
else return a + f(verdopple(a), halbiere(b));
}Ignorieren, dass f sich selbst aufruft
Pascal Schärli 02.10.2020
private static int f(int a, int b){
if (b == 0) return 0;
if (gerade(b)) return f(verdopple(a), halbiere(b));
else return a + f(verdopple(a), halbiere(b));
}Ohne Ignorieren, dass f sich selbst aufruft
Zusammen mit 2 b) ergibt sich:
\(N(a,b) = (a + \frac{3b}{2} + 3) + N(2a,\frac{b}{2})\)
\(= \sum_{i=0}^{k-1}(2^i a) + \sum_{i=1}^{k}(\frac{3b}{2^i})+3k\)
Pascal Schärli 02.10.2020
Fehler während der Übungsstunde
/**
* 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 if a or b is not positive
*/
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);
}
}Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadKnoten
Kanten
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadKanten haben eine Richtung
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadZusammenhängender, Gerichteter Graph ohne geschlossenen Pfade
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadKnoten ohne Kindknoten
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
Pfadjeder Knoten besitzt höchstens zwei Kindknoten, die Reihenfolge der Kindknoten ist relevant.
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
Pfadjeder Knoten besitzt entweder zwei oder keine Kinder
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadAlle Blätter haben die selbe Tiefe
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadUngleich verteilter Baum
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadAnzahl “Levels” ohne Wurzel
→ hier: 3
Pascal Schärli 02.10.2020
Graph
Gerichteter Graph
Baum
Blätter
Binärbaum
Voller Baum
Vollständiger Baum
Entarteter Baum
Höhe
PfadWeg durch Graph (Nur in Pfeilrichtung)
Pascal Schärli 02.10.2020
Indent = 1
Indent = 2
Indent = 3
Indent = 0
5
5
.8
5
.8
..3
5
.8
..3
..25
.8
..3
..2
...15
.8
..3
..2
...1
...95
.8
..3
..2
...1
...9
.75
.8
..3
..2
...1
...9
.7
..35
8
3
2
1
9
7
3
Pascal Schärli 02.10.2020
5( )5(8( ) )5(8(3 ) )5(8(3,2( )) )5(8(3,2(1 )) )5(8(3,2(1,9)) )5(8(3,2(1,9)),7( ))5(8(3,2(1,9)),7(3))Pascal Schärli 02.10.2020
5
8
7
3
2
9
3
1
Pascal Schärli 02.10.2020
0
1
2
3
4
6
5
[ , , , , , , ]
0
1
2
3
4
5
6
'H'
'B '
'J'
'A '
'E'
' '
'M'
left child: 2*i+1
right child: 2*i+2
parent: ⌊(i-1)/2⌋
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
Lösung: 3
a
a
b
c
d
g
d
e
f
Pascal Schärli 02.10.2020
Lösung: 4
a
a
b
c
d
f
d
e
Pascal Schärli 02.10.2020
Lösung: kein korrekter Baum
a
a
b
c
d
g
d
e
f
g
d
h
Pascal Schärli 02.10.2020
Keine Zyklen erlaubt!
Lösung: 2
a
a
b
c
d
e
f
i
j
g
h
(a(b(d(g,e)),c(f(h,i,j))))
a b d g e c f h i j
1
2
3
Pascal Schärli 02.10.2020
a
a
b
c
d
e
f
g
(a(b(d,e(g)),c(f)))
a
b
c
d
e
g
f
Lösung: alles der gleiche Baum
1
2
3
Pascal Schärli 02.10.2020
a
a
b
c
d
e
f
g
(a(b(d,e(g)),c(f)))
Lösung: 2
a b d e g - c - f
1
2
3
Pascal Schärli 02.10.2020
Bei 2 ist die Reihenfolge der Kind-knoten nicht gegeben
a
a
b
c
d
e
f
Lösung: 3
['a', 'b', 'd', ' ', 'c', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', ' ', 'e', 'f']
4
['a', 'b', 'd', 'c', 'e', 'f']
1
2
3
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020
Aufgabe 1 - Konstruktor
Implementiert den Konstruktor, der ein Array der angegebenen Grösse erstellt und mit Zufallszahlen füllt:
import java.util.Random;numbers = new int[length];Random r = new Random();int random_integer = r.nextInt(1000) //random Integer between 0 and 999Pascal Schärli 02.10.2020
Aufgabe 2 - toString
Implementiert ie Funktion toString, die eine Stringrepräsentation des Arrays erzeugt.
Gebt acht, dass Ihr die Leerschläge am richtigen Ort habt:
{1,2,3} =>'[1, 2, 3]'
"Hello " + "World!" => "Hello World!""M" + 8 => "M8"Pascal Schärli 02.10.2020
Aufgabe 3 - sortieren
Die ersten i Elemente der Liste können absteigend sortiert werden indem man:
Die grössten i-1 Elemente absteigend sortiert
Das grösste Element im Rest der Liste suchen…
… und dieses an der ersten Stelle vom Rest der Liste einsetzen
Pascal Schärli 02.10.2020
Aufgabe 3 - sortieren
[5, 1, 9, 2]
[5, 1, 9, 2]
[5, 1, 9, 2]
[5, 1, 9, 2]
[5, 1, 9, 2]
[5, 1, 9, 2]
[9, 1, 5, 2][9, 1, 5, 2]
[9, 5, 1, 2]
[9, 5, 1, 2]
[9, 5, 2, 1]
[9, 5, 2, 1]
Die grössten i-1 Elemente absteigend sortiert
Das grösste Element im Rest der Liste suchen…
… und dieses an der ersten Stelle vom Rest der Liste einsetzenrecursiveSort(4)
recursiveSort(3)
recursiveSort(2)
recursiveSort(1)
recursiveSort(0)
-> Leere Liste ist Sortiert
grösstes Element -> 9
Swap 5 <-> 9
grösstes Element -> 5
Swap 5 <-> 1
grösstes Element -> 2
Swap 2 <-> 1
FertigPascal Schärli 02.10.2020
Aufgabe 1
Implementiert die Funktionen leftChild, rightChild und father, die zu einem Index eines Knotens den Index des linken Kindes, des rechten Kindes bzw. des Vaters berechnen.
Pascal Schärli 02.10.2020
Aufgabe 2 - toString
toString() ruft Hilfsfunktion toString(int node, String indentation) auf
(zB. toString(0,“ “)
toString(int node, String indentation){
//1. Print Node
//2. Increase indentation
//3. Recursive call for each child
}Pascal Schärli 02.10.2020
Aufgabe 3 - checkTree
parent = (i-1)/2
→ (0-1)/2 = 0
Pascal Schärli 02.10.2020
Pascal Schärli 02.10.2020