1 / 48

Einführung in die Informatik: Programmierung und Software-Entwicklung

Einführung in die Informatik: Programmierung und Software-Entwicklung. Zentralübung 6: Lösung Aufgabe 5-4, Tipps zu Blatt 6, Einfache Klassen Christian Kroiß 25.11.2009. http://www.pst.ifi.lmu.de/Lehre/wise-09-10/infoeinf/. Aufgabe 5-4.

nora-franco
Download Presentation

Einführung in die Informatik: Programmierung und Software-Entwicklung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Einführung in die Informatik: Programmierung und Software-Entwicklung Zentralübung 6: Lösung Aufgabe 5-4, Tipps zu Blatt 6, Einfache Klassen Christian Kroiß 25.11.2009 http://www.pst.ifi.lmu.de/Lehre/wise-09-10/infoeinf/

  2. Aufgabe 5-4 • Zunächst: Entschuldigung! Die Aufgabe doch etwas sehr schwer. • Aber: bei der Korrektur wird auf die Grundideen Wert gelegt statt auf die genaue Rechnung. • Wir werden versuchen, das nächste Bonus-Blatt einfacher zu machen!

  3. Aufgabe 5-4 a/c) static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; }

  4. Simulation a ungleich b, ungleiche Länge static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true Ergebnis: FALSE a = 1 2 3 b = 1 2 3 4

  5. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } a = 1 2 3 b = 4 2 3 VERGLEICHE = 0

  6. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 a = 1 2 3 b = 4 2 3 VERGLEICHE = 1

  7. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 0 a = 1 2 3 b = 4 2 3 VERGLEICHE = 2

  8. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 0 j = 0 a = 1 2 3 b = 4 2 3 VERGLEICHE = 2

  9. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 0 a = 1 2 3 b = 4 2 3 VERGLEICHE = 4

  10. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 0 j = 1 a = 1 2 3 b = 4 2 3 VERGLEICHE = 4

  11. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 1 a = 1 2 3 b = 4 2 3 VERGLEICHE = 6

  12. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 0 j = 2 a = 1 2 3 b = 4 2 3 VERGLEICHE = 6

  13. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 2 a = 1 2 3 b = 4 2 3 VERGLEICHE = 8

  14. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } false i = 0 j = 3 a = 1 2 3 b = 4 2 3 VERGLEICHE = 8

  15. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true i = 0 j = 3 a = 1 2 3 b = 4 2 3 VERGLEICHE = 9

  16. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 3 a = 1 2 3 b = 4 2 3 VERGLEICHE = 10

  17. Simulation a ungleich b, a[0] nicht in b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } Ergebnis: FALSE Vergleiche:1 + 1 + 2n + 1 + 1= 4 + 2n = 10 i = 0 j = 3 a = 1 2 3 b = 4 2 3

  18. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } a = 1 2 3 b = 1 2 3 VERGLEICHE = 0

  19. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 1

  20. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 2

  21. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true 0 Durchläufeder WHILE-Schleifefüri == 0Aber: 2 Vergleiche false i = 0 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 2

  22. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 0 j = 0 a = 1 2 3 b = 1 2 3 false VERGLEICHE = 4

  23. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true i = 1 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 5

  24. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 1 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 6

  25. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 1 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 6

  26. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 1 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 8

  27. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true false i = 1 j = 1 a = 1 2 3 b = 1 2 3 VERGLEICHE = 8

  28. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true 1 Durchlaufder WHILE-Schleifefüri == 1Aber: 4 Vergleiche false i = 1 j = 1 a = 1 2 3 b = 1 2 3 VERGLEICHE = 8

  29. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 1 j = 1 a = 1 2 3 b = 1 2 3 false VERGLEICHE = 10

  30. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true i = 2 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 11

  31. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 2 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 12

  32. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 2 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 12

  33. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 2 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 14

  34. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true true i = 2 j = 1 a = 1 2 3 b = 1 2 3 VERGLEICHE = 14

  35. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 2 j = 1 a = 1 2 3 b = 1 2 3 VERGLEICHE = 16

  36. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true false i = 2 j = 2 a = 1 2 3 b = 1 2 3 VERGLEICHE = 16

  37. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } true 2 Durchläufeder WHILE-Schleifefüri == 2Aber: 6 Vergleiche false i = 2 j = 2 a = 1 2 3 b = 1 2 3 VERGLEICHE = 16

  38. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 2 j = 2 a = 1 2 3 b = 1 2 3 false VERGLEICHE = 18

  39. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } false i = 3 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 19

  40. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } i = 3 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 20

  41. Simulation a gleich b static boolean compareSets(int[] a, int[] b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { int j = 0; while (j < b.length && b[j] != a[i]) j++; if (j == b.length) return false; } return true; } Ergebnis: TRUEVergleiche: n2 + 3n + 2 = 20 i = 3 j = 0 a = 1 2 3 b = 1 2 3 VERGLEICHE = 20

  42. Ergebnis • Bester Fall für ungleiche Längen: 1 • Bester Fall für gleiche Längen: a[0] nicht in b  TB = 4 + 2n • Schlechtester Fall: Mengen sind gleich • Da jedes Element nur einmal vorkommt braucht man unabhängig von der Reihenfolge • 1 x keinen Durchlauf der WHILE-Schleife für i == i0 • 1 x 1 Durchlauf der WHILE-Schleife für i == i1 • 1 x 2 Durchläufe der WHILE-Schleife für i == i2 • etc. • Insgesamt (inklusive Schleifen-Abbrüche):n2 + 3n + 2

  43. Herleitung TW

  44. Herleitung TW

  45. Herleitung TW Gaußsche Summen- formel

  46. Tipps für Blatt 6 • Aufgabe 6-1 • Noch mal genau die Definition der O-Notation im Skript lesen • Insbesondere muss die <= - Beziehung erst ab einem gewissen n0 gelten • Bei j) • Polynomdivision mit Rest • Grenzwerte für n  ∞ anschauen • Bedenken: in einer Summe entscheidet der Summand mit dem schnellsten Wachstum • Aufgabe 6-2 b) • Man kann so tun, als ob es tatsächlich n, log n, etc. viele Operationen gebe • Für jeweils eine Operation denkt man sich eine Zeitkonstante Top , die natürlich unabhängig von n ist.

  47. Tipps für Blatt 6 • Aufgabe 6-2 c) • Im Taschenrechner mit großen Zahlen für n ausprobieren • Wenn f(n) langsamer wächst als g(n), dann gilt: • Graphen zeichnen lassen • Online auf http://www.wolframalpha.com • Sehr interessante und mächtige Such-/Informationsmaschine mit Mathe-Funktionen von Mathematica. • Relativ kompliziert, Dokumentation für Mathe-Funktionen unter http://reference.wolfram.com/mathematica/guide/Mathematica.html • GeoGebra (http://www.geogebra.org) • Sehr leicht zu benutzen

  48. Einige einfache Klassen

More Related