Ich bin der Fachbegriff für diese Art von Schleifen nicht sicher (falls vorhanden auch), so dass ich ein Beispiel nennen:Wie finden Sie die Laufzeit von Schleifen, die sich gegenseitig beeinflussen?
x=0
i = 1
while(i<n)
for(j=1 to n/i)
x = x + (i-j)
i*=2
return(x)
In diesem Beispiel wird die while-Schleife ändert direkt die Anzahl der Male des For Schleife läuft, die mich aus irgendeinem Grund wirft
Normalerweise würde ich Zeile für Zeile gehen und sehen, wie oft jede Zeile ausgeführt würde, aber weil die Anzahl der Male ändert, habe ich versucht, eine Summierung, aber bekam eine wenig verloren ... Was wäre ein Schritt für Schritt Weg, um diese Art von Problem zu lösen?
Die Antwort im Anhang ist O (n), aber wenn ich das tat ich bekam nlog (n)
Jede Hilfe sehr geschätzt wird, ist diese Bewertung für meinen letzten
Auch, wenn Sie wissen, von irgendwelchen guten Orten, um Übungsaufgaben dieser Art zu finden, würde ich es schätzen!
Danke
Vielen Dank für Ihre Antwort! nur um dies zu verdeutlichen, weil ich exponentiell anwächst (speziell um ein Vielfaches von 2, also 2^j, wobei j die Anzahl der Iterationen ist), läuft die while-Schleife lgn-mal. Da die innere Schleife im wesentlichen eine Summe von n/2^j ist, wird sie zu einer geometrischen Reihe, die zu einer konstanten Zeit n konvergiert, wobei das O (n) & le; – ChrisM
Ja, das stimmt. –
Ahh das macht vollkommen Sinn, danke! Ich habe nicht in Betracht gezogen, ich auf 2^j zu setzen, also war ich verloren – ChrisM