Der Einfachheit halber werde ich zunächst nur auf "Entscheidungs" -Probleme eingehen, bei denen eine Ja / Nein-Antwort vorliegt. Funktionsprobleme funktionieren in etwa auf die gleiche Weise, außer dass jedem Eingangswort anstelle von Ja / Nein ein bestimmtes Ausgangswort zugeordnet ist.
Sprache : Eine Sprache ist einfach eine Reihe von Zeichenfolgen. Wenn Sie ein Alphabet haben, wie
, dann Σ * ist die Menge aller Wörter nur die Symbole in enthalten Σ . Zum Beispiel ist { 0 , 1 } ∗ die Menge aller Binärsequenzen beliebiger Länge. Ein Alphabet muss jedoch nicht binär sein. Es kann unär, ternär usw. sein.ΣΣ∗Σ{0,1}∗
Eine Sprache über einem Alphabet ist eine beliebige Teilmenge von Σ * .ΣΣ∗
Problem : Ein Problem ist eine Frage zu einer Eingabe, die wir gerne beantwortet hätten. Insbesondere ist ein Entscheidungsproblem eine Frage, die sich stellt: "Erfüllt unsere gegebene Eingabe die Eigenschaft ?X
X
L={w∣wyXyX}
Das Bestimmen, ob die Antwort für eine Eingabe zu einem Entscheidungsproblem "Ja" ist, entspricht dem Bestimmen, ob eine Codierung dieser Eingabe über ein Alphabet in der entsprechenden Sprache vorliegt.
Algorithmus : Ein Algorithmus ist eine schrittweise Methode zur Lösung eines Problems. Beachten Sie, dass ein Algorithmus auf viele Arten und in vielen Sprachen ausgedrückt werden kann und dass es viele verschiedene Algorithmen gibt, die ein bestimmtes Problem lösen.
M
L(M)={w∣Mw}
RRE
Die Beziehung zwischen Sprachen und Turing-Maschinen ist wie folgt
Jede Turingmaschine akzeptiert genau eine Sprache
Es kann mehr als eine Turing-Maschine geben, die eine bestimmte Sprache akzeptiert
Möglicherweise gibt es keine Turing-Maschine, die eine bestimmte Sprache akzeptiert.
Wir können ungefähr dasselbe über Algorithmen und Probleme sagen: Jeder Algorithmus löst ein einzelnes Problem, aber es kann 0 oder viele Algorithmen geben, die ein bestimmtes Problem lösen.
Zeitkomplexität : Eine der häufigsten Ursachen für Verwechslungen zwischen Algorithmen und Problemen sind Komplexitätsklassen. Die korrekte Zuordnung lässt sich wie folgt zusammenfassen:
- Ein Algorithmus hat eine zeitliche Komplexität
- Ein Problem gehört zu einer Komplexitätsklasse
f(n)f(n)n
Probleme haben keine Laufzeit, da ein Problem nicht an einen bestimmten Algorithmus gebunden ist, der tatsächlich ausgeführt wird. Stattdessen sagen wir, dass ein Problem zu einer Komplexitätsklasse gehört, wenn es einen Algorithmus gibt, der dieses Problem mit einer bestimmten zeitlichen Komplexität löst.
P,NP,PSPACE,EXPTIMEPXXPXXP