Citat:
Ursprungligen postat av
pkj
Alright tack för svar men varför får de sista två looperna komplexiteten n tillsammans? Varför väljer man n, är det flest antal gånger(dvs det värsta) som de kan köras och därför väljer man ett n för varje for-loop?
Sen körs väl båda for-looparna om if-satsen stämmer, för finns ju ingen else och de ser ju ut som båda for-looparna ligger under if villkoret.
Om du byter plats på looparna ser du att första går mellan 1 och i, och andra mellan i och n. Totalt går du alltså n+1 steg, där 1an kommer från att du använder i två gånger. Om vi antar att vi kan tilldela i O(1) så får du total tid O(1*(n+1))=O(n) för innersta looparna.
If-satsen kan verifieras i O(1) genom att kolla sista biten (1-udda, 0-jämn), så vi får att if-satsen och looparna tillsammans är O(1) om i-jämn, O(n) om i-udda. Eftersom hälften av alla tal i 1..n är udda får vi alltså n*(O(1)+O(n))/2 operationer. O(1)+O(n)=O(n), O(n)/2=O(n) och n*O(n)=O(n^2). Hela algoritmen är alltså i O(n^2).