Ich beginne gerade mit der Berechnungstheorie, die untersucht, was wie schnell berechnet werden kann, wie viel Speicher verwendet wird und mit welchem Rechenmodell.
Ich habe eine ziemlich grundlegende Frage, hoffe aber wirklich, dass einige von euch mir helfen können, das Konzept dahinter zu verstehen:
Warum dreht sich alles um den Begriff und die Definition von SPRACHEN (dh reguläre Sprachen und kontextfreie Sprachen)? Und wie hängen diese zusammen und beschreiben die Komplexität eines Algorithmus und die möglichen Rechenmodelle zu ihrer Lösung?
Ich habe diese verwandten Fragen gelesen:
- /cstheory/14811/what-is-the-enlightenment-im-supposed-to-attain-after-studying-finite-automata
- /cstheory/8539/how-practical-is-automata-theory
Aber ich habe immer noch keine Antwort auf meine Zweifel, da sie eine praktische Begründung dafür liefern, warum sie wichtig sind (was ich verstehe), aber mir nicht helfen zu verstehen, warum die Komplexitätstheorie auf ihnen basiert.
Antworten:
Das liegt daran, dass Sprachen die beste (einzige?) Möglichkeit sind, das Konzept eines "Problems" zu formalisieren.
Ein Algorithmus (Turing Machine) hat eine Leistung, die wir durch Big-O-Komplexität ausdrücken. Ein Problem (Sprache) gehört zu einer Komplexitätsklasse. Diese werden normalerweise durch die Existenz definiert: Wenn eine Maschine existiert, die eine Sprache akzeptiert, die in einer bestimmten Leistung (Raum oder Zeit) ausgeführt wird, gehört die Sprache zur entsprechenden Komplexitätsklasse.L.
Dafür gibt es einige Gründe. Erstens sind Sprachen plattformunabhängig. Sie müssen sich keine Gedanken darüber machen, ob eine Ganzzahl 32 oder 64 Bit beträgt oder ob Gleitkommaoperationen parallel zu anderen Operationen ausgeführt werden. Diese Dinge beschleunigen die Leistung auf Mikroebene, aber die Komplexitätsanalyse interessiert sich für die Makroebene. Wie ändert sich die Leistung des Algorithmus, wenn Sie von 100 auf bis auf skalieren ? Geht es von 1 Million Bandzellen auf 1 Milliarde oder von 1 Million auf mehr Zellen als Atome im Universum?10 9 10 12106 109 1012
Das zweite ist, dass Sprachen nur eine schöne Abstraktion für Daten sind. Sie brauchen etwas, über das Sie Beweise machen können, etwas, das Sie formal modellieren können. Wenn Sie Ihre Eingabe und Ausgabe als Zeichenfolge codieren, handelt es sich jetzt nicht mehr um Bits im Speicher, sondern um mathematische Objekte mit bestimmten Eigenschaften. Sie können über sie argumentieren und Beweise über sie in einem formalen und sehr einfachen Sinne beweisen.
Die Komplexitätstheorie konzentriert sich in der Regel auf Entscheidungsprobleme, da diese schwierig werden. Wenn die Entscheidungsversion des reisenden Verkäufers NP-vollständig ist (dh es gibt eine Tour, die kürzer als die Länge ), ist es offensichtlich schwieriger, den kürzesten Weg zu finden. Es gibt nicht so viel Fokus auf Funktions- / Optimierungsprobleme, weil es immer noch viele offene Fragen und ungelöste Probleme bezüglich der einfacheren Entscheidungsprobleme gibt.k
Ich denke, hier ist meine Herausforderung für Sie: Finden Sie einen Weg, Probleme mathematisch zu beschreiben, die keine Sprachen sind. Ich weiß nicht, ob Sprachen etwas Besonderes sind, aber ich denke, sie sind das einfachste Werkzeug, mit dem wir umgehen können.
quelle
Es gibt zwei grundlegende Antworten auf Ihre Frage:
Komplexitätstheorie beinhaltet mehr als Sprachen, zum Beispiel Funktionsklassen, arithmetische Komplexität und die Teilbereiche von Approximationsalgorithmen und Inapproximierbarkeit.
Historische Gründe: Eine der grundlegenden Arbeiten in der Berechenbarkeitstheorie war die Erörterung von Hilberts Entscheidungsproblem (eine Form des Halteproblems).
Leider weiß ich nicht viel über Letzteres, aber lassen Sie mich auf Ersteres eingehen.
Komplexität jenseits der Sprachen
Jeder rechnerischen Komplexitätsklasse ist eine Funktionsklasse zugeordnet . Beispielsweise ist die Klasse P aller in der Polynomzeit entscheidbaren Probleme FP zugeordnet, der Klasse aller in der Polynomzeit berechenbaren Funktionen. FP ist wichtig , da es verwendet wird , NP-Härte zu definieren: eine Sprache NP-hard ist , wenn für jede Sprache in NP gibt es eine Funktion in FP , so dass iff . Eine weitere Komplexitätsklasse von Funktionen, #P , bezieht sich auf die so genannte Polynom Hierarchie über Toda-Theorem .M f M x ∈ M f M ( x ) ∈ L.L M fM x∈M fM(x)∈L
Die Komplexität arithmetischer Schaltkreise (oder die algebraische Komplexitätstheorie ) befasst sich mit der Komplexität der Berechnung verschiedener Polynome. Wichtige Komplexitätsklassen sind hier VP und VNP, und die geometrische Komplexitätstheorie ist ein wichtiges Projekt, das versucht, VP und VNP (und später P und NP) unter Verwendung der algebraischen Geometrie und Darstellungstheorie zu trennen.
Ein weiteres wichtiges Beispiel für algebraische Komplexität ist die schnelle Matrixmultiplikation. Hier ist die grundlegende Frage, wie schnell wir zwei Matrizen multiplizieren können . Ähnliche Fragen stellen die Frage, wie schnell wir Ganzzahlen multiplizieren können, wie schnell wir Ganzzahlen auf Primalität testen können (dies ist ein Entscheidungsproblem!) Und wie schnell wir Ganzzahlen faktorisieren können.
Die konvexe Optimierung befasst sich mit Optimierungsproblemen, die effizient (oder fast gelöst) werden können. Beispiele sind lineare Programmierung und semidefinite Programmierung, die beide über effiziente Algorithmen verfügen. Hier interessiert uns sowohl die optimale als auch die optimale Lösung. Da es oft mehr als eine optimale Lösung gibt, wird die Berechnung einer optimalen Lösung als Entscheidungsproblem nicht gut dargestellt.
Die Approximierbarkeit ist der Bereich, in dem untersucht wird, wie gut eine Approximation für ein Optimierungsproblem in der Polynomzeit sein kann. Betrachten Sie zum Beispiel das klassische Problem der Set-Abdeckung: Wie viele von ihnen benötigen wir bei einer Sammlung von Sets, um das gesamte Universum abzudecken? Die optimale Zahl zu finden ist NP-schwer, aber vielleicht ist es möglich, eine Näherung zu berechnen? Approximationsalgorithmen sind der Teilbereich, in dem Algorithmen zur Berechnung von Approximationen untersucht werden, während Inapproximierbarkeit die Grenzen von Approximationsalgorithmen untersucht. Im speziellen Fall von Set Cover haben wir einen Algorithmus, der eine Näherung (den Greedy-Algorithmus), und es ist NP-schwer, es besser zu machen.lnn
quelle
Betrachten wir diese Frage aus der Perspektive der Kategorietheorie. Die Entscheidungsprobleme (oder Sprachen) würden dann den Objekten einer Kategorie entsprechen, und die zulässigen Verringerungen zwischen zwei Problemen würden den Morphismen (Pfeilen) einer Kategorie entsprechen.
Das Sprechen über Sprachen hat den Vorteil, dass die Gleichwertigkeit von Sprachen gut definiert ist (nämlich durch die erweiterte Gleichheit). Zwei nicht miteinander verbundene Probleme können zu derselben Sprache führen, und dann dürfen wir sie als gleichwertig betrachten. Wenn wir stattdessen über isomorphe Probleme sprechen möchten, müssten wir die zulässigen Morphismen zwischen zwei Problemen definieren. Die zulässigen Morphismen hängen jedoch von der tatsächlich betrachteten Komplexitätsklasse ab, weshalb dieser Ansatz für den Vergleich verschiedener Komplexitätsklassen weniger geeignet ist.
Der Begriff der isomorphen Probleme ist normalerweise gröber als der Begriff der äquivalenten Sprachen, dh zwei Probleme können isomorph sein, selbst wenn ihre zugehörigen Sprachen nicht äquivalent sind. Schlimmer ist, dass es für die erlaubten Morphismen oft unterschiedliche vernünftige Begriffe gibt, die nur in Bezug auf die erlaubten Isomorphismen übereinstimmen. Wenn wir uns auf Sprachen konzentrieren, können wir solche Probleme verschieben, bis wir über verschiedene vernünftige Begriffe der Reduktion sprechen möchten (wie Karp-Reduktion vs. Cook-Reduktion).
quelle