Einführung WS13-14

Aus ProgrammingWiki
< AuK
Archivierte Version vom 2013-10-12T23:51:57+00:00. Aktuelle Version

Inhaltsverzeichnis

1. Praktische unlösbare Probleme

Das ist ein Problem, für welche existiert keine Algorithmus, der nachdem endliche Schritte antworten kann, "ja" oder "nein" für dem beliebig Einzustand.

1. Praktische unlösbare Probleme

Das ist ein Problem, für welche existiert keine Algorithmus, der nachdem endliche Schritte antworten kann, "ja" oder "nein" für dem beliebig Einzustand.

2. Absolut unlösbare Probleme

Am bekannste Beispiel ist Halteproblem. Halteproblem ist wie eine Frage für Algorithmus, ob ein Program halten kann (in endliche Zeit). Die Frage kann nur die Anfangzustande betreffen oder auch alle mögliche Zustande. Es gibt keine universelle Algorithmus, die das Halteproblem für alle Algorithmen, aber wir können nur einbilden, wie soll diese Algorithmus aussehen.

prozedur stop(programm, daten): 
 wenn programm(daten) halten sich, das
     züruck ja,
 gegebenenfalls
     züruck nein.


(mehr hier Link-Text )


Beispiel - Schachmatch und Tic Tac Toe

Probleme mit der Auflösung können wir in verschiedene Spiele merken. Sehr gute Beispiel auf praktisch unlösbare Probleme sind Denkspiele und die künstliche Intelligenz. Dank die Baumdiagramme können wir schauen, wie Programm planen selbste nächste Schritte in Spiel. Tic Tac Toe ist nicht so ausgebaut wie z.B. Schachmatch und dank dass, wir die Baumdiagramme aus ganz Spiele vorbereiten können. Hier haben wir klein Beispiel, ein Teil aus Spiel: S3makrza_Kolko.jpg Das Programm sieht mögliche Auflösungen und wählt am beste in diese Situation aus. Schade, aber Situation mit Schachmatch oder Damespiel ist schon nicht so leicht. Damit alle mögliche in Schachmatch vorhersehen, brauchen wir sehr stark Computer und das ist nicht so praktisch Methode durch das. Deshalb können wir sagen dass, in Praktisch diese Problem ist unlösebare aber in Theorie ist das möglich. Programmen werden so geschrieben, um nur einige nächste Schritte in Zukunft vorherzusehen.


Beispiel - Ackermann-Peter-Funktion

AP Funktion nutzen oft Programmierer in Testen der Qualität den Kompilatore. Auch ist gut Beispiel auf der Berechenbarkeitstheorie. Hier steht das mathematische Muster diese Funktion: S3makrza_Ackermann.png Natürlich können wir auch diese Funktion in Scheme-Prozedur schreiben:

Die Ergebnis in AP Funktionen steigt sehr rapid. Für die Zahlen m=4 und n=2 beträg schon 2^{65536} - 3.

3. Empirische Analyse

Die Methode für verschiedene Eingabewerte, welche nutzen wir bis Experimenten mit Algorithmen, heißt Zeitmessung. Aufgrund der Testen können wir nicht nur Effizienz aber auch, ob Programm wirklich richtig funktioniert. Leider, wir können nicht sagen dass, auf Comuter X, Program Y brauch W Sekunden für Einzustände ABC. Deshalb ist wichtig die Beobachtung den Rechnenschritte, d.h Grundoperationen. Der funktionalen Zusammenhang beschtecht zwischen Problemgröße n und der zugehörigen Aufwand T(n).

T(n) = f(n)

z.B.: T(n) = r * n^{2} + k mit r,k = konst, r > 0,


Wichtig ist, dass die Werte aus welche Problemgröße nutzen, sind näturliche Zahlen größer als null.

4. Bit-Komplexität

Fast alle Laptops arbeiten jetzt auf Prozessoren mit 32Bit oder 64Bit. Für "normale" Nutzer ist das groß genung aber für uns (Informatiker) reicht es nicht. Die Problem ist, wenn die Einschränkung die Zeitaufwand durch Konstante ist. Sondern die Addition und Multiplikation wirken als Grundoperation, wir sprechen in diese Fall über uniformen Kompläxitätsmaß.


Uniformen Komplexität nutzt von Registermaschine.

Abrundungsfunktion und Aufrundungsfunktion (Floor and ceiling functions)

Floor und ceiling sind Funktionen in Mathematik, die Zahlen von die reellen Zahlen bis die natürliche Zahlen runden. Floor macht das bis unter die Grenze, und ceiling bis oben die Grenze.


Floor ist die größte ganze Zahl aber nicht größer als x: $ \left\lfloor x \right\rfloor = max \{k \in \mathbb{Z}:\le x \} $

Ceiling ist die kleinste ganze Zahl aber nicht kleiner als x: $ \left\lceil x \right\rceil = min \{k \in \mathbb{Z}:\ge x \} $


Warum brauchem wir das?

Dank floor, können wir die Länge |z_{b}| zur Darstellung einer Zahl z erfordelichen Wortez z_{b} durch \left\lfloor log_{b} z \right\rfloor + 1 zeigen. Wir verwenden das mithilfe Ausdruck $ |z_{b_{1}}| = \frac{\log b_{2}}{\log b_{1}} * |z_{b_{2}}| $, damit Binärdarstellung d.h. Bit-Komplexität erhalten.


