2017-12-14 5 views
-2

In einer Beispielaufgabe sollte ich prüfen, ob alle Elemente in einem Array identisch sind. DIESE FRAGE IST NICHT DIE EFFIZIENTESTE MÖGLICHKEIT, DIES ZU TUN. Es geht vielmehr um diese beiden Lösungen.Beeinflusst die Anzahl der Vergleiche in der gleichen for-Schleife die Zeitkomplexität?

for(var i=0; i < set.length-1; i++) 
    { 
    if (set[i] != set[i+1]) // could have compared all elements to the firstelement instead of switching 
    { 
    isTrue=false; 
    } 

    } 

Dieser obige Algorithmus vergleicht jeden Index mit dem Index danach.

var firstIndex=set[0]; 
for(var i=0; i < set.length-1; i++) 
{ 
    if(set[i] != firstIndex) 
    { 
     isTrue=false; 
    } 
} 

Während dieser Algorithmus vergleicht den aktuellen Index mit dem ersten Index. Obwohl diese Algorithmen mindestens O (N) sind. Beeinflusst der Unterschied in den Vergleichen die Komplexität von Zeit und Raum?

+0

Es Effizienz helfen würde, wenn die Bedingung 'i war RobG

+0

Ich bereite mich auf ein Interview vor, und ich habe nur versucht zu verstehen, wie man Komplexität basierend auf gegebenem Code berechnet. Wäre das große O in beiden Fällen linear? –

Antwort

1

Nun lässt klare Dinge

Zeitkomplexität für beide O(n) wäre. Die Raumkomplexität ist O(1).

Dinge wie Array-Index-Zugriff oder etc hat keinen Einfluss auf die Big-O-Timne-Komplexität.

Obwohl diese Algorithmen mindestens O (N) sind.

Dies sind O(n) nicht atleast.

Sie können Dinge tun, wie

if(set[i] != firstIndex) 
{ 
    isTrue=false; 
    break; 
} 
Laufzeit keine Zeit Komplexität verbessern
+0

Ah! Okay, von https://stackoverflow.com/questions/4915842/difference-withbetwide-time-complexity-and-running-time verstehe ich, dass die Laufzeit für die meisten Algorithmen nicht allgemein bekannt ist. Was ist bei der Skalierung auf größere Eingaben von Bedeutung? –

+0

Für die Skalierung ist ja Laufzeit wichtig - aber sieh zu, dann weißt du auch, dass die Veränderung, die du haben wirst, linear proportional sein wird. Jede Änderung wird linear sein, wenn Sie diesen Algorithmus über ein großes "n" skalieren. Nicht sicher, ob du das fragst - aber zur Laufzeit vonc gibt es Variationen über 'n', aber für die Komplexität gehören sie zur selben Klasse. @NithinMoorthy – coderredoc

+0

Danke @coderredoc. Das war sehr hilfreich. –

0

Platzkomplexität: Keine Änderung, da Sie keine zusätzliche Variable/Datenstruktur verwenden (firstIndex im zweiten Snippet wird nicht berücksichtigt, da es konstanten Platz benötigt).

Zeit Komplexität: wenig oder keine Änderung. In beiden Snippets führen Sie einen einzigen Vergleich durch, aber der erste Snippet wird etwas langsamer sein, da der Zugriff auf Arrays im Vergleich zum direkten Variablenzugriff langsamer ist.

+0

Okay, genau das habe ich mich gefragt. Würde der Zugriff auf das Array wiederholt irgendeine Änderung verursachen. Vielen Dank! Weißt du, warum diese Frage abgelehnt wurde? –

+0

Würde das große O in beiden Fällen linear sein? –

+0

Big O ist in beiden Fällen linear, da der Array-Zugriff im Allgemeinen nicht auf die zeitliche Komplexität bezogen ist. – Ran

Verwandte Themen