Informatik II - Übung 03

Ähnliche Dokumente
Informatik II (D-ITET) Übungsstunde 3,

Informatik II Übung 3. Pascal Schärli

Informatik II Übung 2. Gruppe 4. Lukas Burkhalter (Folien teils von Christian B. und Leyna S.)

Informatik II Übung 3

Informatik II (D-ITET) Informatik II (D-ITET) Übungsstunde 1. Distributed Systems Group, ETH Zürich

Informatik II Übung 2. Pascal Schärli

Informatik II - Tutorium 4

Informatik II Übung 2

Informatik II - Tutorium 2

Informatik II - Übung 02

Informatik II Übung 2 Gruppe 7

Informatik II (D-ITET) Übungsstunde 2,

Informatik II Übung 4 Gruppe 7

Informatik II (D-ITET) Informatik II (D-ITET) Übungsstunde 1. Distributed Systems Group, ETH Zürich

Informatik II (D-ITET) Übungsstunde 5

Informatik II Übung 2

Informatik II (D-ITET)

Informatik II Übung 02. Benjamin Hepp 8 March 2017

Informatik II (D-ITET) Übungsstunde 2

Informatik II - Übung 04

Informatik II - Übung 04. Christian Beckel Besprechung Übungsblatt 3

Technische Universität München WiSe 2018/19 Fakultät für Informatik Übungsblatt 6 Dr. Ch. Herzog 26. November 2018

Kapitel 12: Induktive

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

Informatik II Übung 5 Gruppe 3

Informatik II Übung 4. Pascal Schärli

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Informatik II - Übung 07

1 Hashing und die Klasse String

Tutoraufgabe 1 (Implementierung eines ADTs):

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Martin Unold INFORMATIK. Geoinformatik und Vermessung

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Martin Unold INFORMATIK. Geoinformatik und Vermessung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 139

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Informatik II. Woche 10, Giuseppe Accaputo

Übung Algorithmen und Datenstrukturen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Probeklausur zur Vorlesung

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Informatik Abitur Bayern 2017 / II - Lösung

Praxis der Programmierung

(08 - Einfache Sortierverfahren)

Algorithmen und Datenstrukturen (für ET/IT)

6 Speicherorganisation

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Informatik B Sommersemester Musterlösung zur Klausur vom

Informatik II Übung 7 Gruppe 7

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Software Entwicklung 1

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Informatik II - Tutorium 5

Vor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Einführung in die Informatik 1

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Übungsstunde 4. Einführung in die Programmierung

Verkettete Datenstrukturen: Listen

Abschlussklausur Lösung. Bitte in Druckschrift leserlich ausfüllen!

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Informatik II Prüfungsvorbereitungskurs

6 Speicherorganisation

Auswählen nach Rang (Selektion)

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Basispruefung Herbst 2016/ Einführung in die Programmierung

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Informatik II - Übung 12

Programmieren in Java -Eingangstest-

Institut für Programmierung und Reaktive Systeme 6. Juli Programmieren II. Übungsklausur

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

3. Übungsbesprechung Programmkonstruktion

Beispiellösung zur Klausur AI2 im Sommersemester 2007

Übung 4: Die generische Klasse AvlBaum in Java 1

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

9. Java Arrays und Strings. Allokation, Referenzen, Elementzugriff, Mehrdimensionale Arrays, Strings, Stringvergleiche

Einführung in die Programmierung

Software Entwicklung 1

ADT: Verkettete Listen

Informatik II Übung 10. Benjamin Hepp 10 May 2017

Einführung in die Informatik. Lösung zu Übungsblatt 6

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Semestralklausur Informatik I - Programmierung

Überblick. Rekursive Methoden. Backtracking. Memorization. Einfache rekursive Datenstrukturen. Aufzählen, Untermengen, Permutationen, Bitmengen

Anwendungsbeispiel MinHeap

Einführung in die Programmierung

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java

Informatik II, SS 2014

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Transkript:

Informatik II - Übung 03 Katja Wolff katja.wolff@inf.ethz.ch 15.03.2014

Besprechung Übungsblatt 2 Informatik II - Übung 03 15.03.2017 2