Beispiel - Multiplikation à la Russe

Das ist eine Methode der Multiplikation. Zur Berechnung nutzen wir zwei Zahlen a und b, damit Spalten bilden. In nächste Schritte teilen wir a durch 2 und mehren b mit 2.

Achtung! Wenn wir ungerade Zahl teilen, müssen die neue Zahl unten runden (Floor) .

Schluss ist, wann die Zahl in a-Spalte bis 1 hinzukommen. In nächste Schritt müssen wir prüfen, ob Zahlen in diese Spalte ungerade oder gerade sind, wenn gerade - streichen wir diese Zeile. Die reste Zeilen, die bleiben, addieren wir die Zahlen von b-Spalte und die Summe ist auch Summe der Multiplikation.

52  *  32 = 1664
26     64 - streichen
13    128
 6    256 - streichen
 3    512
 1   1024
128 + 512 + 1024 = 1664


Scheme-Prozedur product à la Russe


Die Basisoperationen lsh und rsh sind gute Beispiel auf linear Aufwand in Bezug auf die Länge der Liste.


Prozedur my-odd benutzt auch von linear Aufwand. Prozedur zurück #t, wenn die letzte Zahl (d.h am weitesten rechts stehen)dem Listenelement 1 ist. Umgekehrt ist mit #f, wenn diese Zahl null ist.


Jetzt probieren wir eine Prozedur schreiben, aber davor verändern wir die Prozedur product, damit helper sammelt alle zu addierenden Zahlen (Bitlisten). binadd sorgt für deren Addition, wobei allbinadd die weiter unten definierte Prozedur adder verwendet. adder imitiert die Arbeit eines Volladders (Bit 1, Bit 2 und Übertrag). Die globale Variable calls wird für die Zählung der als elementar anzusehenden Adder-Operationen benötigt.

Das ist neue-alte product, jetzt product-binary:

Und unsere Prozedur bis Addierung - adder:

Hinweise, die Zeilen bedeuten:
(and (= a 0)(= b 0)(= c 1))  ->  0 + 0 + 1 = (1 . 0)
(and (= a 0)(= b 1)(= c 0))  ->  0 + 1 + 0 = (1 . 0)
(and (= a 1)(= b 0)(= c 0))) ->  1 + 0 + 0 = (1 . 0)
(and (= a 1)(= b 1)(= c 0))  ->  1 + 1 + 0 = (0 . 1)
(and (= a 1)(= b 0)(= c 1))  ->  1 + 0 + 1 = (0 . 1)
(and (= a 0)(= b 1)(= c 1))) ->  0 + 1 + 1 = (0 . 1)


Jetzt können wir von product-binary nutzen und prüfen ob richtig funktioniert.

Erklärung:
101 -> 5
100110 -> 38
5 * 38 -> 190
0 1 0 1 1 1 1 1 0 -> 190

5. Probleminstanzen und Analyseformen

Die Probleminstanz bilden Eingaben, Ausgaben und die Bedingungen, welche die Ergebnis müss sein. Anders gesagt: Das ist ein Funktion, die der Eingabedatenbestand auf Ausgabedatenbestand umgestalten. Jede Problem können wir auf viele Möglichkeiten auflösen, d.h. es gibt viele Instanzen, damit diese Problem auflösen.

Wichtig ist, damit was Eingaben ist und was ist Instanzen.

Beispiel
"Man hat 2 Zahlen x und y und es herausfinden ihre Summe" ist Probleminstanzen.
"Berechnen 3+6" ist Instanzen.

Es gibt 3 Analyseformen:

Worst-case-Analyse - die im schlechstesten Fall, d.h. für die ungünstige oder aufwändigste Instanz, erfordliche Laufzeit. Dies entspricht auch dem Maximum aller möglichten Laufzeiten.

Average-case-Analyse - die im mittleren Fall (Durchschnitt, arithmetisches Mittel, Erwartungswert) erfordliche Laufzeit.

Best-case-Analyse - die im günstigsten Fall, d.h. für die aufwandsgünstigste Instanz, erforderliche Laufzeit.

S3makrza_Worst_case_etc.jpg

6. Vergleich von Aufwänden

Die Vergleichungen sind meistens zwischen mindestens 2 Arten Funktionen.

Wichtig ist auch nichtlinearer Gleichungen, die eine Lösung iterativ mit Genauigkeit berechnen.

Beispiel - Türme von Hanoi

Was ist das? Türme von Hanoi ist ein Spiel für Kinder mit folgende Regeln:

  • von erste Pfoste auf dritte Pfoste übertragen
  • großer Ring kann nicht auf kleiner liegen
  • mit eine Bewegung können wir nur Ring aus oben übertragen

S3makrza_Tower_of_Hanoi.jpeg

Es gibt ein Algorithmus, die die minimale Anzahl der Schritte rechnen.

H_{n} = H_{n-1} + 1 + H_{n} - 1 = 2 * H_{n} + 1 - 1 = 2^{n} - 1


Frage:
-wenn ein Man für ein Bewegung 1s braucht (Rings/s),
-er kann am schnellsten Methode (keine Fehler).
Wie viel braucht er Zeit, um die Türme mit 64 Rings zu übertragen?


??