Warum bedeuten größere Eingabegrößen schwierigere Instanzen?

12

Angenommen, wir arbeiten mit einer Infinite-Tape-Turing-Maschine.

Wenn ich jemandem den Begriff der Zeitkomplexität erläutere und erkläre, warum er im Verhältnis zur Eingabegröße einer Instanz gemessen wird, bin ich auf die folgende Behauptung gestoßen:

[..] Zum Beispiel ist es normal, dass Sie mehr Schritte benötigen, um zwei Ganzzahlen mit 100000 Bits zu multiplizieren, als zum Beispiel zwei Ganzzahlen mit 3 Bits zu multiplizieren.

Die Behauptung ist überzeugend, aber irgendwie von Hand zu winken. Bei allen Algorithmen, auf die ich gestoßen bin, sind je größer die Eingabegröße, desto mehr Schritte erforderlich. Genauer gesagt ist die Zeitkomplexität eine monoton ansteigende Funktion der Eingangsgröße.

Ist es so, dass die Zeitkomplexität in der Eingabegröße immer eine zunehmende Funktion ist? Wenn ja, warum ist das so? Gibt es dafür einen Beweis , der über das Winken von Hand hinausgeht?

Kaveh
quelle
"Direkt proportional" hat eine spezifische mathematische Bedeutung, die im Wesentlichen lineare Zeit bedeutet. Mit anderen Worten, wenn Ihre Eingabe die Größe , wenn die Zeit direkt proportional ist, läuft der Algorithmus in der Zeit c n . Ich würde mir vorstellen, dass das nicht das ist, was Sie meinen, da viele Algorithmen nicht in linearer Zeit ablaufen, dh sortieren. Können Sie das näher erläutern? ncn
SamM 13.08.12
Sie fragen also nach einem Algorithmus, der in Zeit abläuft ? O ( 1 ) bedeutet, dass der Algorithmus unabhängig von der Eingabegröße zur gleichen Zeit ausgeführt wird. O ( 1 ) bedeutet, dass er schneller ausgeführt wird, wenn die Eingabe größer wird. Ich kann mir keine vorstellen, die in dieser Zeit über meinem Kopf läuft, aber die Notation ist ziemlich gebräuchlich, da ein Algorithmus oft in so etwas wie O ( n 2 ) + o ( 1 ) läuft - mit anderen Worten es dauert O ( n 2 )Ö(1)Ö(1)Ö(1)Ö(n2)+Ö(1)Ö(n2)Zeit, und es gibt einige andere Begriffe, die kleiner werden, wenn die Eingabe größer wird.
SamM,
Gute Frage. Was ist mit dem Gegenbeispiel zur Berechnung der Primfaktoren von für ein großes c (dies ist nur eine zunehmende Funktion für n c )? @Sam Beachten Sie, dass eine ansteigende Funktion besagt, dass die Zeit an einem bestimmten Punkt entlang der realen Linie abnehmen muss (dh f ( b ) < f ( a ) , a < b ). c/ncncf(b)<f(ein),ein<b
Casey Kuball
@ Darthfett Ich fürchte, ich folge nicht. Nicht alle ansteigenden Funktionen nehmen irgendwann entlang der realen Linie ab.
SamM,
@ Jennifer Ja, ich verstehe, das macht Sinn. Ich würde empfehlen, den Begriff da er die gesuchte Bedeutung hat. Und ich möchte nochmals betonen, dass direkte Proportionalität Linearität impliziert; Ich verstehe, worauf du hinaus willst, aber es kann für diejenigen verwirrend sein, die die Frage zum ersten Mal lesen. Ö(1)
SamM,

Antworten:

12

Ist es so, dass die Zeitkomplexität in der Eingabegröße immer eine zunehmende Funktion ist? Wenn ja, warum ist das so?

Betrachten Sie eine Turing-Maschine, die danach anhält Schritten, wenn die Eingangsgröße n gerade ist, und nach n 2 Schrittenanhält,wenn n ungerade ist.nnn2n

