7 - Kombinatorische Optimierung [ID:3325]
50 von 484 angezeigt

Dieser Audiobeitrag wird von der Universität Erlangen-Nürnberg präsentiert.

Ich wurde gebeten, nochmal ein bisschen was zu Algorithmen zu sagen, weil einige, die keinen Informatik-Hintergrund haben,

so den grundsätzlichen Aufbau von Algorithmen bzw. die Notation, die wir gerne verwenden, da noch nicht ganz verstanden haben,

sowas wie while, if und ähnliche Statements. Dazu vielleicht nochmal ein paar Worte als Hintergrund.

Also wir hatten, also in der Sprache, wie ich an der Tafel Algorithmen hinschreibe, ist sozusagen, man spricht da vom Pseudocode.

Das ist kein direkter Code, wie man tatsächlich so eins zu eins in den Computer eintippen kann.

Und das hängt ganz klar von der Sprache ab, die man wählt. Ob Sie jetzt in Python, ob in Java, ob in C oder C++ oder welche Sprache Ihre Lieblingssprache ist,

jede Sprache hat ihre eigenen Befehlswelt, mit der man gewisse Dinge ausdrückt. Aber im Wesentlichen sind es alles sozusagen die gleichen Elemente, die notwendig sind.

Wir haben nämlich, wir beschränken uns ja hier auf sogenannte imperative Sprachen, das heißt solche, wo für Schritt für Schritt jede einzelne Zuweisung,

eine Zuweisung oder ein Vergleich sowas dargestellt wird. Und das sind die einzigen zwei Sachen, die wir brauchen.

Wir brauchen eine Zuweisung, wir müssen sagen, ein Wert a ist gleich einem Wert b plus 5 oder mal 17 oder was auch immer.

Das drückt man halt über eine ist gleich in der Regel aus, aber in der einen Sprache ist es mit Doppelpunkt ist gleich, in der anderen ist es mit ist gleich,

in der anderen ist es mit Pfeil. Das ist eigentlich hängt von der Sprache ab. Wir schreiben dann halt pseudomäßig, wenn ich sage,

ja, schreiben wir einfach i ist gleich i plus eins. Ja, also das bitte, das ist ein Unterschied zwischen der Mathematik und das, wie man es implementiert.

Natürlich in der Mathematik ist i gleich i plus eins schwachsinn, ja, aber in der Informatik heißt einfach, ich habe eine Variable i,

die zähle ich um eins hoch. Man muss ja immer so sehen, dass hinter dieser Variable i, da ist irgendwo im Computer ein Speicherplatz,

wo der Wert von dieser Variable steht. Und ich schreibe jetzt einfach an diese Stelle, wo diese Variable steht, dort, was dort steht,

erhöhe ich um eins und schreibe das wieder in diesen Speicherplatz. Das heißt, i ist gleich i plus eins. Ja, so und dann gibt es eben solche Sachen,

wie bedingte Sachen, dass ich sage, was weiß ich, wenn i kleiner ist als irgendein j, ja, dann, ja, mach irgendwas. Und dieses if, wenn, ja,

das ist in jeder Sprache ein bisschen anders. In vielen Sprachen heißt es if, then else, in manchen heißt es nur if else, als if und was weiß ich,

das hängt von der Sprache ab. Ja, aber eigentlich, ob ich jetzt hier if oder wenn oder dann schreibe, ja, das ist jetzt rein pseudokodmäßig egal,

sie müssen dann ihre Sprache aussuchen, mit der dieser Vergleich umgesetzt ist. Ja, und hier heißt es jetzt einfach, wenn das i kleiner dem j ist,

also wenn der Speicher, das was im Speicher von i steht kleiner ist als das was im Speicher von j steht, dann mach zum Beispiel, was weiß ich,

erhöhe i um i plus eins, ja. Ja? Also, wenn i kleiner j bedeutet, eigentlich wenn a von j kleiner a von j ist, oder tatsächlich wenn i kleiner,

also die Frage, wie im zählen oder wie zählen die Werte? Na ja, in dem Fall ist jetzt der Index, ich könnte natürlich die gleiche Frage

aufstellen mit, also, das ist immer was ich da reinschreibe, das steht einfach an Vergleich, if a von i kleiner a von j, ja, das ist eine andere Abfrage.

Ja, aber ich sehe gerade am

Platz, wo ich dann nur aufs

