Definitionen eines Algorithmus, der in Polynomzeit und in stark polynomialer Zeit abläuft


18

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.T(n)=Ö(nk)

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Ö(nk)
  • Alle Zahlen in Zwischenberechnungen können mit Bits gespeichert werden .Ö(nk)

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Ö(nk)
  • 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!


der wikipedia-abschnitt gleich nach dem defn hat eine ziemlich gute erklärung, ist das nicht klar genug? es hat damit zu tun, wie viele Bits Zahlen darstellen, und sehr große Zahlen können die Komplexitätsmessungen "aufwärts" beeinflussen. denke die defns mit K & V sind wohl "fast" gleichwertig. Was rationale Eingaben anbelangt, so muss bewiesen werden, dass Arithmetik auf Rationalen ihre Größe nicht in großem Maße erhöht. Ich denke, dies kann gezeigt werden, indem man die LCD aller Eingänge findet und alle arithmetischen Zahlen auf der LCD ausführt.
vzn

@vzn: Die Erklärung in Wikipedia (1) ist für Arithmetik vs. Turing-Maschine anständig, aber in Bezug auf den stark polygrafischen Zweck und die Definition recht flach, und (2) war in Bezug auf das, was GCD beispielhaft darstellt, völlig falsch.
Alexei

Antworten:


5

Ü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.

Ö(1)

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:

  • Der Algorithmus läuft in stark polynomialer Zeit, wenn der Algorithmus ein polynomialer Raumalgorithmus ist und eine Anzahl von elementaren arithmetischen Operationen ausführt, die durch ein Polynom in der Anzahl der eingegebenen Zahlen begrenzt sind.
  • Ein Polynomalgorithmus ist ein Polynomraumalgorithmus (in unserem Standard-Turing-Maschinenmodell) und ein Polynomzeitalgorithmus im arithmetischen Modell (zur Erläuterung siehe diese Frage ).

Ö(n3)Ö(n2)

[*] 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.