Wenn Sie die Komplexität eines Problems meinen , lautet die Antwort immer noch nein. Die Komplexität der Primalitätstests ist bei geraden Zahlen viel geringer als bei ungeraden Zahlen.

JeffE
quelle
4

Ist es so, dass die Zeitkomplexität in der Eingabegröße immer eine zunehmende Funktion ist? Wenn ja, warum ist das so? Gibt es dafür einen Beweis, der über das Winken von Hand hinausgeht?

Lassen Sie die Eingangsgröße bezeichnen. Um die gesamte Eingabe zu lesen, benötigt eine Turingmaschine bereits n Schritte. Wenn Sie also annehmen, dass ein Algorithmus seine gesamte Eingabe lesen muss (oder n / c für eine Konstante c ), erhalten Sie immer mindestens eine lineare Laufzeit.nnn/cc


Das Problem bei der Definition von Algorithmen mit einer "monoton abnehmenden Laufzeitfunktion" ist, dass Sie die Laufzeit für n=1 irgendwie definieren müssen. Sie müssen es auf einen endlichen Wert setzen. Es gibt jedoch unendlich viele mögliche Werte für , sodass Sie eine Funktion erhalten, die für unendlich viele Werte konstant ist.n>1


Wahrscheinlich sind für Sie sublineare Algorithmen von Interesse, die nicht die gesamte Eingabe lesen. Siehe zum Beispiel http://www.dcs.warwick.ac.uk/~czumaj/PUBLICATIONS/DRAFTS/Sublinear-time-Survey-BEATCS.pdf .

Christopher
quelle
Es existieren sublineare Algorithmen. Siehe zum Beispiel people.csail.mit.edu/ronitt/sublinear.html . Es ist ein einigermaßen neues Feld, aber es ist sehr interessant. Es gibt andere Gegenbeispiele dazu. Das Auffinden eines Elements anhand einer sortierten Liste dauert im RAM-Modell . Ich stimme der Idee hinter Ihrem Beitrag zu. Es macht keinen Sinn, dass ein Algorithmus weniger Zeit benötigt, wenn die Eingabe größer wird, da er nicht die Zeit hat, alle Eingaben zu lesen (woher weiß er, dass weniger Zeit benötigt wird?). Aber ich weiß nicht , wie zu beweisen , dass sie nicht existieren, und dass ein Trick konnte es nicht machen o ( 1 ) . Ö(Logn)Ö(1)
SamM,
@Sam: Entschuldigung, ich habe Ihren Kommentar vor der Bearbeitung nicht gesehen (Hinzufügen von sublinearen Algorithmen).
Christopher
ganz im Gegenteil; Ich habe Ihre Bearbeitung nicht gesehen, bevor ich meinen Kommentar hinzugefügt habe. Ich würde es löschen, aber die zweite Hälfte gilt immer noch und ein zusätzlicher Link kann das OP nicht verletzen
SamM
1
ein Gegenbeispiel: eine konstante Funktion wie . Was Sie Werke für Funktionen beschreiben, müssen ihren Beitrag lesen. f(x)=0
Kaveh,
1

(N,)Ω(1)

Das sei gesagt, mittlere Laufzeiten enthalten Komponenten oszillieren, zum Beispiel Mergesort .

Raphael
quelle
Ich verstehe nicht, in welchem ​​Zusammenhang diese Antwort mit der Frage steht.
A.Schulz
@ A.Schulz Es gibt einen Beweis für die Hauptfrage "Ist es so, dass die Zeitkomplexität in der Eingangsgröße immer eine zunehmende Funktion ist?"
Raphael
1
Nun, "nicht zunehmen" muss nicht unbedingt "abnehmen?" Bedeuten. Oder anders herum: "nicht abnehmen" zunehmen.
A.Schulz
@ A.Schulz: Trotzdem scheint meine Interpretation das zu sein, woran Jennifer interessiert ist .
Raphael