Kann eine Big-Oh-Zeitkomplexität mehr als eine Variable enthalten?


11

Nehmen wir zum Beispiel an, ich mache eine String-Verarbeitung, die eine Analyse von zwei Strings erfordert. Ich habe keine Informationen darüber gegeben, wie lang sie sein könnten, daher stammen sie aus zwei verschiedenen Familien. Wäre es akzeptabel, die Komplexität eines Algorithmus oder (je nachdem, ob wir einen naiven oder einen optimierten Algorithmus verwenden)?O ( n + m )O(nm)O(n+m)

Nehmen wir in ähnlicher Weise an, dass der von uns gewählte Algorithmus tatsächlich zwei Stufen erfordert - eine Einrichtungsphase für die erste Zeichenfolge, mit der wir eine beliebige Anzahl anderer Zeichenfolgen verarbeiten können, ohne dass diese anfänglichen Kosten anfallen. Wäre es angemessen zu sagen, dass es eine -Konstruktion hat, gefolgt von einer beliebigen Anzahl von -Berechnungen?O ( m )O(n)O(m)

Wäre es angebracht, sie einfach da beide Berechnungen linear sind?O(n)


In den Kommentaren zu dieser Antwort finden Sie einen kleinen Hintergrund - mein Respekt an @corsiKa, dass Sie so mutig eine so umstrittene Frage gestellt haben.
OldCurmudgeon

@ OldCurmudgeon, ich verstehe. Ich würde es hassen, in diesen Kommentarthread zu waten. Oldcurmudgeon, streiten Sie sich über die Big-O-Notation, ohne die Big-O-Notation zu verstehen? In der Tat umständlich. Außerdem streiten Sie und corsiKa über die Laufzeit, ohne die Parameter und - ein Rezept für Missverständnisse. Hinweis: Eine übliche Konvention beim Umgang mit Zeichenfolgen besteht darin, zuzustimmen, für die Länge einer Zeichenfolge und für die Länge einer anderen Zeichenfolge zu verwenden. Im Idealfall ist es jedoch wahrscheinlich am besten, dies explizit zu machen, da dies sonst zu Verwirrung führen kann (as hier abgebildet). m m nnmmn
DW

@DW Es ist möglich, dass OldCurmudgeon in der Schule einfach eine andere Definition gelernt hat ... wie ich in einem Kommentar unten hervorhole, ist es möglich, mehrere Variablen zu meiden, obwohl ich bis jetzt nie wirklich darüber nachgedacht habe. Vielleicht war das - oder so ähnlich - früher Standard?
Patrick87

2
Ich denke, das hat hier und hier genügend Antworten .
Raphael

Antworten:


14

Ja natürlich. Das ist in Ordnung und vollkommen akzeptabel. Es ist üblich und Standard, Algorithmen zu sehen, deren Laufzeit von zwei Parametern abhängt.

Beispielsweise wird häufig die Laufzeit der Tiefensuche als ausgedrückt , wobei die Anzahl der Scheitelpunkte und die Anzahl der Kanten im Diagramm ist. Dies ist vollkommen gültig. Die Bedeutung davon ist, dass es eine Konstante und Zahlen so dass die Laufzeit des Algorithmus höchstens für alle . Mit anderen Worten, wenn die genaue Laufzeit , sagen wir, dass wenn existiert so dass und impliziertO(n+m)nmcn0,m0c(n+m)n>n0,m>m0f(n,m)f(n,m)=O(n+m)c,n0,m0n>n0 f ( n , m ) c ( n + m )m>m0f(n,m)c(n+m) .

Ja, es ist vollkommen angemessen und akzeptabel zu sagen, dass die erste Stufe Zeit und die zweite Stufe Zeit benötigt.O ( m )O(n)O(m)

Wichtig: Stellen Sie sicher, dass Sie definieren, was und sind. Sie können nicht sagen, dass dies ein -Zeitalgorithmus ist, ohne anzugeben, was ist. Wenn in der Problemstellung nicht angegeben ist, müssen Sie es angeben. Siehe zum Beispiel Diagrammalgorithmen, in denen wir normalerweise Anzahl der Eckpunkte und Anzahl der Kanten definieren.m O ( n ) n n n = m =nmO(n)nnn=m=

Was die Frage betrifft, ob Sie sie -Zeit nennen können , nein, natürlich nicht - es sei denn, Sie wissen irgendwie, dass . Wenn Sie wissen, dass , folgt natürlich , sodass ein -Zeitalgorithmus auch ein -Zeitalgorithmus ist. Wenn es jedoch keine Garantie dafür gibt, dass , können Sie es nicht als -Zeitalgorithmus bezeichnen.m = O ( n )O(n)m=O(n)m + n = O ( n ) O ( m + n ) O ( n ) m = O ( n ) O ( n )m=O(n)m+n=O(n)O(m+n)O(n)m=O(n)O(n)

Das ist grundlegendes Zeug. Sie finden es überall in Lehrbüchern für Algorithmen.


1
@OldCurmudgeon, wahrscheinlich finden Sie Beispiele dafür in vielen Lehrbüchern für Standardalgorithmen. Welche hast du dir angesehen? Haben Sie versucht, das Kapitel über die Tiefensuche zu lesen (das Beispiel, das ich in meiner Antwort erwähnt habe)?
DW

2
@OldCurmudgeon In meiner Ausgabe von CLRS wird in Übung 3.1-8 genau diese Definition der Notation für Funktionen vieler Variablen vorgestellt. Und seine Obergrenze für die Laufzeit von dfs ist für einen Graphen . O ( V + E ) ( V , E )OO(V+E)(V,E)
Kirill

2
@Kirill Mein Punkt war, dass es denkbar ist, dass es irgendwann in der Vergangenheit als üblich angesehen wurde, nur die gesamte Gesamtlänge zu berücksichtigen, sofern dies sonst als Fehler angesehen werden könnte. Wenn Sie die Prüfung eines Schülers bewerten und dieser Schüler die gesamte Eingabelänge als Variable für die zeitliche Komplexität der DFS verwendet, würden Sie es als Fehler betrachten, zwei Dimensionen (V und E) nicht zu berücksichtigen? Was wahr ist und was die Menschen zugeben wollen, ist nicht immer ein und dasselbe. n
Patrick87

1
Ich stimme insofern zu, als jeder die Landau-Notation auf diese Weise verwendet, aber fast niemand weiß, was dies tatsächlich bedeutet (es sei denn, Sie verbinden die Parameter funktional). Siehe auch den Artikel in der Antwort von A. Schulz, in dem zunächst festgestellt wird, dass die "grundlegende" und "allgemeine" Verwendung falsch ist.
Raphael

1
@ Patrick87 Die Komplexitätstheorie verwendet aufgrund der Definition vieler bekannter Klassen hauptsächlich die Eingabelänge (mit bemerkenswerten Ausnahmen). Die Algorithmusanalyse ist - wenn sie ernsthaft durchgeführt wird - daran interessiert, etwas über die tatsächliche Ressourcennutzung zu lernen (soweit das Modell dies zulässt), damit andere Parameter interessanter werden, um das gesamte Bild (genauer) zu zeichnen.
Raphael
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.