Sie sind auf Seite 1von 56

Wolfgang Mulzer 18.04.

2023

mulzerginf. fu-berlin. de
Sprechstunden nach Vereinbarung (auch nachts

Scheinkriterien:
·

regelmäige Teilnahmetakfire Teilnahme

Hausaufgaben Blatt pro Woche upload zu abgabe 4tage


·

Aufgaben MOP. Les werden


à
Zzufällige Kontrolliert) minbor. (70p. prozeffell
-

Übungsgruppe à2 Personen
·Prüfung Klausur
-120Minuten
-27. Juli2023 18-12 Uhr Hörsaal fall
-
10.10.23 10-22 Uhr Nachklausur Hörsaal 1b Haupt 3250%
Hilfe:1A4Blatt

Statt 1
Aufgabenblatt ->
1x Mitschriften in CATET (20 Punkte)
IImperative Programmierung (Pythow) vorkurs 18.04.23

Programmierparadigma:Gitgedanke beim Entwurfeiner Programmiersprach

Zwei
groe Ansätze bei Programmiersprachen:Deklarative Imperative Prog.

Beschreiben das Programm tunsall
was

auf abstrakten Mathematischenniveau,


Details der überlassen
Implementierung
FunktionaleProgrammiereandHase
=> eine

Abfrage sprache (SQL

Funktionale Programmierung:
Styp) (Valuel
Zentrale Konzept:Ausdruck (besitzttyp & wert
Typ gibtan, welche Werte erlaubt sind.

Ziel:Ausdruck answerten nach Regeln dih. Schrittweise auf


eine Möglichst

einfache (Kanonischel Ausdruck


reduzieren.
Funktionales Programm:

Sammlung von
Definitionen, die Angeben, was in einem Schritt
passieren darf

wichtige Ideal:Funktionen & Rekursion.

Imperative Programmierung:
Beschreibe, wie ein Programm Schritt für Schritt vorgehen soll zB. Python.

Operatoren schaden geschehen der Handlung


ne
/von Neumann architektur
Imperative Programmierung: 19.4.2023

·Paradigma:Beschreiben, ein
wie Programm Schrittfür Schrittvorgehen soll

Orientiertsich an der Hardware, Insbesondere an der Sogenannten


von-Neumann-Architektur

FirstDraft of a reparton the EDDWAC Electronic Discrete Variable


Automatic Computer

Steuereinheit
(contral unit]
Recheneinheit
Archimetic logic Zentrale Prozessor
Das Programm
unit)

Takt Leber
Einheit [Central &die Werte befinden sich im
(Luck)
processing unith speicher.
I
Bus I Interaktion mitder Auenwelt
# Der Bus ist auch der von-Neumannsche-Flachenhals
Speicher Ein-/Ausgabe
(memory) I10

Im Steuerwerk befindetsich ein Befehlszähler (Programm Conter,PC), der


auf die nächste
Anweisung im Speicher zeigt.
Die Ausrichtung der Anweisungen erfolgt in Zyklen (Clock cyckles) die
vonTakt geber gesteuert wird.

Ablauf eines Zyklus


·
Steuerwerk holtdie nächste Anweisung aus dem Speicher (FFTCH)

Steuerwerk interpretiertAnweisung (OF(00F)


·
Steuerwerk führtAnweisung aus (EXECUTE)
John von Neumann
-

Rechnung im Rechenwerk
Manhattan -

Projektmitarbeit
-
Lese Schreib partim Speicher (Entwicklung Atombombel
-Durchführen eines Vergleichs ...
Film:Dr. Strange Love

Aktualisiere den Befehlszähler

EHarward-Architektur: im
So können mehrere Prozesse Parallel ablaufe
Bus der CPU ein weiterer
ist Speicher (Cachel)
ImperativeProgrammiersprachen führen diesen Zyklus auf einer höheren
19.4.23
Zentrales Konzept d. Imperativen Programmierig.
Zustand
·

(Configuration / State)
>Gesamtheitaller Speicher inhalte, Position der Ein-, Ausgabegeräte &
Inhaltdes Befehlszählers

Imperatives Programm
Folge von Anweisungen (Statement, Instructions)

Anweisungen ändern Zustand des Systems


>Wirkung, effekt)
Das Ziel istes, durch schrittweise Änderung des Zustands vom
Eingabe zustand zum Gewünschten Ausgabe zustand zu
gelangen.
Wasgibtes für Anweisungen? Welche Wirkung haben sie?

↳Es gibt 3 Arten von Anweisungen:

Zuweisungen (assignments) a 5* 52
·Hatdie Form:Variable=Ausdruck z.B.:a 5=

oder =
+

Wirkung:Werte Ausdruck aus und weise Ergebnis der Variable zu.


·

↓Variable:Name für
Speicherbersich
Ausdruck:Wie in Haskell, hatWert& Typ
zB.:arithmetische Ausdrücke
Bookesch Ausdrucke
operationen auf zeichenketten
Funktions aufrufe, etc.

Achtung:bei der Auswertung eines Ausdrucks kann sich der Zustand ändern
↳der Ausdruck kann Nebenwirkungen haben (Seiten effekte
Iside effects)

Zaneisung:ZweiArten:
A
·

Referenzsemantik:(Python):Durch das Auswerten des Ausdrucks


entstehtein Objektim Speicher
1yz b
Diezugesbjet bindet
den Name
6

Speicher
·
werksemantik:
25.4.2023
Arten von Anweisungen:
1
Zuweisungen (Variable wird Wert zugewiesen) >a 547 =

=
(35)
c a
Referenzsemantik vs. Wertsemantik

In Python adresse vom


b
Objektim Speicher zeigen:

L *in objekt lorientions programmierungs


-> id(a) id(b)
x
->

+ + + +++ ++
+ ++ + 7
+

gleiche id bei 2 Objekten


Wert semantik (z.B.:((H+) das
meint gleiche Objekt
Variable stehtfür festen Speicherbereich Boolscher Vergleich
a
=
=
50
>a int=

↳False
a 1
=

ableibtimmer 1 Python typen


unterscheidet
von Daten
Bei Zuweisung werden Daten zwischen Manche listen veränderbar,
Speicherbereichen kopiert. manche nicht
Tupel nicht änderbar
a 3 int a
Variablen vorher
alle
I
1
bool b
definiert b > int c

Weniger Flexibel L S

2 Kontrollstrukturen: /Kontrollfluss (Control flow)

Kontrollflussanweisungen beeinflussen den Befehlszähler

Sie legen fest, in welcher Reihenfolge die Anweisungen in einem

imperativen Programm ausgeführt werden.

Klausur aufgabe: +Px+ q 0


=

Typische
2 =2
4
a 1,2,3
=

= -

1
b a
=

b [13 100
=
=

Was steht be:a?


25.04.23
4Arten

1 Sprünge (Jumps]
2 Verzweigungen (branches)
3 Schleifen Loops
4 Unterprogramme

Sprünge:
Direkteste Artden Kontrallfluss zu ändern

Schreiben eine Sprungmarke (label) in das


Programm, vor eine
Anweisung
andere Stelle schreiben
An eine wir
go to SSprungmarkenname)
BeiAusführung von goto wird das Programm hinter der

Sprungmarke fortgesetzt
2.B... endlosschleife
5

3
x =

markeit y 7
=
endliche Beschreibung
z
=
7 eines unendlichen

go to marke
7
vorganges

sprünge gibtes auch


bedingten in einer Variante, Sprung wird nur

beierfüllter
bedingung ausgeführt.
x 5 nicht endlos
sprünge sind verpöhnt (kösel!
=

immer

marke:2 =
* x- 7

jump is not 8:marke Z Frühe Imperative Programmiersprachen,


wie fortan, cobol, basic hatten nur

sprünge für den Kontrollfless


In Python /Java gibt
Das erlaubt
es noch
Sprünge, aber nur
effizierte wieder -

noch sehr
eingeschränkt möglich verwendung von code

zB. break Führen zu unübersichtlichen


return Spaghetti-Code"
EisenundProgrammin"Zies:goe
-

...

Programmiersprachen
aus zu

entfernen
Haupt actor:Edsgar 2. Diskstia
26.4.2023
Kontrollstrukturen:

Verzweigungen:Erlauben es Bedingungen zu testen und in


Abhängigkeit von

Ergebnis unterschiedliche Anweisungsblöcke auszuführen

In Python:
if [Bedingung] I
immer an 1. Stelle

Befehle else-Zweig fängtfelber ab

Befehlen müssen eingerückt werden!


elif [Bedingungz]

E
elif unbegrenzt oft Möglich!
Befehl
Optional
elif Bedingung3] eli_=elsetif

Befehl elif & else sind optional


else
[Bedingung 4] s immer an letzter Stelle
Befehle
...

In anderen Programmiersprachen gibt es auch ander Arten von Verzweigungen,


die auch mehr als I Fälle abtesten
auf einmal können (Switch,case, selectl
in Python gibtes nur die eine Art. (match ...casel

Schleifen:(Loops
Führen ein Block von Anweisungen mehrfach aus (mitunterschiedlichen
Belegungen der Variable.)
ZweiArten:
Menge von Elementin
-

Zählschleife (for-Loops) e
wird typischerweise benutztum über einen Bereich zu iferieren
·
In Python:Für Variable im Persich (:foriin range (10):
print (a) tr
Befehle
--
(0,1, .

.,10)
Bereich kann sehr allgemein sein, meist foriin
10,9,-4)
·

range
sind es zahlen folgen, in Python, wird dies
Start ziel
durch range dargestellt immer
·
In unterschiedlichen Programmiersprachen sehen für Schleifen anders äus
Bedingungsschleife(radifraa
=>

loop
Anzahl der Interation wird durch eine
Bedingung gesteuerf
Infyth:while a 10
=

[Bedingung 13: while as 0:


printa -
1

Befehle print ("ich


komme")

Bedingung im Schleifenkopfwird angewendet, wenn false mache weiter


wenn true, führe Schleifenkopf
aus und gete wieder Kopf zu

wiederhole, sodass Bedingung True ist.


Es gibtviele Varianten in anderen Sprachen
Vorkurs 2.5.3023

Schleifen:
Wichtiges Konzeptbeim Nachdenken Schleifen:

Schleifen invariante: Annahme über Zustand zu beginn jede


Schleife Produkt 1-10rechnen:Iteration einer Schleife.
die
Beschreibt welche erfüllt
i1
Bedingung, sein
= ·

prod=1 muss, damitdie Schleitenkorrektfunktioniert"


while i 10: =

prod=prod* ;
i i 1
=
+

print (prod)

30.Ein
Ausgabeamm mitder Auenwelt" zu kommunizieren
·Auenwelt Menschen, Dateisystem, Netz, Datenträgern, Peripheri)
Wird in unterschiedlichen Sprachen Unterschiedlich gehandhaubt
Hängt von der Art der Auenwelt

Einfache Ein-/Ausgabe in Python


Eingabe in Python: E
Name= input (Wie heit du denn -E
alter -
intlalter
num:
if
alter-num 18:
print(" Sie dürfen sich JP. ansehen.")

input liebt nur


Strings, wir müssen diesen Konvertieren

Eingabe in Python:
input (test)
·
liet textund eingabe von der Tastatur
.

eingelesene zeichenkette muss ggf.mitint1) oder Float umgewandeltwerden


dcasting]:typumwandlung
Vorkurs 2.5.3023

Ausgabe:print ("Text")
Text wird auf dem Bildschirm ausgegeben.
Iviele Möglichkeiten die
für Formatierung von TextentPoku)

Bei EIA
istmitFellern zu rechnen (durch die Auenwelt)
·Eingabefehlen, Hardware Fehler, USB-Stick, keinNetzl
Wiegel ich damit
(Fehlerhandling
·
um

~Programmabbruch, muss
explizitgetestetwerdee
3 Rückruf, Signal, unterbrechung
4
Schreibe Fehlerbehandlung, die
Exceptions (Ausnahment
ausgeführtwird & Fehler behebt
↳Strukturierte Möglichkeit,
Fehlerbehandlung Programm vom zu tunnen
↳von Python/Java genutzt
Syntax

Fehler
mit
try:
Block -

.
>exept: kein Fehler

wenn behoben Block

finally:I
Finally istoptional
Block

Ensammengesetze Datentypen in Python (Container

Erlaubtes mehrer Unterschiedliche Elemente zu speichern


kann in Zählschleifen verwendetwerden. (For-Schleife)
Mehrere Arten.

Listen:Speichern Folgen von Elementen, potentiell in unterschiedlichen


Typer
zB.:a 21, =

"Hallo", True]
Reihenfolge
Elemente
wichtig
ist

können sich wiederholen


a[0] Zugriff und auslesen der Liste
anstelle O,
beiWall begingend
a(z] a
zugriff und auslesender liste von Hinten
Vorkurs 2.5.3023
Listen:in, Lend),
I,
Konkatenation

stices (Schreib):können Teilliste erstellen an bestimmten Indexbersich

a[start: ende:schritt)
/ I
inklusiv exklusin

Listen:[x] veränderbar
Tupel: (X)
sind
sind nichtveränderbar &sonstgleiche Funktion.

Nachtrag:
Indexfür das Erste Vorkommen eines Elemente herausfinden.

a 2, "Haller", 2, 1, "West"]
=

a.index (e) (index für Stelle 1 0)


(=

a.index)"Welt") (=4)

a.remove (1) E wert (ischen, bei nicht vorkommen- Feller

a.discard(n) Wert löschen, beinicht vorkommen - Feller

Container:

Mengen ·Geschweifte Klammern:


(sett Reihenfolge nichtGarantiert
Jedes Elementnächstens einmal
effizienter als Listen

assoziative Felder (dictionary,Wörterbuch)


SpeichertSchlüssel/Wert-Paar
Sehr mächtige Datenstrukturen in den meisten Programmsprachen
nicht implementiert
ULT 3.5.2023

Funktionen/Rekursion/ Iteration: Deadcode - nichtausgeführter


cocle
können Funktionen definieren
def name
(p1,P2,Ps)
Block
return

Funktionen fassen eine folge von


Anweisungen zusammen und geben

ihr einen Namen. Dadurch lässtsich das Programm besser Strukturieren.

<Prozeduale Programmers)
Haben viele Namen:Funktion, prozedur, Methode, Subroutine, unterprogramm
Beispiel:
def begruesse()
Print ("Guten Tag")
print?"Herzlich Willkommen zu ALP2")

Funktionen können Parameter erhalten & zurückliefern

Beispiel:def quadrat (x):


return xoX

Funktion keine Parameter erhalten & etwas zurückgeben

Die Parameter bei der Definition der Funktion Lien formale Parameter

Die Parameter bei Aufruf heit


tatsächlicher Parameter (actual Parameter)

Beim Aufruf der Funktion, werden die Formalen Parameter an die tatsächlichen

Parameter Gebunden.

Bei Python funktioniertdas nach der üblichen Python Regeln.


Dies kann zu Nebenwirkungen führen.
Die Bindung zwischen den Formalen und den tatsächlichen Parametern wird

in unterschiedlichen Programmiersprachen unterschiedlich gehandhabt wird. Man


spricht von
Aufrufkonventionen 3 Varianten:Call by value, call by reference, call by
name
ULT 3.5.2023
Gültigkeitsbereiche:(Scopel
Variablen die innerhalb einer Funktion definiertwerden, gelten nur innerhalb

der Funktion. Auen sind sie nichtsichtbar (Lokal Variablen)

Es kann zur
überdedung kommen (variablen gleicher name zB.b:56 4) =

global =
xNach Funktionsanfraf bleibtVariable
sollte aber vermieden werden
erhalten

kann zu
Nebenwirkungen führen und sollte Sparsam
eingesetzt werden

Rekursion & Iteration:

Funktion ruftsich selbst


auf
Das führt oftzu einfachen Lösungen von Problemen, die sich direkt an der

Problemstellung orientieren.

Das istaber in
imperativen Programmiersprachen, oft nicht sehr effizient,
weil Funktions aufrufe, tener"sind.

Deswegen verwendet man oft Iterative Lösungen, von Möglich.


ÜB 9.5.2023

Aufgaben:
If[Bedingung]

then I Block

If[Bedingung]

then I Block

If[Bedingung]

then I Block

2.) Switch-Case Fehlercode try


exept
finally
10.5.2023
Rekursion

Mensakartenproblem:
·Karte im Hörsaal gefunden
·

BE
Lehen zur Mensa
·

·
Maximalen nutzen erziehlen, BE ausgeben, jedes Gerichtmax 1x
·In der Mensa gibtes Speisen 1,2,...in mitPreisen P, R...., n in t

Frage: könn wir eine Auswahl an


Speisen treffen (jede Speise höchstnik
sodass Be ausgegeben werden.
Formal:Frage ExistiertI c{, .., us, sodass
Pi B ist?
=

Beispiel:Mensa Karte TOE


Angebot der Mensa:
Flammkuchen 5E P.

E
=
·

·Humus 2E Pz=

·Kamillente 1E=P3 Viele mögliche Lösungen


·Mate E
5 Py
=

E P5
Suppe
·
2 =

Bsp. 2: B 6 E & Kamillentee


= leer
ist

bleibt. das rest


Möglich,
Ziel:löse das Mensakartenproblem (SUBSES) Rekursiven
mit Aly.
Idee:Betrachte Speise 1

wenn man Speisen kauft, dannhaben wir ein Budget von


B-Pe Euro mitden Speisen 22, ..., n} ausfüllen.
wenn Speise 1 nicht
kaufen, dann müssen wir ein
Budgetvon BE
mitden Speisen {2, ..., n3 ausfüllen.

Dieser Algorithmus ist nicht sehr effizient!


wenn man sich genügend groe Beispiele anschaut, dann siehtman,
dass sich Funktionsaufrufe wiederhahn können.

Beschleunigung:Gedächtnis technik:
Speichere Funktions die schon Stattgefunden haben in einem
aufrute
Wörterbuch. Führe Funktionen nur aus, wenn noch kein
Aufrut stattfand.
10.5.2023
Iterative Lösung:
Idee:Baue Systematisch eine Tabelle allen
mit Funktionswerten.

Es gibtein für
Funktionswert jedes bzwischen 0 und b und

jede Anzahl Restpreisen zwischen 0 und n

Definieren eine Tabelle a

a[i][b] True, gdw.


=

wir aus Speisen (it1, ..., n) eine Auswahl treffen


können die be hat
genau
sonstFalse
Formel für a:

a[n][b] True =

g.dw. b 0
=

a[i][b] a[i 1][b]


=
+

(p[i3 b1a(i ?][b p(i)]


=
ich +
-
16.5.2023
Mensakartenproblem: ReferenzSemantik

·Budget B
·Preise P,z, ..., Pu
·

Frage:Gibtes Auswahl v. Speisen, sah. die Speisen Budget B erreichen kann?

a zweidimensionales Feld
a[i][b] Kann man aus
Speisen it, ..., n ein Mann von Speisen
auswählen, die seine be kosten,

3
a abcdef
=

-Eindimensional
0 + 2345

0 7 234 In Python:a:Cabic) [def] (ghi]...

3 zweidimensional

*
E

BudgetB Imperativ

:2)D
0

Bsp.:B 4
=

-> ben Speise (keine Speise) Py


=

Speise

Diese Technik (Tabelle v. Funktionswerten ausfüllen) hateinen Namen:

dynamisches Programmieren".
Es gibt viele Varianten des Mensakartenproblems, welche sich ähnlich

Lösen lassen.

Bekannteste Varianteistdas Rucksackproblem ->


Aufgabenblatt
nicht liste
·Erhalten für tlf der Speisen.

?
Der Algorithmus füllt eine Tabelle der Göe(n+1) (b+1) aus.

Geht den besser?


16.5.2023
Suchen & Sortieren:
Gegeben:Liste X:xnix, ts von n Elementen aus totalgeordneten
Menge X
totalgeordneten Menge 2 Elemente sind
=

Bsp.:
direktverglichbar 1 <2

Gesucht:Permutation :(0, n-13 ->


C0,...n-1] sodass gilt
...,

g Xz...Xn-
*

Bsp.5
A, Xo, X2,y,X3

Warum wollen wir sortieren?

·
Schneller Suchen
·
zwischenschrittfür andere Problem, mit sortierter Liste leichter
Uns interessiertdie Sortierte Reihenfolg
zB. beitreisen
17.05.2023
Suchen & Sortieren:

In einer Sortierten Liste lassen sich Iterationen wesentlich schneller finden

Gegeben:Liste mitn Einträgen


Jeden Eintrag besitzt ein Schlüssel (key)

Aufgabe:Finde Eintrag mit Schlüssel (falls vorhanden)

Dsp: Telefonbuch, Schlüssel:


·

Name

Eintrag:Name, Adresse, Telefonnummer


Campus Management
·

↳Schlüssel:Martikelnummer
Eintrag:StudentX...
wenn die Liste beliebig ist, wissen wir uns im Schlüsselfall alle
Eintrage anschauen a schritte

noch durchmischtist,
Also:wenn die Liste wesentlich schwerer
geht es

Warum:(Binäre Suchel
sei kam der Schlüssel in der Mitte der Liste

Fall 1:km 1 Fertig, karte gefunden


= =

13 km 2 K

Fall 2:kim 1 => linke seite weiter


Liste km

nur Hälfe
Fall 3: kmck => liste Rechte seite weiter
für Hälfte

FallY:Leere liste->I nicht enthalten

Wie viele Schlüssel muss ich mir anschauen?


In
=>
jedem Schritt halbiert sich die Gräe der Restliste

Frage: wie oft muss ich n

halbieren bis eine


Zahl<1 dabeiherauskommt?

[Log(n +
11]
17.5.2023

Schlussfrage:Es istnutzlich zu sortieren


wie sortist man?

1 Sortieren durch Einfügen (insert sort)


·

In jedem Schritt gibtes eine schon sortierte liste

.
Wir nehmen das nächste Elementund fügen es an die
richtige stelle in die bereits sortierte lists ein.

Frage:Wie implementiert
man das?
nicht
effizientimperativ?
Frische liste a a 5762749
=

0,1 ... n - 1

Index is -

In der Iteration istdie Anfangsliste:


a[i], ..., a [i-z] sarfift

Aufgabe:Bringe a[i) in die


richtige Position in der liste a G], ...,
a[i]

Lassen; in der Liste nach links bis es an der Richtigen stelle ist

↳Sortieren durch verschmelzen (MergeSof)


Idee: Teile & Herrsche

Unterfilte liste in I sortierte teil

Sortiere teile rekursiv

Füge beide teile zusammen durch Verschmelzen


23.05.2023
Sortieren:

~Sortieren durch Auswählen (Selection Sort)


2 Sortieren durch Einfügen (Insert Sort
3 Sortieren durch Verschmelzen (MergeSort)
↳ Nachteil:Es werden ständig neue listen angelegt, zwischen welchen Hims
him & her k opiertwerden. Viel extra Speicher
-

(von John v.Neumann)


4 Schnelles Sortieren (Quick Sart) (ron CAR (Tony) Hoore)

Idee:Teile & Hersche

alg.: erfolgtvor dem rekursiven Aufruf.

a Wähle beliebiges Elementxaus der liste (Pirot


Element) X =

5Untertic in 2 listen
(i) alle Elements (x

(ii) alle Elemente X

C Sortiere Teiliste rekursiv

Füge Ergebnis+Pirot Element (X)Teilit


↳d zusammen Fillisex

Frage:Wie implementiertman diese geschicktin einer imperativen Sprache?


Die Geschwindigkeit von
hängte r
Quicksort von der Wahl des
Pirot-Elementes ab.

Wähle das Pirot-Elementzufällig

Dann wird die Liste mit


groer Wahrscheinlichkeit einigermaen
gleichmäig"aufgetict.

Las-Vegas Algoritmus
Algorithmus benutztden Zufall. Das Ergebnis das
ist gleicht also:

laufzeithängtab r.
zufall.
24.5.282]

Heap-Sort Klausur relevant


Idee:Verwende geignete Datenstruktur zum Sortieren

Datenstruktur:Methode um Daten im Rechner zu repräsentieren


anzuwenden um eine gewisse Funktionabilitätzur
verfügung
zu stellen. Welche durch die Operationen beschrieben, die sie

einspeichern.
Datenstruktur für Heap-Sort:
Piraritäts warteschlange (Max-Hemp)

Operationen:insert(X) einfügen eines neuen Elements A

Operation:delete Maxentfernt Elementmitdem gröten Schlüssel und


Liefertes zurück.

Diese Operation kann man auf verschiedene Arten umsetzen

limplementieral
Heup-fortverwendeteine besonders effiziente Artdiese Operation
nämlich
umzusetzen, Binären Max den Hea
Binären Max Heap:
·

Organisieren der Elemente in einen fast perfekten binären Baum

3
~Wurzel grütes3

100e
n Elmente Element MaxHeap
-9 -kante
-

00 90
x1
Kinder
->
-
- Eigenschaft
199,90 70 70

00000 Blatt ok d
Alle Elemente bis auf die letzten sind roll besetzt.
Die Letzte Ebene istvon links nach rechts besetzt.
Elements sind in den Knota gespeichert.
Elemente müssen die Max Heap Eigenschaft erfüllen.

↳ Für alle Kanten gitt, Schlüssel der Elternknoten Schlüssel in Kind Knoten

Max Heap Eigenschaft garantiert:


-> Wurzel enthältdas Maximum
24.5.23
Wie ihn ein?
fügt man

Wie figtman in einbaum Max Heap ein?

·100
- W Aufgabe:füge 99 ein
-99 70
4
* / W
90609980 70 58

zu
e
Idee:setz 99 an und lasse sie nach den Wandern
die nächste freie Stelle
bis Max Heap Eigenschaft erfülltist. (bubble up)=(Seitenblase)
Delete Mar:Entferne Element von der Wurzel, gibt es zurück
schrlibe hinterstes Element des Max-Heaps an die Wurde und
lasse es nach unten wandern (Bubble Downl
beiden Kindern, vertausche
vergleich mit

den
mit gröten Kind, fall, schluss
Der CLue:

Diese Besondere Struktur des Max Heaps erlaubteine sehr elegante und
effizienteImplementierung,
0
0 0123456789101112131415

1 I20
38405-ob Elternknoten bekommen:((kind-1):2)
cosés de on

0nj
Speichern der Elemente der Knoten in einer Liste, Wurzel beiIndex O,
dann von unten und von
oben nach links nach rechts, sie:index,
eines Knotens in der Liste, dann lassen sich die Indizies der Eltern- und
Kinderknoten wie folgt bestimmen:
·
Parents (i) (i 1):2
= -

left child (i)= (2.i)+1


·

rightchild(i) (2.i) 2
= +
30.05.2023
Binäre Heaps nor
3 g
zo

sot Da untere Ebene nichtvollständig


Fast vollständig Binärer Baum sein muss, fast
binärer Baum
· 7008

Max-Heap-Eigenschaff
Elemen t im Elternknoten?Elementin kindknoten
·
Bubble up & Bubble down
als liste.
ImpliziteDarstellung
def parent(i):
return (i -
1)/2

def Lchild (i):


return 2. if 1

def Rchild (i):


return 2.i 2 +

Eingabe:heap, dargestelltals liste


#

index:Position des Gewünschten Elements


Aufgabe:lasse das Element
# aufsteigen, bis max-Heap Eigenschaft
an Position Index

erfüllt ist.

def bubble Up (Heap, index):


while (index 20 and Heap Sparent (index)] <Heap (index]):
def swapElements (Heap, index, parent(indext)
index= parent (indext

Eingabe:heap, dargestelltals liste


#

index:Position des Gewünschten Elements


size:Anzahl der Elemente im Heap.
Aufgabe:lasse das Element
# an Position Indexaufsteigen, bis max-Heap Eigenschaft
erfüllt ist.

def bubbleDown (Heap, size, index=0):


While child (index Size and Heap [Lchild(index)]> heap (index)) or (child(index)

<Size and Heap [Rchild(index)]: Heap Sindex]):


nextIndex next Indext
=
1
Rchild(index)<
if size and Heap (Rchild(index)] Heap [child(indel]:
nextIndex next Index +1
=

Swap Elements (Heap, index, nextindex


nextindex
index=

def heapSat(al:
#Baue Hea
fori in range (1, (en(a)):
bubble Up (a, i)
a [2,7,6,4,9,75,70]
=

#Bone sortierte liste print (al


for;in range (Gulal, 7,0,-1): -

Leapsort(a)
swap (a, 0, il
bubbleDown(a,i)
30.05.23
Analyse von Algorithmen:
Frage:Wie gut istein Algorithmus?
1
Eingate Algorithmus muss korrektsein.
endlich vielen Schrittene
siericgindenglichfeingabe,
Er nach

Beim Sortierproblem, ist klar, was die Richtige"Antwort ist.


es

Laber es
gibt das Problem, der Stabilität, aber das istnichtimmer der Fall)

Ohne Korrektheit" bedenkt, existiertes ein mathematisch genaue


und dass
Spezifikation der gewünschten Aussage mir
u m
der
Algorithmus jede
für Eingabe
eine Ausgabe

800

Später (Hoore Kalkül, etc.)


=>
-
31.05.2023
Analyse von Algorithmen:
1 Kowektheit

2 Effizienz Der Algorithmus soll möglichst schnell" sein"

WhI:Aussage der Effizienz eines Algorithmus, der unabhängig istund

Konkrete Hardware, Programmiersprache, laufzeitausgabe, ...

Mittel abstraktes Maschienenmodell

↳ Mathematische Idealisierung einer realistischen Hardware

Definiertein Satz primitiver Operationen & zugehörige Kosten.

Algorithmus bestehtaus primitiven Operationen


laufzeit für gegebene Eingabe, Summe der Kosten
eine der ausgeführten Operationen
Viele Beispiele für Abstrakte Maschinenmodelle:

Einband-Turingmaschine
·

·Mehrband-Turing maschine
.
X -
Kalkül

Beliebtes
Modell für Sarticalgorithmen:
Vergleichbasiertes Modell

Primitive Operationen:
.

Vergliche Elemente Eingabeliste


der

vertausche Elemente der


.
2
Eingabeliste
·

beliebige Operation, die nichts mitder Eingabe zu tun hat.

Kosten:
Vergleich:1
&Beliebig
-

Vertauschen:O
·Rest: 0

laufzeit eines Sortiealgorithmus Anzahl durchgeführter


=

Vergleiche.
31.05.23
Für welche Eingaben Analysieren wir den Algorithmus?
Antwort: Alle! (Worst-Case Analyse) -

Genau:Jede Eingabe hat eine Länge".


Die Eingabelänge isteine natürliche Zahl (EN) und isteine

Eigenschaftdes Problems.
EB. Länge der zu sortierenden Liste;Anzahl der Ziffern der Zahlen
·Budgetliste beim Mensakartn- die in995bestimmt
problem. Gröter gemeinsamer Teiller"
Wir stellen die Langzeit als Funktion T:(-> dar
3 worst-Case -

T(n)=gröte caufzeit für eingabe der längen Lauf zeit

Bemerkung:Worst-Case-Analyse istPessimistisch & Unterschätztund

ggf. das typische Verhalten" des Algorithmus spiegeltnichtwider


(zB. deterministischer Quicksorst)
Bsp.:Isertion sort im
Vergleichs basierten
Modell

Aufgaben:Was istdie Laufzeit von Insertsortmit der Eingabe 13254"


(zähler: (6)
2
13,254
Die Laufzeit 6.
ist
123
S

isj

2354672345
7

is

Aufgabez:Bestimme T(3). Zähle alle Eingaben länge sanf


-123732213237321372

Vergleiche:2 3 2 3 3 3 T(3) 3 =
def isort(a): 31.5.2027

Algorithmus:
for i in range(len(a)):
# füge a[i] an der richtigen Stelle in a[0], ..., a[i] ein
j = i
while (j > 0) and (a[j] < a[j - 1]):
swap(a, j, j-1)
j = j - 1

Aufgabe 3) Bestimm T(n) für allgemeines n

Hier müssen wir Anhand des


Algorithmus argumentieren
Bei Insertsort folgendemaen:
gehtdas
·

Es gibt 2 Schleifen für schleife Auen


·

While-Schleife innen

Die far-Schleife wird a mal ausgeführt


i cantet n 0 bis n-1
Wie oft wird ali-2) Kopf der While-Scheife
der
Vergleich a[1] in

ausgeführt
Das hängtdavon ab, was
genau
die Eingabe ist.

Aber wir können sagen, dass dieser Vergleich höstens i- mal darchgeführtwird.
Bestell in Schlimmsten Fall haben wir histens

=4-)n - Vergleiche 2
=

Diese Anzahl
Vergleich kann wirklich
passiern:
Eingabe:n n-T n-2... 1
ZB. Liste von hinter aufsteigend
Also:T(n) als
- Eingabe
=

Bemerking.
Diegenaue Laufzeitfunktion T(n) kann sehr schnell kompliziertwerden.
6.6.2023
0 -Notation

worst-case-Analyse von
Algorithmen:
Bestimme die Funktion T(n):X->X
welche
fürEingabegröe
jede der Maximalen laufzeitausgibt, die der
in

Algorithmus für Eingabe gröen braucht


Problem:Die Funktion kann
sehr komplexwerden.
Lösung: Asymtotische Analyse"
↳ wir konzentrieren uns auf das Wesentliche, d.h., wir bestimmen
nur den dominanten Fern von T(n)
und wir
ignorieren Konstanten.
Vorteil:Liefert prägnante, gut verständliche Aussage zu
Bewertung eine

Algorithmus
Nachteil:Starke Vereinfachung der Wirklichlait

Bsp.:T(n) =
2 n2 +2 -0,1 logn + 2400
↳Dominater Term, weil grüte Laufzeit
T(n) 102g(logn) 5 0,1 logn
=
- +


Dominater Term

T(n) =

0,001.24 1000.00
+

Dominanter Term

De.. O-Notation /Landan-Notation/asymotische Notation (von Kanth eingeführt)


Sei fig:/NeFunktionen:
~Wir sagen g(u) ist asymtotische obere Schranke für f(n) 0 (y(n)), g.d.w. gilt
=

3c 0 7n.EN
=
n no-f(n) c.y(n)
= =

2 g(n) istasymptotische untere Schranke für f(n)


f(n) (y(n))g.dw. gilt 72>0
=

JncX knnc:f(n)- c-g(n)


3
g(n) ist asymptotisch gleich zu f(n), f(n) F(y(n))gdw.
=
sind
f(u)=(g(a))
Tetta
7cn,z20,5noEN Fn? nc:(n-g(n) =f(n) (-g(n) =
6.6.2023
BSP:Behauptung:T(n) 0 (n)
=

Grund:c 6 =

40 100
=

Dann gilt für allen?No:


Zm +2 0:DagntZn
=

=Im In+
11

+
t ein =6.n

(Be:0 (n) istminus 0)


↑ =

Jetzt können wir


sagen

Die Laufzeitvon Insert sort (nY"


ist

Damitmeinen wir, wenn wir Insert fort im vergleichsbasierten Kostenmodell


betrachten, dann besitzt die Worst-case laufen itFunktion T(n) von
Insertfort die Eigenschaft, das T(u)=0(n) ist.
Typische Langzeiten:
E() >
Konstante LaufzeitzB. Engriffauf eine liste.

E(Logn) >
Logarithmische LaufmitzD. Binäre Suche

o (m) >
Sublineare LangzeitzB. Suche in einer unsortierten lists mit
Quantencomputern
⑦(n) ->
lineare (aufzit zB. Suche in unsortierte liste
alle Elements d. Eingabe betrachten
⑦(nlogn) -> Linearimetische Laufzeit

⑦(n) -> Konstant czB. Matrixmultiplikation, gilt als effizient


⑦(2) ->
exponentielle lang mit
Betrachte alle Teilmengen

⑦(n!) -

Betrachte alle Anordnungen der Eingaben.


7.6.2023

langzeitanalyse zu Sortier verfahren:


7 Insert sort:T(u) 0 (n) =

2
Merge Sort:
Sei T(n) die worst-case-laufzeit von
Mergesort.
Potenz ist.
Nimman zur
vereinfachung das n eine zweier

Die Funktion Tul wird durch die Folgende Rekursion beschrieben:

+(1) 0

3
=

T(n),Ri+, für 22 Rebursive


Gleichung
E
2 Teillisten vergleiche/Mergen

Um Mal zu bestimmen müssen wir die


Rekursionsgleichung lösen!
Wie lösen wir die Rekursionsgleichung? Es
gibtnichts Allgemeines, nur Tricks!
·
Ein Bild
I
T(n): H ->
vergliche auf 1 Inkanikationen mit in
Vergleichen
jeder Ebene 2 Inkanikation mit Vergleichen
E E
4 Inkanikationen mit in
I
Vergleichen
↑ *
Logn-1Ebenen
* 8 Inkanikationen mit
3
an
Vergleichen

E 88
·

-ein
1111... O Vergliche
in 1111

Also insgesammtauf jeder Ebenen vergleich (bis auf die Letzfel


es
gibt (logn) + 1 Ebenen Also Gesamtanzahl der Vergliche nlogn
=

Also T(n) 0(uLogn)


=

n, ,Fo,,...
wen =
->
7.7.2027
3 QuickSort
lagzit:
Deterministisches Quicksort:Pirot element:hinterstes Element

Pech:hinteres Element
gröte Element/kuingte Element
=

Im Pech Fall erhält man eine Rekursion der Form:

T(0) 0
=

T(1) 0 =

T(n) T(0) T(n x) n,n= 2


=
+
- +

Bild:

L 3
Vergleiche

"
M
- E
E
n 7
-
n - 1
vergleicht n (n 7) (n 2)-
+
- + -
+
.
20
. + +

I n -
2 11
n-Ebenen n-a A
-
3 1)

* n - 4 L
Lumgekehrte GanB-Summe
n 3
0
:
-

=O(n)
i
⑧ -n

"

Glücksfall:Hinterstes-Median (Mitte der Sortierten Reihenfolgel
Im Glücksfall haben wir
folgende Rekursion

BTs OCulog
T(0) 0
=

+(1) 0 n)
=
=

i(n) 2.
=

T(E) n
+

Never Trick:T(n) T(0)+T(n-v) T(n 2)...


=

=
+
n n +
-

nt
- n 1
+ -
T(h 2)...
+ -

Bestimmen durch Einsetzen =n (n 2)


+ - T(n
+ -

2) n (n 2) T(n 3)...
=
+ - + -
7.6.2013

NichtKlausch relevant
Randamisierten Quicksort:Wähle Pirat Elementzufällig:

Analysiere Erwartungswertder Anzahl der Vergleichs

Dazu gilt Folgende Rekursion:

T(0) 0
=

↑(-1) 8
(ET(k 1) T(n k))
=

T(n) n
=
- +
+
-

Lösung der Rekursionsgleichung:


Kirschreiben T(n) n
(ET(k x) (2-E+n-k))
=

um
-
+ +

= n
.k) 1
+
+

=n =
+

T()
Das heitdie Rekursion lässt sich schreiben als
T(0) 0 =

+
↑(1) 0 =

+x n
=

Neuer Trick: Summe aufternen

Es gilt:
T()TK In =

n +

n.T() n ETCK

einer-mettig
2.
= +

-
Subtrahieren

3 nTi)
-

-
-
(n-c). T(n-2) c (n-2) 2.T(-1)
=
+

Also: nT(n)
2n =
-
1 (n 11-
+
+ +(n -

)).n(n 1)
- +

#) 2 ) I2) lässtsich schreiben als:


ht
=

h(n+2 1 +
+

n
Also Rekursion
=

T(0) 0,T() 0
=
=

) ood
13.6.2]
Untere Schranke für Vergleichsbasiertes Sortieren:

Frage:Was der schnellste" sortier algorithmus


ist

Frage:Eibtes eine X-N, sodass beijeden verglichsbasierten


Funktion
Sortieralgorithmus Aund jede Eingabelisten eine Eingabe I der
Gröe existiert, sodass Amindestens M(n) Verglich benötigt,
n die um

Sortierreihenfolge für I zu bestimmen.


Antwort:Sicher zB. ist
auf jedenfall U(n)=1 eine mögliche Antwort!
Bessere Antwort:U(n) n 1
=
-

Beweis:Nimm an A seivergleichsbasierter Sortier algorithmus, der Eingabe grüen


nur höchstens nie vergleiche benötigt.
Führe A aus and Eingabe
*
zB. n 5
=
+
,+2,xy,xy,x5
,xz,X3, . . .

,
Xn

123 12345
n

und betrachte die


- -

Vergleiche die A durchläuft XX, -

+2 x
xy
zX5
*

Das sind höchstens


n 2 viel
-

Zeichne Graph mit


Knotenmenge X, ..., n
und kant X, ..., i der A vergleicht
mitx;
*

0
-richt zusammenhängenderGreer zusammenhängendeine

Fehler im Skript, Folgt! ABBRuch!


Betrachte Eingabe I in der Wertan Stelle x, vertauscht ist mitWart
x

an
Stellex;
I In was sich hier ein

553Datgrimus
wei nicht
=

-
13.6.23
Tatsächlich gilt
U(n) (nLoga)
=

Beweis:Existiert Sortieralgorithmus A
und Eingabegröe n.

Führe A auf Eingabegröen aus, ohne die Eingabe festzulegen.


Was passiert?Atutirgendwas und irgendwann verglicht A 2 Elementer;-X;
aus der Eingabe.
Xixxjz
Ja ·Nein

xx An Xo

Ja vein Ja Nein

Je nachdem, ob xix;istoder Xixx;kann der Algorithmus auf I


verschiedene Arten fortsetzen.

Dann der nächste Vergleich, der Ergebnis des vorherigen


erfolgt vom
Vergleich abhängen kann

↳ weiter neue
Verzweigungen, dann so weiter

Bis der Algorithmus genügend Infos hat um eine Sortierreihenfolge


aus
zugeben.
Das Vollendete für jede Eingabe sich n kann das Verhalten u A als
Entscheidungsbaum dargestellt werden.

Entscheidungsbaum:gewurzelter binärer Baum, inneren knoten sind beschriftet


mitvergleichen der Form xicxi
I

Die Blätter sind BeschriftmitSorfierreihenfolgen.


Man Sortiert
eine Konkrete Eingabe miteinem Entscheidungsbaum, indem man
der
bei Wurzel anfängtund es beija im Linken kindgehtund ber
mein im Rechten.

Dies wiederhaltsich bis zu einem Blatt,dortmuss die


Richtige Sorfirreihenfolge
stehen.

Bsp. Entscheidungsbaum zum Sarfieren n 3


=

in in s

↓x3

sy ein -

tycxy ⑭W

-
(a/
*1,Xg,xz
13.6.23
DamitEntschichungsbäum Funktionieren kann, müssen alle Sortier reihenfolgen vorkommen?
als Blätter min. 1X

Es gibtn! mögliche Sortierreihenfolgen für n Elemente.

Also muss jeder korrekte Entscheidung, baum für Eingabegröen minn!


gräe Blätter haben.

Entscheidungsbaum istBinärbaum
Dh. Ebenen- höchstens 2 Blätter

Dh. die Anzahl der Ebenen in einen


Entscheidungsbaum muss mindestens so seine

dass 2" In! ist he logn!

Also:Ein Entscheidungsbaum besetzt mit ein Blatt, für das Mlnlogn) verglich
nötig sind

Das bedeutetfür jeden


vergleichsbasierten deterministischen Sortieralgorithmus &
jede Eingabsgröe n existiert Formal, für
ein oh (n
das Luga) vergleich mindestens.

·
Merge-Heapsortsind am
effizientesten.
Nur für Vergleichsbasierte Verfahren
14.6.202]

Programmverifikation:
Frage:Wie kann ich wissen das mein Programm Korrekt"ist.
Frage:Was heitkorrekt?
Antwort:Es gibteine Präzize Spezifikation, diegenau festlegt, was das
Programm tun soll.

Wenn Spezifikation vorliegt, dann bedenkt konekt:Programm erfülltdie


spezifikation.
Istes immer
möglich, eine genaue spezifikation anzugeben:
In einfachen Fällen ja, in komplexen Fällen wird die
Spezifikation
typischerweise Schrittweise entwickelt.
Aber:auf jeden Fall ist es möglich für einzelne Programmabschnitte
eine Prinzise Spezifikation zu erstellen und die korrektheitnachzuweisen.

wie sieht eine


Spezifikation aus?
.

Verschiedene Möglichkeiten
Wir konzentrieren uns auf Folgende:
.

Eine Spezifikation besteht aus 2 teilen:

·Vorbedingung (Pre-Condition)
(Post Condition)
Nachbedingung
·
-

Die Aussage, welche dieSpezifikation Liefern soll, istFolgende:


.

wenn sich das System Zustand befindet, welche der


in einem
Vorbedingung entspricht, dann führt das Programm nach
endlich vielen Schütten in ein Zustand, welche der
S

Nachbeding entspricht.
zB. Spezifikation fürs Wurzelziehen:
Vorbedingung as [avariable, Float]
Float:Geitkommazahl
Nachbedingung bib a
=

[b Variable, Float]

Aber:nicht ganzkorrekt Isinavall


besser wäre

Nachbedingung B20, b.b=0.9.a nb.b = 1.1-a

② suche in Sortierte liste

Vorbedingung: a verschiedene Elemente


liste
~Elemente gleicher Typ
a[R] =a[2] =
a[w] = . . .
a(n 1]
= -

Nachbedingung:1 Index, sodass gilt:(Ji=50, ...,n 1:a(i) x) a(k] X


= =
-
=

IV:= So, ...,h z:a[i] FX)=k


-

None
=
14.6.702]
Formalisierung:
Die Tatsache,dass ein Programm S eine
gewisse Spezifikation erfüllt
wind mithilfe von so genannten Programmformeln" formalisiert.
Schreibweise:EPS [Q3

Verbedingung -Nachbedingung
Programme
abschitt
Folge/anweisung
wir
sagen jetzt die Programmfame [PYSSQ3 ist ältig,gaw. gilt
für jeden Zustand der die Vorbedingung P erfülltgilt
wenn S

im Zustand gestartetwird und wan S nach endlich vielen Schritten

terminiert, dann erfülltder Endzustand die Nachbedingung Q.

wir
sagen auch [P3S[Q3 gültig gaw. S istPartiellkorekt für

SpezifikiertP, Q

BSP.:{x > 03 xx = -
v3xx 13 -

gültige Programmformel

2 x 303 xx
=
-
1[x =03
gültig, nur wenn int
x ist.

{xx3x x 10(x)03 =
-

Programmformel, die nicht gültig ist.

[x203 while x! =

7 x x+1
=
9x=73

gütig, dann immer, wenn Programm Arminiert muss =1 sein.

Also Programm verifikation bedeutetfür uns wir


geben einer Programmformel
weise nach, das sie gültig ist.
wie: viele Möglichkeiten Hoore Kalkül
wir schauen uns an, den
Hoore-Kalkal ist logischer Kalkül um nachzuweisen, das Programm formeln

Formales Beweissystem
gültig sin

aus Axiomen & Schlussregeln

Axiome:Bestimmte Artvon Programmformeln sind gültig.

Schlussregte:Wenn bestimmte Programmformeln gültig sind, kann ich darauf


schliepen, das andere gültig sind.

Schlussregeln des Hore Kalküls: -

Sequenzregeln
[P] SER3, {R3 S-[Q3
[P3 S, S2 [Q3

IF-Regel:3P B3 S. {Q3, [P D3 Sa [Q3


SP3 B: if S2 else 52 Q)
20.06.202]

Hoare Kalkül

Ziel:Definier ein
logisches System um die Gültigkeitvon Programmformeln
nachzuweisen.

Axiom
·
& Schlussregeln

Schlussregeln des Haare Kalküls:

Schreibweise:vorraussetzung, Vorraus.2, Vorraus. K

Schlussfolgerung
Bedeutet:wenn voraussetzung 1 bisk erfülltsind, dann giltauch die
Schlussfolgerung.
1 Sequenzregel:Hintereinander ausführung von Anweisungen

{R3, {RY SSQ3


# SP3:vorbindung
[P3 S1,524Q3 S
Sequenz/Befehl
=

{03: Nachbedingung
2 IF-Regel: SB3 Bedingung
=

# [Q3, 5P13S [Q3


SP3 if B:S else S2 [Q3

3 Konsequenz-Regel:Wir können und die


Vorbedingung verstärken
abschwächen
Nachbedingung
{p'3S
# Q [Q'3,0 =

EP3S {Q3

4 While-Regel: Schleifen invariants


S543
# durch die
Was istdie
Bedingung,
.

{P3 while B: S <P1 B3 die Schleife aufrechterhalten


wird.

Die Schleifen invariante.


Bedingung inPhit Iteration
Sie muss jeder der Schleife aufrechterhalten werden.
Teilweise istes eine
groe Herausforderung, eine gute Schleife zu finden.
Die Regel zeigt was nach der Schleife passiert, aber nichtob die Schleife
enden wird.
Die Aussage istnur für den Fall das sie Terminiert.
Nachweis der Termination sind andere Techniken nötig (nicht immer Möglich)

Goldbach
Vermutung:Gerade zahlen Summe zweier Primzahlen.
=

Lendlose Schleifel
20.06.202]
Axiom:(Schlussregel ohne Vorraussetzung, immer Gültig)

Zuweisungsaxiom: {QCx/E]3 X= E EQ3

· Achtung,
un i
string G Variable Ausdruck so istes
ersetze jedes Korrekt,man muss umderlen.
vorkommen von
in Q durch E
*

Was vorher fr Egalt, gilt nachher für


oder nach der
Zuweisung spielt die Roll von E."
Beispiele:
Aufgabe:Benutze den
Beweisen
Haare-kalkül, um die folgenden Programmformeln zu

{x213 xx
= -
3x =0]

Nach zuweisung gilt:


{x 1103x x 1[x10]
- =
-

Da gilt 7-120) x21 folgtauch [x113x x-1Ex103


=

Silsei Wi

Beispiel 2:Benutze Haare Kalkül


-

um zu
zeigen
{y21 1y2537 y 15x221y = 53 = +

Nach
zuweisung gilt:
{y 1 = 2ny253112x231y=53
+

- I Da nachmuster
{y= 1 1y=53 einsetzen Erst das istes lautAxiom

was vorher war


I I von
wahr.
hinter angefangen.
20.6. 202]
Beispiel:Zeige folgende Programmformel
2x A,y B3 {y B1x A3
=
= = =
=

z
-
x
=

-{y B1 =
z A3
=

1 1 (1B1
= ( =

= A3=

1
= E

3x B1y A3
= =

Nach zuweisung gelten


{y B1x A3z x{y B1z A3
3 Eigentlicher
· =
= =
= =

{y B1z A3 x y2xB1z A3
= = = =
= Beweis
im Hoare-kalkil
·
(x B1z 13y z
= [x B1y A3=
= = =

Wenn
sequenzregel giltauch:
·

(y B1 x 13z x,x y{x


= =
= B1z A3
= =

Nochmal
sequenzregel anwenden:
{y B1 x A3z x,xy,y z3x B =

y A)
= =
1
= =
=
=

·Beider Sequenzregel gibtes genau


Z
vorraussetzungen!

komplexen Beispiel:(ganzzahlige Division)


\x2019-03
r 0
=

r.q 5 10)
S
x-(x
= = +

while q:
S S
=

q
-

r r+ = -
1

{x r.q=
5152015
+ -
q3

Eigen:01q0br s1sx)3(A)
Müssen 0,3
= =
x

(x r.q
=
+

oder
qs=sq,
Ex
s.1
=

rürzu

2x r .q s15201scq3
=
+

3
03
508.q1 203( x ) 20 0n x
1 =

(1) -
30
r.q1x 03
{x r.q x
1x203
=
=

+
=
Songo Nicht Formal!
S A =

2x
r.q 515203
=
+
21.06.2073
5x = 01q>0)

r0
=

s X =

while s2q

1. En
[x
r.q 15201scq3
=
+

Schon spezifiziert

\x201903
r0
=

SX
=

{x r.q s15-0}
=
+

TODO:

{x r.q
=

5 15
+
03
-

while :B
s S = -

q
r r 1 7B
s1s=0
+
=
-

(x rq
=
+

Sie
spacis
(while)

muss zeigen: Lens


zu [x r.q qts q1s q = 03
=
+ = -


E
-

-{x (r 1).q
=
+

5s =03
+ {x
r.q
=
s 152
+
93

↳ess20
W

{x r.q q 515203
=
+ +
UK1 21.06.2023

Vorkurs Java
. Wie Pythonist Java eine Imperative Programmiersprache
·

konzepte sehr ähnlich


Aber:im Detail gibt es viele Unterschiede

1. Unterschied:

Python ist Interpretiert


·
Java wird übersetzt

Das heit ein


Python Programm wird zur Laufzeitvon einem Interpretierer (python)
in Maschinensprache übersetzt und aus geführt.
Java Programme müssen zunächstin eine virtuelle Maschinen sprache übersetzt
werden (Kompiliert/=compiled)
Dies erfolgt durch einen Übersetzer (compiler), javac"
Das resultierende Maschinenprogramm (lass-dateil wird dann auf einer virtuellen -

Maschine ausgeführt java. ->

In den 90er konnte CPUsder Firma Sun


diesen Loch direkt ausführen.
(Suh gekauftvon oraclel

Einfachstes Java Programm:


->
Dateiname classenname!
=

-
public class JaunBeispiel d Classen mitGrobuchstabe
public static void main
(String [] args) {
system. OutprintInl"Hallo Oop");
3
3

Java Programmerstellen:Foo, java (Javac (Foo.class > Java

2. Unterschied:

Java ist Statisch typisiert, python ist dynamisch typisiert.


Das heit:Java hat für jede variable ein festenstatischen typ,der sich
nichtändern kann
Bevor man Variablen benutzen kann muss mann sie deklarieren.
public class JavaBeispiel
public static void main (String [] args) { Kommentare in Java:
system. OutprintInl"Hallo Oop");
inti; 1)einzeiliger kommentan
i1
=

#*Mehrzeiliger kommentar (start


...

3 Mehrzeitiger kommentar (ende)


*

3
VK1 21.06.2073
3. Unterschied:Syntax

Sowohl Java als auch Python Programme bestehen aus einer Folge von
Anweisungen.
Aber:Python istlayout sensitiv, javanicht. (bedenktbei Python spielen herzlichen
eine Rolle, beiJava nicht.)

publicbice,tatsaBeisting angst d
system. OutprintInl"Hallo Oop");
int is Blöcke markiertdurch
j:Il Bla
(** geschweifte klammern
i
5jj 6;
= =

3
3

IFin Java
public class JavaBeispiel
public static void main
(String [] args) {
system. OutprintInl"Hallo Oop");
int is Il Bla
j:
(**
i 5jj 6;
= =

if (i < 5:

system. out print In)";istgröper als5";


system, putprint In ("Hinter if";
3 ↑nur eine
3
Anweisung,
daher keine E}

bei 2 Anweisungen
publicbice,tatsaBesking angst d X

system. OutprintInl"Hallo Oop");


int is
j:Il Bla
(**
i 5jj 6;
= =

if (i< 5.{
system. out print In)";istgröper als5";
system, putprint In ("Hinter if";
↳ else
Faureine
3 System. out.print In("; ist 5."; Anweisung,
3 daher keine E}

IDEnimmtCompilierung etc. ab.


UK2 27.6.2023
Java-kontrollstrukturen
if
for
dul while

While-Schleife:
public class JavaBeispiel
public static void main (String [] args) {
system, out.IprintInl"Hallo Oop");
int is Il Bla
j:
(**
5jj 6;
i = =

while (i<10)
system. out. print ln(++i;
3
3

For-Schleife:
public class JavaBeispiel
public static void main (String [] args) {
system. OutprintInl"Hallo Oop");
int is
j:Il Bla um erhöht (zählen
i 10;j 6
=
=
-
L

for (i 0;i<10jk +){


=

wer me
bevor die bedingung
For schleife
starfet

system. Out.printIn (k);


3 un
sollte existiert k nicht
3 wine for
3

Unterprogramme
·

Ein/Ausgabe
↳Wesentlich unhandlicher all in Python
Datentypen in Java:

Es gibtprimitive Datentypen und Objekte und Felder (Arrans)


Primitive Datentypen:Zahlen, Zeichen, Wahrheitswerte, int, float, char, book, Lung,
doubte

3
int, long =ganzzahlen lint=32bit, longs gröer)
=

float, double-gleitkommazahl zweier komplement


zahlen
Eichen
char: bei+1 addieren irgendwann
boolean=wahrheitswerte negative zahlen.
↳ boolean:i=False;
<float i=(float) 5,5
String x "Hallo"; strings sind unveränderbar
=
UK2 27.6.2023
Zusammengesetzte Datentypen:
Nur ein
typ -> Felder (Arrays)
↳ Ähnlich zu Listen in Python, aber es gibtunterschiede

1.) Alle Elemente haben gleichen Typ

2.) von
Anfang an gröe des Felder festlegen Igrie=Anzahl d. Elementel
(kein insert(delete)oppent)
zB. int[] feld new
=

int 110];
oder int23 feld new
=

int4.3 20,1,2,5,13;
28.6.2023
Objektorientierte Programmierung:
Problem:Wie entwickeltman Software im groen Stil?

Ziel: Beherrschbarkeit
·
übersichtlichkeit
wartbarkeit
Erweiterbarkeit / Wieder verwendbarkeit
·

Fehlervermeidung (einfache Fehlersuche


·

Erste Schritt: Strukturierte & prozedurale Programmierung 170er(A(GOL


↳ erlauben nur einfach geschachtelte Kontrollstrukturen (Schleifen, blöcke,
·
Unterteile Programm in Unterprogramme (Subroutinen Funktion ...
verzweigungen,
zur besseren übersichtlichkeitund wieder verwendbarkeit kein 60 TOS

Zweiter Schritt: ·Modulare


->
Programmierung
Gheimnis prinzip (information hiding)
unterteile Programm in unabhängige, austauschbare Module die bestimmte
Aspekte der Funktionalitätabdecken.
Ein Modul definiert eine Schnittstelle, mitder die Funktionalität
nach auen getragen wird
Die Schnittstelle ist
klar
spezifiziertund legtfest, unter welchen
Bedingungen welche Aussage zu erwarten sind.
. Die Implementierung
der Funktion bleibtnach auen verborgen und
kann prinzipiell ausgetauschtwerden, solange die Spezifikation
weiter gilt.
·
In fastallen Pr ·grammiersprachen unterstützt (enthalten
zB. Java:Packages), Python

Dritter Schritt: Objektorientierte Programmierung

Beobachtung:Module bestehen oft am einer Sammlung von Prozeduren (Funktionen,


die auf bestimmten Daten operieren.
Oft sind bestimmte Prozeduren bestimmten
mit Daten assoziert, z.B.

Modul Studi Idee: Fasse Daten & zugehörige Funktion als Einheitauf
floatberechne Schnitt (Studi.S.) Statteinem Modul Studi, das aus einer Sammlung
·

von

void buche UL (Studi.S., VII Funktionen bestehtund eine Masse von


void beurlaube (Studi.S., Zeit) Studi-Datensätzen, die übergeben werden, gibtes eine
.
Sammlung von Studi-Objeliten.

Siee Siee Siee


MatNr. - MatNr.
-
MatNr. -

Robjekt
stud: 1 stud: 2 stud: 3
28.06.23
Ein Objekt ist eine
Sammlung von Daten (Attribute, Eigenschaftl
und methode (Funktionen, die aufDaten des Objekts operieren)

Ein Objekt hateinen Zustand und eine Identität.


Zustand werte aller Attribute.

Identität:selbst, wenn alle Attribute übereinstimmen müssen objekte nicht gleich sein.
Objekte helfen, Programme besser zu Strukturieren undEntitäten"der realen Welt
im Programm zu modellieren
Sie sollen Loch übersichtlicher & verständlicher machen.

Woher kommen objekte? (In Javal

Objekte sind exemplare (Inkanationen von Klassen


-

Eine klasse isteine vorlage für ein objektund deklariert die zugehörigen Attribute
und Methoden.
04.07.2023
stat: c:
·
vor Methoden:kann ausgeführtwerden ohne dass ein Objekt dieser Klasse erzeugt
werden muss.

Variable:Klassenvariable, alle Objekte dieser Klasse teilen sich diese Variable


Prof1-> Schule
Profzt Schule wird Schule beieinem Prof geändert, ändert sie sich automatisch
auch bei Prof Z, Prof],
..., Profe

Unterordner in Java:

source

/Tjara
Main. java
E
importPackagename.Klassenname;

Package Packagezame;

Zugriffsmodifizer:
-

definieren Schnittstelle vonKlassen nachauen


zur umsetzung der Information hiding prinaples
-

Schlüsselwörter (vor Methoden, Variablen, Klassen


public:Jeder kann draufzugreifen
private:Nur innerhalb der selben Klasse zugreifen
protected:Nur innerhalb des selben Packages zugreifen
wenn man nichts angibt, istes automatisch protected

konstruktor:

·
Methode die beim erstellen eines Objektes ausgeführtwird
kein Rückgabewert
·

Syntax:public classenname(){
3

Lokale vs. Globale Variablen



innerhalb v. Methoden > Für
ganze Klasse
3 können selben namen tragen

Schleifen, blöcke, resw. this. namevariable markierltGlobale Variablen

finalvariable:für Variablen die nie geändertwerden dürfen

Getter & Setter Methode


Enum:public enum Haus (GRYFFINDOR, SNAPE, BLACK)
Typen die das Haus haben darf

Prof.) Notizen der Verlesung > WB- RessourcentMitschrift ->Pro... -

5.7.2825
Call-by-reference VS. Call-by-Value (Javal
Methode bekommt Methode bekommtLokale test (intx)
eine Referenz
auf Kopie des Wertesd. Variable (Studix)
den Speicher zum
Parameter original
E !ACHTUNG!
xyz Kopie

x Y Keks (x,Y)
-* z
-2
Manchmalvermischt sich beides
wenn zB. Name geändertwird,
Funktion (x) ändert es sich überall.

Akt änderten andere * ↳ eine Kopiert reference wird an


die Methode gegeben, deshalb
call by
value.

Vererbung:
Beziehung zwischen klassen
·

·
Unter Klassen, erbenleiten ab von der Oberklasse
Die Unterklasse hat die Attribute von Methoden der Oberklasse und ggf. mehr
↳ class unterblasse extends oberklasse
So schreiben
klasse -
Mensch
vor. String name schat Prof.:name, gebjahr, fach
erber int gebjahr Studiename, gebjahr, noten
erbt
von
Studi Prof
int[] noten
string fach

mitsuper markiertman oberklasse


zB super (name,gebjahr)
.:

Statische Datentypen: Dynamischer Typ

Das was explizitim Code steht Der Typ den das Konkrete Objekt tatsächlich hat

Casten
Objekt-typen umwandeln, wenn sie Typkompatibel sind.

Test ob ein Objekt vom Typ einer bestimmten Klasse istobi. instance classe

Oberklassen können weitere Oberklassen haben etc.


zb. Infor

Schreibtman 8 Overside über eine Methode wird überprüft ob es mit Oberklasse problemgibt.
5.7.23

Mehrfachvererbung:
klasse -
Mensch
vor. String name
erber int gebjahr
erbt
von
Studi Prof
int[] noten
string fach
I
Herbt von von -
erbt
möglich
Nic↳t
Mg Fach
in Java

Interfache:
·DefiniertSchnittstelle
Enthalten keine Attribute Class Tutor extends Studi implements Lehrender
·Enthalten keine Implementierungen v. Methoden
·
Enthalten Signaturen, von Methoden die Unterklassen implementieren müssen
public interface None

Abstrakte klassen:public abstractclass name [...

Alles erbtvon Klasse Objekt

mitCompare kann man einen vergleich von Objekten implementieren.

zulassung fu-berlin. de

Formel
uh! bei 0-Notation anschauer für
11.07.23
Abstrate Datentypen in Java:(ADT)

Abstrakte Datent;pen stellen eine


gewisse Funktionalitätzur Verfüg ung.
Es wird getrenntzwischen den unterstützten Operationen und der Implementierung.
Es gibt verschiedene abstrakte Datentypen, die sich je nach Funktionalität unterscheiden.

4 Beispiele:

Stapel/Keller
·

·
Schlange
·

Z-köpfigs-Schlange
·
Wörterbuch

Der ADT:Stapel (Stack) Last


in -> Last out
-

1
Aufgabe:Implementien einen LIFO-Speicher
Das heit:vir möchten folgende Operationen unterstützen

·Pushk):(Fügexin (IFO-Speicher ein


liefere das jüngste Elementaus dem HF0-Speicher zurück)
·

POP
-zuletztEingefügt
·is
Empty: (Ist LIFO-Speicher leer oder nicht?
is Empty is EmptyM
B.:
z
echi 13x 10
C Liefert11 12 72
, (12) 11 13
push(3)
Po >Liefert17 70 11
POP
>
Liefert72
> liefert10
pop
is
Empty >Leerer Stapel
In Java setzen wir die Spezifikation eines als
ADT Interface um.

Java:public interface Mystack <As E


public pushvoid (A
item);
pop();
public A
public boolean is Empty ();
public final int SIZE;
Wie können public class Arraystack Implementation (As implements Mystack > As E
3
wir einen
a public Array Stack (int sizel {

Stapel implementieren? S/ZE=Size;


items (A[]) new oject [size];
top
=

1;
=-

public void push (Aitem) [throws Exception [

Arrays sind zusammenhängende 3 else s throw


if (top < SIZE-1) {

imEmper
blücke
new

public Apop() Sithrows Exception[


if (! Empty()) {
Theoretisch Stück Speicher
is
Maker für
nicht weiter benötigung
am im Aresult:i tems [top];
items (top--]=
null;
Löscht das Item mitgabage Collector -

top top-1 beigröen Daten wichtig, sonst crash durch kein


=

ram

abgelegt
return result;

3 else {
throw new Exception ("Stack is Empty"

zB.: ...
Size -2 public boolan
return top
is
==
Empty () {
-

3
8.................. public staticvoid main (String [] args)[
size-L mystack (Integer testStack new
=
Arraystack c
Integers (10);
for linti 0;ic 9;=
=

itt) {
teststack.push(i)
3
while siteststack. isEmpty () {
system. Out.printIn (test
Stack.pop());
1. mit einem Array, wir speichern die Elemente 3
3
0 - SIZE-1
in einem Array. 3
Stapel wächst ?Links nach rechts
wir haben ein Index top, der das letzte Element
anzeigt.
12.7.2023

Problem Stack:Wir müssen


mitArray uns auf die Gröe festlegen

Lösung:Dynamisches Arrayheitwenn Arraystack voll, dann wird es nicht um eine
erweitert, sondern es wird ein neues ArraymitDoppelter Gröte und
erstellt
alle Items werden rein kopiert. Das alte wird vom Gabage-Collector vernichtet.
Wir ein kleineres Array benötigtwird es beider pop funktion halbiertmit size: 4
Socke im WB!
Problem:einzelm Push/Pop operationen können sehr lange dauern, da das Array komplett
Kopiert wird.
Selten, aber möglich

3.
Möglichkein: Einfach Verketteteliste (Date:Linkedlist Stack)

Für jedes Element im Stack erzeugen wir ein Objekt, das dieses Elementspeichert,
wir verwenden verweise, zwischen den Objekten um die Reihenfolge der Element
abzubilden.

head > > > > > --


existiert Nal Gerliste
niee
I

nes
so lange wit
methode (s) (4) (5) (6) ...

main

to.-Gabage-Collector
head
Mimant, äche))) -

Fasst zu direkt verbindung zusammen

2. ADT:Queue (Warteschlange) Datei: Linked List Queue


~First in Firstout,
->
wie warteschlange
Wie Stapel, aber implementiertFIFO speicher
Operationen:

enqueue (X)
·

Füge hinten an die Warteschlange an

dequeue(x) Entferne ältestes Elementaus der Schlange


is
.

Empty
head > - -
I
tail
18.7.23
Abstrakter

FiFO-Speicher
Datentyp:Warteschlange:
am
implementiertmithilte verkettete
listen

Implementierung als Array Ring Puffer


CRing Butter)
1111111
c Front:Vordertes/ältestes Element
das Vorderste der Warkschlange
Front
Back Back:erste freier Platz hinter der
Warteschlange

-(1) w
e(2) w
9,1,2,3,4
↑C
12,44-40123401234
-

44
11213141112131415
↑I R IR

Ei Front 234
0 +

Back 0171 14/5

,
5 ↑Z / ↑↑
E S
Liste wird als her
erkannt.
4 3

a
e
Java:Modulo wird als to implementiert.
Abstraler Datentyp:Wörterbuch (Dictonary):
In Python teil der Sprach definition, in anderen Sprachen nichtenthalten.
In Java selbstimplementieren.
·

Speichert Schlüssel-Wert-Paare Beispiel Telefonbuch Nam-Nummer


Folgende Operationen
put(key, value)
noch nicht im Wörterbuch,dann Lege Eintrag (key, value)
wenn
key an.
wenn key schon vorhanden, ändere Wertzu value.
get (Key):LiefertWertzu key
isEmpty 11:her?
pred (key):Liefere gröten Schlussel Key
succ(key):Liefere kleinsten Schlüssel: Key
19.7.23
Problem beiVerletteten listen:
·

Sonderfälle
↳Einfügen/lüschen am
Anfang/Ende der liste

Ansatz damit umzugehen:


·
Wächter-Technik (Sentinel-Technik)
In der Verketteten liste gibt es immer 2
Dummyknoten: -
-,
- B *
Gende -- --

de
> --> I I
I C I S I 3


Alles wird
zwischen
-
,
eingefügt.

Die Tatsächlichen Knoten befinden sich immer in der Mitte, alle Sonderfälle
fallen beidieser Technik weg.
Binärer Suchbaum:(Referantfürs nächste Semester NICHT Klansurrelevant.
Binäre Bäume
·
verzweigte Datenstruktur, die rekursic definiert ist
entweder Gerer Baum
↳oder ein Knoten,genanntWurzel) +1 linker Kindbaum +1 rechter Kindbaum

BSP.: Leerer Baum


=

0
In den Kurten können Informationen gespeichert werden
Binärer Suchbaum ist ein Binärer Baum, knoten speichern (Schlüssel/Wert) Einträge
Folgende Regel muss beiallen Knoten gelten:
·
alle Schlüssel im Linken Kind Baum Schlüssel in der Wurzel alle
Schlüssel in rechten teilbaum.

- Objekte
5o
-- Null-pointer /null-Zeigen

*
I ,

~Kein Binärer Suchbaum!


*

* Ein Binärer Suchbaum.

Das könnte Ihnen auch gefallen