U2.A1 S Klammerdarstellung und eingerückter Form R P V S(R(H(K)),P(A(N,O),Q,T),V(J,F(G))) Können Sie aus den obigen Linksklammerdarstellungen den dazugehörigen Baum eindeutig rekonstruieren? K H N A Q O T J F G Ja, falls Position der Knoten unwichtig (linker oder rechter Nachfolger?) - uneindeutig für H,K,G Falls Position der Knoten wichtig: nutze - : z.b. H(K,-) Höhe? Längste Pfade? Blätter? Informatik II - Übung 03 15.03.2017 3

[ 5 1 9 2 ] [ 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 ] recursivesort(4) recursivesort(3) recursivesort(2) recursivesort(1) recursivesort(0) Ist sortiert! 9 <- findlargest(0,3) Swap 5 <- findlargest(1,3) Swap 2 <- findlargest(2,3) Swap Kein swap mehr noetig... Liste absteigend sortiert! Informatik II - Übung 03 15.03.2017 4

U2.A2 Hilfsfunktion SWAP /** * swaps two fields of {@link RandomArray#numbers * * @param i a valid index into {@link RandomArray#numbers * @param j a valid index into {@link RandomArray#numbers */ private void swap(int i, int j) { int tmp = numbers[j]; numbers[j] = numbers[i]; numbers[i] = tmp; Informatik II - Übung 03 15.03.2017 5

U2.A2 SWAP innerhalb einer Schleife ist das eine gute Idee? void recursivesort( int until ) { // 0 elements are considered to be sorted if( until == 0 ) return; // sort first until-1 elements in the array recursivesort( until 1 ); // bring the greatest element from the rest to position until-1 for( int i = until; i < a.length; i++ ) { if( a[i] > a[until-1] ){ swap(until-1, i); Informatik II - Übung 03 15.03.2017 6

U2.A2 Besser: zuerst suchen, dann tauschen! void recursivesort( int until ) { // 0 elements are considered to be sorted if( until == 0 ) return; // sort first until-1 elements in the array recursivesort( until 1 ); // find index of greatest element after until-1 int maxindex = until - 1; for( int i = until; i < a.length; i++ ) { if( a[i] > a[maxindex] ) { maxindex = i; // swap elements at maxindex and until-1 swap( until-1, maxindex ); bei 15 Werten durchschnittlich ~57 Swaps im ersten Fall und ~11 Swaps im zweiten Fall Informatik II - Übung 03 15.03.2017 7

U2.A2 Coding style: No hardcoding x < 10 x < a.length if(mystring.compareto( hello world ) == 0); private static final String REF = hello world ; if(mystring.compareto( REF ) == 0); Informatik II - Übung 03 15.03.2017 8

U2.A2 Coding Style: Unterschied? if (index >= boundary) return; else if (array[index] == 'x') return; if ( index >= boundary array[index] == 'x' ) return; Y im Ausdruck (X Y) wird nur ausgewertet, falls X == false. if (index < boundary) if (array[index] == 'x') array[index] = '\0'; if ( index < boundary && array[index] == 'x' ) array[index] = '\0'; Y im Ausdruck (X && Y) wird nur ausgewertet, falls X == true. int counter = 0; while (counter < n) {... counter++; Achtung: counter ist nach dieser Schleife immer noch definiert! for ( int counter = 0; counter < n; counter++) {... Saubere Aufzählung. counter kann nach dem for erneut definiert werden. Informatik II - Übung 03 15.03.2017 9

U2.A2 Coding style: Effizienz void initialize() { for (int i=0; i<a.length; i++) { Random r = new Random(); a[i] = r.nextint(1000); Objektinstanzierung ist teuer! void initialize() { Random r = new Random(); for (int i=0; i<a.length; i++) { a[i] = r.nextint(1000); Informatik II - Übung 03 15.03.2017 10

U2.A3 Wurzel an Index 0 Direkte Nachfolger von i an (2i + 1) und (2i + 2) 2 Höhe-1 = 2 Tiefe array.length < 2 Tiefe+1 = 2 Höhe int leftchild( node ){ return 2 * node + 1; int rightchild( node ){ return 2 * node + 2; int father( node ){ return (node 1) / 2; (father(0) = -1 / 2 = 0) Informatik II - Übung 03 15.03.2017 11

U2.A3 b,c tostring() Rekursive Implementierung ist einfacher checktree() Teste jedes nichtleere Element auf einen nichtleeren Vater ("The root is its own father. ) Teste auf nichtleeres Array Informatik II - Übung 03 15.03.2017 12

Ausblick: Übungsblatt 3 Informatik II - Übung 03 15.03.2017 13

Hinweise U3 1. Programmverifikation und Schleifeninvarianten 2. Objekte und Referenzen (am Beispiel Strings) 3. Syntaxdiagramme Diagramme gegeben; Welche Ausdrücke sind erzeugbar? 4. Syntaxchecker für Bäume Ergänzen des Syntaxdiagramms aus der Vorlesung Implementierung des Syntaxcheckers Informatik II - Übung 03 15.03.2017 14

U3.A1: Programmverifikation static int f(int i, int j) { int u = i; int z = 0; while (u > 0) { z = z + j; u = u - 1; return z; a) Schleifeninvariante? b) Korrektheitsbeweis? c) Dummy-Statements: z = z; u = u; Informatik II - Übung 03 15.03.2017 15

U3.A2: String und StringBuffer Klasse String (immutable) Operationen können gut optimiert werden Aber: Modifikationen nur durch Kopie! Klasse StringBuffer (mutable) Veränderbar ohne Kopie Aber: Gewisse Operationen sind teuer! Informatik II - Übung 03 15.03.2017 16

U3.A2 String vs. StringBuffer Speicher String mystring = "hello"; mystring = mystring + " world"; "hello" "hello world" " world" String-Konkatenation in Java StringBuffer mystringbuffer = "hello"; mystringbuffer.append(" world"); "hello" world" " world" Methode von StringBuffer Informatik II - Übung 03 15.03.2017 17

U3.A2 String vs. StringBuffer Speicher "hello" " world" Garbage Collector String mystring = "hello"; mystring = mystring+" world"; mystring = mystring+" how"; "hello world" " how" "hello world how" " are" "hello world how are" " you" Garbage Collector mystring = mystring+" are"; mystring = mystring+" you"; mystring = mystring+" today"; "hello world how are you" " today" "hello world how are you today" Animation von Beat Saurenmann Informatik II - Übung 03 15.03.2017 18

U3.A2 Einen Blick wert: Eclipse-Debugger Vorsicht: Debugger zeigt temporäre Strings nicht an, da sie während eines Schrittes erzeugt und gleich wieder 'vernichtet' werden String mystring = "hello"; mystring = mystring+" world";... mystring = "" "hello" world" Animation von Beat Saurenmann Informatik II - Übung 03 15.03.2017 19

U3.A2 - Programmanalyse Welche Objekte existieren an den markierten Stellen zur Laufzeit? Beispiel: Referenzen und Objekte String str = foo ; StringBuffer buf = new StringBuffer( foobuffer ); Welche Objekte und Referenzen gibt es nun? Objekte: (1, String, foo ) (2, String, foobuffer ) (3, Stringbuffer, foobuffer ) Referenzen: (str, 1) (buf, 3) Informatik II - Übung 03 15.03.2017 20

U3.A3 - Syntaxdiagramme Var: Clause: ~ ( Var ). OR Expr: Clause AND Clause z.b ~ ORX AND X1 2 X n Informatik II - Übung 03 07.03.2012 21

U3.A4 Syntax-Checker Informatik II - Übung 03 07.03.2012 22

U3.A4 Syntaxchecker für Bäume Implementierung eines Syntaxcheckers für Bäume Zuerst: Erweiterung der Baumsyntax auf leere Teilbäume Syntaxchecker: Je eigene Methode für Baum, Nachfolger und Knoten Hinweis: Lösung von 3a) muss mit eingebaut werden Lösungsansatz: public static int f(string str, int offset){... Gebt jeweils den neuen Offset an die übergeordnete Funktion zurück. Überlegt euch, wie gross der Offset am Schluss sein muss und was passiert ist, falls er nicht genau diese Grösse hat. Mögliche Probleme und dazugehörige Lösungsansätze/Erklärungen: StringIndexOutOfBoundsException ihr versucht auf den character n des Strings zuzugreifen, der Array ist aber weniger lang als n Informatik II - Übung 03 07.03.2012 23

viel Spass! Informatik II - Übung 03 06.03.2013 24