0 Daumen
659 Aufrufe

Ich habe ein paar Fragen zur Bestimmung der Laufzeit und ich hoffe ihr könnt mir da etwas helfen.

Ich habe hierfür mal ein paar beispiel Codes bzw Abschnitte, die wichtig sind:


Alle Bespiele arbeiten mit n = 5 und ich will nun die Befehle zählen, die hier durchgeführt werden.

1. Beispiel:

// 1 Befehl für die Initialisierung von i 
// 5 Befehle für den Vergleich 
// 1 Befehl für den letzten Vergleich (6<5)
// 5 Befehl führ die Initialisierung von a in der Schleife (wird ja 5 mal ausgeführt)

for(int i = 1; i < n; ++i){ 

     a+= 1; 

2. Beispiel:

// 1 Befehl für die Initialisierung von i
// 5 Befehle für den Vergleich
// Der letzte Vergleich fällt hier wegen dem "=" weg oder?
// 5 Befehl führ die Initialisierung von a in der Schleife (wird ja 5 mal ausgeführt)
for(int i = 1; i <= n; ++i){ 

    a += 1; 


3. Beispiel:

// 2 Befehl für die Initialisierung von i und j 
// 5*5 Befehle für den Vergleich
// 2 Befehl für den letzten Vergleich (6<5)

// 5*5 Befehl führ die Initialisierung von a in der Schleife 
for(int i = 1; i <= n; ++i){

    for(int j = 1; j <= n; ++j){

        a += 1;


Würde dies so stimmen?

Avatar von

1 Antwort

0 Daumen
Alle Bespiele arbeiten mit n = 5 und ich will nun die Befehle zählen, die hier durchgeführt werden.
1. Beispiel:
// 1 Befehl für die Initialisierung von i 
// 5 Befehle für den Vergleich
// 1 Befehl für den letzten Vergleich (6<5)
// 5 Befehle für die Initialisierung von a in
// der Schleife (wird ja 5 mal ausgeführt)
for (int i = 1; i < n; ++i) {
    a+= 1; 
    }

Die Schleife wird nicht 5 mal ausgeführt, sondern 4 mal. Beim letzten Mal, das ist für i=5, wird die Schleifenbedingung i<n nicht mehr erfüllt und der Schleifenrumpf nicht mehr ausgeführt. Es gibt also insgesamt 5 Vergleiche, darin ist der letzte Vergleich "5<5" (!), der zum Abbruch der Schleife führt, bereits enthalten. Daher gibt es auch nur 4 Zuweisungen (das sind nicht unbedingt Initialisierungen) der Form a+=1. Weiter muss auch die Inkrementierung "++i" irgendwie bewertet werden.

Avatar von

Danke für deine Antwort also, habe ich

1 für die Initialisierung
5 für den Vergleich
1 für den letzten Vergleich
4 für die Zuweisungen
5 für die Inkrementierung 
1 für die letzte Inkrementierung

also 17 Befehle?


LG 
Anton

// 1 mal i=1
// 5 mal i<n
// 4 mal ++i
// 4 mal a+=1
// 14 Operationen gesamt
Soweit zum Vergleich meine Zählung.

Und was ändert sich bei <=?

Entfällt damit dir letzte Vergleich?

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community