Kardinalität des Satzes von Algorithmen

15

Jemand in einer Diskussion brachte vor, dass (er meint) es zumindest eine ununterbrochene Anzahl von Strategien geben kann, um sich einem bestimmten Problem zu nähern. Das spezifische Problem waren Handelsstrategien (nicht Algorithmen, sondern Strategien), aber ich denke, das ist neben dem Punkt für meine Frage.

Dies brachte mich dazu, über die Kardinalität der Algorithmen nachzudenken. Ich habe ein bisschen gesucht, aber nichts gefunden. Ich habe gedacht, dass es unmöglich ist, unzählige Algorithmen zu haben, da Turing-Maschinen mit einem endlichen Satz von Buchstaben arbeiten und das Band indexierbar und somit zählbar sein muss. Meine Mengenlehre ist zugegebenermaßen verrostet, daher bin ich mir nicht sicher, ob meine Überlegungen stimmen und ich würde es wahrscheinlich nicht beweisen können, aber es ist ein interessanter Gedanke.

Was ist die Kardinalität der Algorithmen?

qwe2
quelle
1
Wie Yuval Filmus erwähnte, gibt es unzählige Turingmaschinen. Es gibt jedoch viele uneinheitliche Familien von Booleschen Kreisen, da sie jede boolesche Funktion berechnen können. Aber das ist wahrscheinlich nicht das, was Sie mit "Algorithmus" gemeint haben.
Setzen Sie Monica

Antworten:

28

Ein Algorithmus wird informell als eine endliche Folge von schriftlichen Anweisungen zum Ausführen einer Aufgabe beschrieben. Genauer gesagt, sie werden als Turing-Maschinen bezeichnet, obwohl man sie genauso gut als Computerprogramme bezeichnen kann.

Der genaue Formalismus, den Sie verwenden, spielt keine Rolle, aber der grundlegende Punkt ist, dass jeder Algorithmus als endliche Folge von Zeichen aufgeschrieben werden kann, wobei die Zeichen aus einer endlichen Menge ausgewählt werden, z. B. römischen Buchstaben, ASCII oder Nullen und Einsen. Nehmen wir der Einfachheit halber Nullen und Einsen an. Jede Folge von Nullen und Einsen ist nur eine natürliche Zahl, die binär geschrieben ist. Das heißt, es gibt höchstens eine zählbare Unendlichkeit von Algorithmen, da jeder Algorithmus als natürliche Zahl dargestellt werden kann.

Für eine vollständige Gutschrift sollten Sie sich Sorgen machen, dass einige natürliche Zahlen möglicherweise keine gültigen Programme codieren. Daher gibt es möglicherweise weniger Algorithmen als natürliche Zahlen. (Für Bonusguthaben, können Sie auch fragen, ob es möglich ist , dass zwei verschiedene natürliche Zahlen den gleichen Algorithmus darstellen.) Allerdings print 1, print 2, print 3und so weiter sind alle Algorithmen und alle verschieden, so dass es zumindest abzählbar unendlich viele Algorithmen.

Wir schließen daraus, dass die Menge der Algorithmen unendlich ist.

David Richerby
quelle
Kommentare sind nicht für längere Diskussionen gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Gilles 'SO- hör auf böse zu sein'
10

Die Menge der Algorithmen ist unendlich. Dies liegt daran, dass jeder Algorithmus eine endliche Beschreibung hat, etwa als Turing-Maschine.

Die Tatsache, dass ein Algorithmus eine endliche Beschreibung hat, ermöglicht es uns, einen Algorithmus in einen anderen einzugeben, und dies ist die Grundlage der Berechenbarkeitstheorie. So können wir zum Beispiel das Halteproblem formulieren.

Yuval Filmus
quelle
7

Mindestens fortlaufende Anzahl von Strategien zur Lösung eines bestimmten Problems

"Continuum" soll wahrscheinlich die reellen Zahlen bedeuten ... "mindestens" zusammen mit diesem Wort zu verwenden, ist absurd übertrieben. Ein bisschen Zunge im Mund zu sein: Zählbar unendlich ist ziemlich groß, aber unzählbar unendlich ist ... größer als groß. Sehr viel mehr. Unfassbar.

Also lasst uns das aus dem Fenster werfen. Zu sehen, mit welcher Art von Unendlichkeit wir es zu tun haben, ist kinderleicht (und intuitiv, auch wenn Ihr Freund noch nie von theoretischer Informatik gehört hat):

  • Jeder Algorithmus kann mit jeder beliebigen Sprache implementiert werden. Wählen Sie Ihr Lieblingsgift der realen Sprachen (Java, C, ...), um dies ein wenig zu enträtseln. All dies entspricht dem theoretischen Satz von Algorithmen, den sich jeder ausdenken könnte. Beachten Sie, dass jeder Algorithmus an sich endlich ist, dh es gibt keine Algorithmen, die unendlich viele Symbole zum Aufschreiben benötigen würden.
  • Denken Sie nicht an komplizierte Turingmaschinen. Ihre bevorzugte Sprache verwendet einfache Dateien, um den Quellcode zu speichern. Jede Datei ist eine Sammlung kleiner Zahlen (auch bekannt als Bytes). Das Wichtige ist, dass diese Zahlen definitiv ganzzahlig und nicht stetig sind. (Wenn Sie ein Purist sind und im theoretischen Regime bleiben möchten, ersetzen Sie das Wort "Byte" durch "Symbol", es ändert nichts.) Wenn Sie Angst vor großen Programmen haben, die über mehrere Dateien (und Bibliotheken) verteilt sind , und andere Sachen), dann packen Sie sie einfach in ein einzelnes komprimiertes Archiv (dh eine einzelne Datei).
  • Jetzt können Sie jeder Datei bijektiv eine einzelne Ganzzahl zuweisen . Wir schreiben einfach das ganze Durcheinander von Bits / Bytes der Datei nacheinander und erhalten am Ende eine sehr große Zahl, die in Binärform ausgedrückt wird. In der fernen Vergangenheit haben die Leute das tatsächlich getan: Sie haben kompilierte Binärprogramme als lange Listen mit Hex-Zahlen in Magazinen gedruckt; Sie tippen sie ein, sehen sie jedoch nie als Zahlen (häufig in 8- oder 16-stelligen Sätzen zusammengefasst, um die Eingabe zu vereinfachen).
  • Also: Jedes Programm kann durch eine ganze Zahl dargestellt werden, wenn auch eine willkürlich große. Umgekehrt funktioniert das auch - jede Ganzzahl kann sofort und einfach in eine Datei übertragen und einem Compiler übergeben werden (offensichtlich ist nur ein kleiner Teil davon ein gültiges Programm, aber das ist uns jetzt egal).
  • Letztendlich sind Programme und damit Algorithmen eine Teilmenge der ganzen Zahlen. daher können nur zählbar viele existieren.
  • NB, die Tatsache, dass es viele verschiedene Implementierungen eines einzelnen Algorithmus gibt, ist zu unseren Gunsten, das heißt, viele dieser ganzen Zahlen verdichten sich zu (verschiedenen Darstellungen von) demselben Algorithmus. Wenn also die zählbare Unendlichkeit nicht bereits die kleinste Art von Unendlichkeit wäre, müssten wir uns Sorgen machen, dass die Anzahl der Algorithmen noch kleiner ist, aber sicherlich nicht größer (dh unzählbar).

Das spezifische Problem waren Handelsstrategien (nicht Algorithmen, sondern Strategien)

Ich weiß nicht, was dein Freund mit "Strategie" meint. Ich nehme an, er meint etwas, das einem Algorithmus ähnelt, aber nicht detailliert genug formuliert ist, um es in einen Computer zu hacken. Oder was hängt irgendwie von der menschlichen "Intuition" während der Hinrichtung ab? Wenn ja, dann sind dies nur irrelevante Details. Die Menschheit hat noch keine Beschreibung von Prozessen gefunden, die leistungsfähiger oder umfangreicher sind als "Algorithmen" in dem Sinne, wie wir sie in CS verwenden.

AnoE
quelle
3
Betreff: "'Continuum' soll wahrscheinlich die reellen Zahlen bedeuten ... 'zumindest' zusammen mit diesem Wort ist absurd übertrieben": Es gibt nichts "übertrieben", geschweige denn "absurd" . Es gibt mehr Mengen reeller Zahlen als reelle Zahlen, daher ist es normal, von Mengen zu sprechen, die größer als das Kontinuum sind.
Ruakh
6

Siehe Gödel-Nummerierung , es ist eine grundlegende Tatsache in der Informatik, dass Algorithmen ebenso abzählbar sind wie rekursiv aufzählbare Mengen.

Da Algorithmen abzählbar sind, kann leicht gezeigt werden, dass es keinen Algorithmus gibt, mit dem jede Menge in einem formalen System überprüft werden kann (ordnen Sie einem Problem einen Wahrheitswert zu). Dies wäre äquivalent dazu, jeder Funktion einen Algorithmus zuzuweisen, der die Menge der Probleme auf boolesche Werte abbildet. Die Menge dieser Funktionen ist jedoch unzählbar (trivial von derselben Kardinalität wie die Potenzmenge der Menge von Problemen, daher unzählbar).

Ich hoffe, dies gibt einen Anhaltspunkt dafür, warum Algorithmen "weniger leistungsfähig" als jede andere Funktion sein müssen, eine so abzählbare (ignorieren wir hier die Kontinuumshypothese).

drilow
quelle
2

Wenn man nicht mit der Anforderung beginnt, dass eine Strategie mit einem Algorithmus implementierbar sein muss, und reale Diskretisierungseffekte ignoriert, könnte man zum Beispiel Folgendes als parametrisierte Handelsstrategie akzeptieren:

abab

ab

Arno
quelle
0

Wenn wir uns Algorithmen als Computerprogramme vorstellen, die in Binärform * geschrieben sind, dann ist die Anzahl der Algorithmen die Anzahl der (ganzzahligen) Binärzahlen. Die Kardinalität von Algorithmen ist also die Kardinalität der ganzen Zahlen.

* Ein Beweis, dass Turing-Maschinen alle Algorithmen ausführen können und dass Computer alle Programm-Turing-Maschinen ausführen können, würde diese Antwort unnötig lang machen. Ersteres hängt möglicherweise von der Definition eines Algorithmus ab, aber ich glaube nicht, dass Sie unberechenbare Handelsstrategien anwenden.

user558317
quelle
1
Was fügt dies zu den vorhandenen Antworten hinzu?
David Richerby
"Ein Beweis, dass Turing-Maschinen alle Algorithmen ausführen können ... würde diese Antwort unnötig lang machen". Dies würde die Antwort unmöglich machen, da Sie die kirchliche These
John Coleman,
@ David Richby Es fügt Kürze.
user558317
1
@JohnColeman Die Unmöglichkeit eines Beweises ohne Beweis geltend machen? Ich meinte, dass a) das OP es wahrscheinlich nicht interessieren würde, da b) es eine Frage der Definition ist. Die Frage scheint die Annahme zu enthalten: "Da Turing-Maschinen mit einem endlichen Satz von Buchstaben arbeiten und das Band indexierbar und somit zählbar sein muss, ist es unmöglich, unzählige Algorithmen zu haben."
user558317
0

Die anderen Antworten haben bereits erklärt, dass im Standardmodell der Berechnung (Turing-Maschinen, Lambda-Berechnung usw.) die Menge der Algorithmen unzählbar unendlich ist.

Es gibt jedoch auch andere theoretische Berechnungsmodelle, bei denen die Anzahl der Algorithmen unzählige ist. Zum Beispiel haben Blum-Shub-Smale-Maschinen einen unzähligen Befehlssatz 1 , so dass ihr Satz von Algorithmen ebenfalls unzählig ist.


1 Um genau zu sein, der Befehlssatz selbst ist endlich, aber er wird mit einem unzähligen Satz (den rationalen Funktionen) parametrisiert.

Florian Brucker
quelle
Sind die rationalen Funktionen nicht abzählbar?
Ben Millwood
@BenMillwood Können Sie kurz einen Beweis dafür skizzieren , warum dies der Fall sein könnte?
Mark C
x0Rf:xx0
Oh, ich nahm an, dass die Konstanten auch rational sein mussten. Egal Dann.
Ben Millwood
-1

da Drehmaschinen mit einem endlichen Satz von Buchstaben arbeiten und das Band indexierbar und somit zählbar sein muss

Bei einer bestimmten Größe gibt es endlich viele Turingmaschinen und es gibt zählbar viele Größen. Eine abzählbare Menge von Zahlen, die endlich sind, ist abzählbar. Die Größe des Alphabets ist ein Faktor für die Anzahl der Turing-Maschinen, die Größe des Bands jedoch nicht. Wenn das Alphabet zählbar viele Zeichen enthalten würde, gäbe es unzählig viele Maschinen (jede reelle Zahl könnte als Folge von Symbolen codiert werden).

.5.5

Akkumulation
quelle
n
Und was würde es überhaupt bedeuten, unzählige Algorithmen zu haben? Sie können nur abzählbar viele aufschreiben. Inwiefern kann man einen Algorithmus nicht aufschreiben?
David Richerby
@DavidRicherby Ja, ich habe ein paar Dinge durcheinander gebracht. Aber man kann "Algorithmus" im allgemeinen Sinne verwenden, um sich auf eine Folge von Auswahlmöglichkeiten zu beziehen. In diesem Sinne ist die Auswahl einer Ziffer auf der Grundlage der Eingabe ein "Algorithmus", wenn auch kein berechenbarer.
Akkumulation
In der Informatik sind "Algorithmus" und "berechenbar" dasselbe. Ein Algorithmus ist eine Turingmaschine.
David Richerby