Frage

Ich versuche festzustellen, ob Kolmogorov-Komplexität für eine bestimmte Sprache berechenbar ist. Ich bin sicher, dass diese gegebene Sprache nicht auswirkt. Die Sprache ist wie folgt definiert:

$ a; b \ text {- Führt Anweisungen A und B nacheinander aus.} $
$! x_i! \ text {- Setzt Variable} x_i \ text {auf den Wert} 2. $
$ \ {x_i \} \ text {- verdoppelt den Wert der Variablen} x_i $
$ [x_i] \ text {- halbiert den Wert der Variablen} x_i \ text {und runden sie auf.} $
$ "W" \ Text {- Druckt die Zeichenfolge} W \ in \ {a, b, ..., z, a, b ..., z \} $
$ \ lambda (x_i, a) \ text {- Execututs Anleitung} A \ text {genau} x_i \ text {times, unabhängig von späteren Änderungen an} x_i $ < / p>

Insbesondere muss ich wissen, ob die Kolmogorov-Komplexität relativ zu dieser Sprache im Allgemeinen berechenbar ist. Das Programm, das diese Komplexität berechnet, kann in einer turnierenden Sprache verfasst sein.

Ich verstehe, dass die Kolmogorov-Komplexität für jede Turnierende Sprache nicht berechenbar ist. Diese Sprache fehlt hier die Möglichkeit, eine Infinte-Schleife zu erstellen, und als solche ist weniger als Turing-vollständig. Ich fühle keine Intuition, die sich aus dieser Beobachtung ergibt. Ich würde davon ausgehen, dass diese Sprache schwächer ist, die Kolmogorov-Komplexität jetzt berechtigt sein kann. Ich kann jedoch keinen Beweis dafür finden. Angabe eines Algorithmus, der diese Aufgabe erfüllt, erscheint übermäßig kompliziert. Die Verwendung dieser Sprache scheint wie ein besonderer Fall der allgemeineren Berechnung der Komplexität von Kolmogorov und als solcher, ich kann nicht von den Attributen des allgemeinen Falls ableiten, wenn der allgemeine Fall nicht berechenbar ist. Dies kann noch sein.

Ich finde keinen Boden, um mit diesem Problem aufzusteigen und würde jede Tipps und Zeiger auf eine Lösung begrüßen. Können wir alles andere aus dieser Sprache ableiten als das, was ich bisher erwähnt habe? Ist es eine niedrigere Leistung, relativ zu turnierenden Sprachen, helfen Sie uns mit dieser Situation?

War es hilfreich?

Lösung

Das Wichtigste ist, dass Ihre Programme immer aufgehalten werden. Dies macht das Berechnen der Kolmogorov-Komplexität eine leichte Aufgabe, da eine Zeichenfolge $ W $ gegeben ist, können Sie alle möglichen Längenprogramme $ \ le | w | +2 $ Um das kürzeste Programm zu finden, dessen Ausgabe $ W $ ist. Die obere gebundene $ | w | +2 $ folgt aus der Tatsache, dass für jede Zeichenfolge $ W $ , "W" ist ein Programm, dessen Ausgabe $ W $ ist.

In der Tat könnten Sie wahrscheinlich die Komplexität einer Zeichenfolge in der Polynomzeit berechnen, da die Komprimierung im Falle von Wiederholungen nur möglich ist (Sie können keine allgemeinere Struktur nutzen). Etwas in den folgenden Zeilen sollte funktionieren $ kc (w_1 ... w_n)=min \ limits_i \ big (kc \ limits (w_ {i + 1} ... w_n | w_i \ RECHTS) + KC (W_1 ... W_I) \ BIG) $ , wobei $ kc \ links (w | w '\ rechts) $ ist Nur $ kc (W) $ Wenn $ w '$ nicht ein Präfix von $ W $ und $ kc (w '') + o (\ log j) $ Ansonsten, wo $ W= W '^ JW' '$ und $ J $ ist die maximale Anzahl, die dies erfüllt. Der Punkt ist, dass Sie nur die Komplexität der Teilstramme von $ W $ berechnen müssen, von denen $ O (| w | ^ 2) $ .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top