... Also, ne, das ist eine andere Abfrage, da gucke ich, da habe ich zwei Felder, wo ich an eine i-Destellung schaue, an die j, denn ich vergleiche die Inhalte und nicht die Indizes.

Ja, deswegen, es hängt, also, es geht einfach um einen Vergleich und Vergleiche kann ich, ich muss natürlich immer in derselben Menge vergleichen,

also sprich Indizes miteinander vergleichen oder Werte miteinander vergleichen, ich kann natürlich, also, was typischerweise zum Programmierfehler führt, wenn ich so was mache, ja,

also, ich im Index mit dem Eintrag vergleiche, ja, weil man sich vertippt hat oder irgendwie so was, ja, so, und dann mache ich zum Beispiel irgendwas und im anderen Fall, also, wenn das nicht erfüllt ist, ja,

dann setze ich von mir aus j um 1 runter, ja, so was, ja, und dann mache ich weiter, ja, also, nochmal, ein Algorithmus ist eine Anleitung zum Schrittweise Lösen eines Problems.

Ich muss jeden einzelnen Schritt angeben, wie der Algorithmus läuft, ja, und hier sage ich in jedem Schritt, hier, erhöhe mir bitte i um 1, dann frage, ob das i kleiner als das j ist, wenn das der Fall ist, erhöhe bitte das i um 1,

wenn das nicht der Fall ist, verringere das j um 1, ja, und dann, so, und dann läuft der Algorithmus jetzt hier weiter, so, jetzt kann es natürlich sein, dass ich gewisse Dinge öfters abfragen will,

ja, so, also, zum Beispiel, jetzt möchte ich gerne in dem Fall irgendwas machen, aber ich möchte hier irgendwas machen, bis das i gleich dem j ist, zum Beispiel, ja,

dann gibt es mehrere Möglichkeiten, je nach Sprache kann ich halt dann sagen, das ist der Klassiker von früher, das sollte man eigentlich nicht programmieren,

in Vorderhand geht es zum Beispiel noch, ja, jede Zeile hier, jede Anweisung hat hier eine Zeile, was weiß ich, das ist die Zeile 1, 2, 3, 4, 5, ja,

dann mache ich hier irgendwas in der 6., in der 7. frage ich, ja, if i kleiner j, dann go to 2 wieder, ja, dann geh bitte wieder nach oben, ja, solange das kleiner ist,

geh nochmal nach oben und wiederhole das Ganze, ja, und das wird halt, also dieses go to ist unheimlich, also schwer wartbar, also Vorderhandcodes erlauben das noch,

man sollte sowas aber in der selbst Sprache nicht erlauben, sollte man das nicht verwenden, weil es total unstrukturiertes Programmieren ermöglicht,

weil ich ständig in dem Code irgendwo hin und her springen kann, ja, deswegen was typischerweise an solchen Stellen gemacht wird, wenn ich sowas einhalten möchte,

dann macht man anstatt sowas hier ein while, ja, dann heißt es einfach solange, ja, also die Alternative oder bessere Variante wäre while i kleiner j,

ja, dann sage ich if i tatsächlich kleiner j, dann setzen wir i gleich i plus 1, else j auf j minus 1, und dann machen wir hier irgendwas mit dem i und dem j, ja,

und dann wenn die while Schleife zu Ende ist, ja, and while würde dann hier normal stehen, das lasse ich meistens weg in meinem Pseudocode,

Entschuldigung, können wir ein bisschen, ich, oder sie gehen in die hintere Reihe, solange sie in der zweiten so reden, ist schwer gegen den while sozusagen anzukämpfen,

ja, also wenn ich, ich klammer das meistens in meiner Pseudosprache nur so, dass ich sage, hier ist das Ende der while Schleife, formal müsste man vielleicht hier hinten dran schreiben, and while,

und dann geht er automatisch wieder hoch und fragt nochmal diese Abfrage, und erst wenn die Abfrage falsch ist, dann springt er aus dieser Schleife raus,

also auf die Art und Weise schafft man sozusagen, man nennt es halt ein Loop oder eine Schleife zu programmieren, wo am Ende er automatisch und solange in diese Operationen durchführt,

bis dieses Kriterium nicht mehr erfüllt ist, das macht er genau solange, solange dieses Kriterium erfüllt ist, ja, und damit haben wir genau dieses schrittweise Lösen,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:22:25 Min

Aufnahmedatum

2013-11-06

Hochgeladen am

2013-11-07 12:51:06

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen