Wikipedia definiert es so
Ein Algorithmus hat eine Polynomzeit, wenn seine Laufzeit durch einen Polynomausdruck in der Größe der Eingabe für den Algorithmus nach oben begrenzt ist, dh für eine Konstante k.
Der Algorithmus läuft in stark polynomieller Zeit, wenn [8]
Die Anzahl der Operationen im arithmetischen Berechnungsmodell ist durch ein Polynom in der Anzahl der Ganzzahlen in der Eingabeinstanz begrenzt. und
Der vom Algorithmus verwendete Raum wird durch ein Polynom in der Größe der Eingabe begrenzt.
In Bernhard Korte, Jens Vygen, Kombinatorische Optimierung :
Definition 1.4.
Ein Algorithmus mit rationaler Eingabe soll in polynomialer Zeit ablaufen, wenn
- es gibt eine ganze Zahl k, so dass sie in der -Zeit läuft , wobei n die Eingabegröße ist, und
- Alle Zahlen in Zwischenberechnungen können mit Bits gespeichert werden .
Ein Algorithmus mit willkürlicher Eingabe soll in stark polynomieller Zeit ablaufen, wenn
- es gibt eine ganze Zahl k, so dass sie für jede Eingabe, die aus n Zahlen und besteht, in der Zeit läuft
- es läuft in polynomialer Zeit für rationale Eingabe.
Bitte korrigieren Sie mich, wenn ich falsch liege. Im Folgenden sind die wörtlichen Unterschiede aufgeführt, die mir aufgefallen sind:
Für polynomielle Zeitalgorithmen ist die Definition von Korte und Vygen "die Definition von Wikipedia + polynomieller Speicherplatz".
Für stark polynomielle Zeitalgorithmen erfordern sowohl die Korte- und Vygen-Definition als auch die Wikipedia-Definition eine Polynomzeit in der Größe des Eingabespeichers. Aber K und V benötigen zusätzlich eine Polynomzeit in der Anzahl der Zahlen in einer Eingabe, während Wikipedia zusätzlich einen Polynomspeicherplatz in der Eingabegröße benötigt.
Sind also die Definitionen von K und V bzw. Wikipedia für diese beiden Begriffe gleichwertig? Welche anderen Unterschiede und Beziehungen bestehen zwischen ihnen?
Danke und Grüße!
Antworten:
Überlegen Sie sich vor formalen Definitionen, was mit der Klassifizierung "stark / schwach" unterschieden werden soll.
Erwägen Sie zunächst, eine der beiden Methoden auf einer Turing-Maschine auszuführen. Beide werden in mehreren Schritten polynomiell in der Länge der binär codierten Eingabe ausgeführt. Folglich müsste die Anzahl der von beiden ausgeführten arithmetischen Operationen in der Länge der binär codierten Eingabe polynomisch sein . Daher würde die Laufzeit beider Turing-Maschinen mit zunehmender Anzahl von Eingabewerten oder deren Größen polynomial ansteigen. Um letzteres zu betonen, beachte, dass auch der Starke bei größeren Beträgen mehr TM-Schritte machen wird (es müssen mindestens die zusätzlichen Bits gelesen werden). Unter keinen Umständen wird man exponentiell (wie es bei der nicht verwandten Pseudo-Polynom-Zeit der Fall ist). Mit einer Turing-Maschine alleine scheint ein grundlegender Unterschied nicht erkennbar zu sein.
Die Menge der Algorithmen, die in der Anzahl der Polynome arithmetischer Operationen in der Anzahl der Eingabenummern ausgeführt werden, ist genau definiert, überschneidet sich jedoch mit der Klasse von Algorithmen, die die Anzahl der TM-Schritte exponentiell in der Länge der binär codierten Eingabe ausführen (siehe Beispiele ). Daher würden für diese Menge die Eigenschaften im zweiten Absatz nicht gelten. Um die unerwünschte Überschneidung auszuschließen, fügen wir eine Bedingung für ein polynomielles TM-Leerzeichen hinzu [*].
In [1] wird dies auf zwei Arten angegeben:
[*] Die zweite Bedingung wird überall als Polynomraum angegeben, wohingegen es für mich sinnvoller ist, Polynomzeit zu benötigen. Ersteres ist integrativer, aber seltsamer. Gibt es stark polynomielle Algorithmen, die mehr als polynomielle Zeit benötigen? Beachten Sie, dass ein Beispiel für wiederholtes Quadrieren weder Polynomzeit noch Polynomraum benötigt.
[1] Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Komplexität, Orakel und numerische Berechnung". Geometrische Algorithmen und kombinatorische Optimierung. Springer. ISBN 0-387-13624-X.
quelle