Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Forendiskussionen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige ÜberarbeitungNächste ÜberarbeitungBeide Seiten, nächste Überarbeitung | ||
pruefungen:bachelor:aud:loesung-miniklausur-14 [14.01.2015 17:12] – xenexi | pruefungen:bachelor:aud:loesung-miniklausur-14 [28.03.2016 15:35] – Code vereinfacht Marcel[Inf] | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
===== Forendiskussionen ===== | ===== Forendiskussionen ===== | ||
- | * TODO: Noch keiner. Falls welche angelegt, hier eintragen! :) | + | https://fsi.cs.fau.de/ |
===== Lösungsversuch ===== | ===== Lösungsversuch ===== | ||
Zeile 7: | Zeile 7: | ||
==== Aufgabe 1 - Wissensfragen ==== | ==== Aufgabe 1 - Wissensfragen ==== | ||
- | TODO: Mit der Korrektur vergleichen/ | + | **a)** ...erlaubt das Löschen des Listenkopfs in O(1) \\ |
- | + | ...kann zur Umsetzung von Warteschlangen nach dem FIFO-Prinzip verwendet werden | |
- | **a)** ...erlaubt das Löschen des Listenkopfs in O(1) \\ \\ | + | |
**b)** ...benötigt in der Regel eine Tabelle zur Speicherung von Zwischenergebnissen\\ | **b)** ...benötigt in der Regel eine Tabelle zur Speicherung von Zwischenergebnissen\\ | ||
Zeile 62: | Zeile 61: | ||
{ | { | ||
for( int j = 0; j < r.width; ++j) | for( int j = 0; j < r.width; ++j) | ||
- | if( used[ row + i ][ column + j ] ) return false; | + | if( used[ row + i ][ column + j ] ) |
+ | | ||
} | } | ||
| | ||
Zeile 70: | Zeile 70: | ||
**d)** | **d)** | ||
<code java > | <code java > | ||
- | TODO | + | static boolean solveHelper( boolean[][] used, LinkedList< |
+ | { | ||
+ | if( isSolved( used ) ) | ||
+ | return true; | ||
+ | else if( rects.isEmpty() ) | ||
+ | return false; | ||
+ | |||
+ | Rectangle r = rects.pollFirst(); | ||
+ | if( solveHelper( used, rects ) ) | ||
+ | return true; | ||
+ | rects.addFirst( r ); | ||
+ | |||
+ | for( int row = 0; row < used.length; | ||
+ | { | ||
+ | for( int column = 0; column < used[row].length; | ||
+ | { | ||
+ | Rectangle r = rects.pollFirst(); | ||
+ | if( fits( used, row, column, r ) | ||
+ | { | ||
+ | toggleRectangle( used, row, column, r ); | ||
+ | if( solveHelper( used, rects) ) | ||
+ | return true; | ||
+ | toggleRectangle( used, row, column, r ); | ||
+ | } | ||
+ | rects.addFirst( r ); | ||
+ | } | ||
+ | } | ||
+ | return false; | ||
+ | } | ||
</ | </ | ||
==== Aufgabe 3 (Streutabellen) ==== | ==== Aufgabe 3 (Streutabellen) ==== | ||
- | TODO | + | 2, 0, 4, 3, 4, 5, 3, 7 |
==== Aufgabe 4 (Bäume) ==== | ==== Aufgabe 4 (Bäume) ==== | ||
- | TODO | ||
**a)** | **a)** | ||
- | Minimal: O() | + | Minimal: O( ceil( log( 9n +1)/log(10) -1) ) = O( log(n) |
- | Maximal: O() | + | Maximal: O( n-1 ) = O( n ) |
**b)** | **b)** | ||
<code java> | <code java> | ||
static int height(TenTree tree){ | static int height(TenTree tree){ | ||
- | | + | |
+ | |||
+ | int max = 0, tmp = -1; | ||
+ | for( int i = 0; i < 10; ++i ) | ||
+ | { | ||
+ | if( children[i] != null ) | ||
+ | max = Math.max(max, | ||
+ | } | ||
+ | return max; | ||
} | } | ||
</ | </ | ||
Zeile 95: | Zeile 130: | ||
<code java> | <code java> | ||
static int longest(Tentree tree){ | static int longest(Tentree tree){ | ||
+ | // Basisfall | ||
+ | if (tree == null) { | ||
+ | return 0; | ||
+ | } | ||
- | TODO | + | int without = 0; |
+ | int tmp = 0; | ||
+ | for ( int i = 0; i < 10; ++i ) | ||
+ | { | ||
+ | tmp = longest( children[i] ); | ||
+ | if( without < tmp ) | ||
+ | without = tmp; | ||
+ | } | ||
+ | |||
- | int without | + | |
- | TODO | + | int n = 0; |
- | + | tmp = 0; | |
- | int with = 0; | + | |
- | + | { | |
- | TODO | + | if( children[i] != null ) |
- | + | { | |
- | return Math.max(without, | + | tmp = height( children[i] ); |
+ | if( with < tmp ) { | ||
+ | n = with; | ||
+ | with = tmp; | ||
+ | } else if( n < tmp ) { | ||
+ | n = tmp; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | if (n != 0) { // Mindestens zwei Pfade gefunden | ||
+ | with += n + 2; | ||
+ | } else { | ||
+ | with = 0; // zB nur ein Pfad => auf 0 zurücksetzen | ||
+ | } | ||
+ | return Math.max(without, | ||
+ | } | ||
</ | </ |