| Hjem | Hardware | Netværk | Programmering | software | Fejlfinding | systemer | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringssprog
  • Delphi programmering
  • Java programmering
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl programmering
  • Python Programming
  • Ruby Programming
  • Visual Basics Programmering
  •  
    Computer Viden >> Programmering >> C /C + + Programming >> Content
    Hvad er runtime -kompleksiteten af ​​et stykke tid loop i programmet?
    Runtime -kompleksiteten af ​​en `mens 'loop afhænger helt af, hvor mange gange loop itererer. Der er ikke et enkelt, definitivt svar. Det er vigtigt at analysere den tilstand, der styrer løkken, og hvordan de variabler, der er involveret i denne tilstand, ændres inde i løkken.

    Her er en sammenbrud af almindelige scenarier og deres runtime -kompleksiteter:

    1. Konstant tid (O (1))

    * Når løkken kører et fast, lille antal gange uanset inputstørrelsen. Dette er sjældent, men det kan ske, hvis loop -tilstanden afhænger af en konstant værdi og ikke påvirkes af input.

    `` `Python

    i =0

    Mens jeg <5:# løkker nøjagtigt 5 gange

    Udskriv (i)

    i +=1

    `` `

    2. Logaritmisk tid (O (log n))

    * Når løkken reducerer problemstørrelsen med en konstant faktor i hver iteration. Et klassisk eksempel er binær søgning.

    `` `Python

    Lav =0

    høj =n - 1

    Mens lav <=høj:# loop fortsætter, så længe søgerummet eksisterer

    Mid =(lav + høj) // 2

    Hvis arr [midt] Lav =Mid + 1

    ELIF ARR [MID]> Mål:

    Høj =Midt - 1

    andet:

    returner midt # mål fundet!

    `` `

    Her er størrelsen på søgerummet (fra `lav 'til' høj ') groft halveret i hver iteration. Derfor kører loopen cirka `log2 (n)` gange.

    3. Lineær tid (O (n))

    * Når løkken itereres gennem hvert element i et input af størrelse `n` en gang. Dette er meget almindeligt.

    `` `Python

    i =0

    Mens jeg Udskriv (arr [i]) # adgang til hvert element i 'arr' en gang.

    i +=1

    `` `

    I dette tilfælde udfører loopens krop `n 'gange.

    4. Kvadratisk tid (O (n^2))

    * Når loop itererer `n 'gange for hvert af` n` elementer (ofte indlejrede sløjfer).

    `` `Python

    i =0

    Mens jeg j =0

    mens j Print (i, J)

    J +=1

    i +=1

    `` `

    Dette involverer en indlejret 'mens' loop, hvor begge løkker itererer `n 'gange. Det samlede antal iterationer er `n * n =n^2`.

    5. Anden polynomisk tid (O (n^k))

    * Generaliseringer af det kvadratiske eksempel ovenfor. For eksempel ville tre indlejrede løkker, som hver iterere `n 'gange ville resultere i O (n^3) kompleksitet.

    6. Eksponentiel tid (O (2^n)) eller værre

    * Loopens udførelsestid vokser eksponentielt med inputstørrelsen. Dette indikerer ofte en dårligt designet algoritme eller et problem, der i sig selv er meget vanskeligt. Eksempler kan involvere at prøve alle mulige kombinationer af elementer.

    Nøgleovervejelser:

    * inputstørrelse (n): Hvad repræsenterer `n`? Størrelsen på en matrix, størrelsen af ​​et tal osv. Dette er kritisk for at udtrykke kompleksiteten med hensyn til input.

    * Tilstandsvariabel ændringer: Hvordan ændres variablen (e), der kontrollerer loop -tilstanden i løkken? Stiger det med et konstant beløb, falder med en faktor osv.?

    * operationer inde i løkken: Runtime for operationerne * inde * Loop betyder noget. Hvis du for eksempel har en O (n) operation inde i en løkke, der kører n gange, er den samlede kompleksitet O (n * n) =o (n^2).

    hvordan man bestemmer runtime -kompleksitet:

    1. Identificer inputstørrelsen (n): Hvad er den relevante størrelsesparameter?

    2. Bestem antallet af iterationer: Hvor mange gange udføres loopen *i forhold til `n` *? Dette er den centrale del.

    3. Overvej operationer inde i løkken: Hvis løkken indeholder komplekse operationer, skal deres runtime -kompleksitet tages i betragtning. Den samlede kompleksitet bliver kompleksiteten af ​​loop -iterationer, der er ganget med kompleksiteten af ​​den dyreste operation i løkken.

    4. udtrykke kompleksiteten: Brug stor O -notation (O (), ω (), θ ()) til at repræsentere den øvre grænse, nedre grænse eller stram grænse af runtime. Typisk fokuserer vi på Big O (worst-case-scenario).

    Eksempel:

    `` `Python

    def process_array (arr):

    n =len (arr)

    i =0

    Mens jeg j =i + 1

    mens j Hvis arr [i]> arr [j]:

    arr [i], arr [j] =arr [j], arr [i] # konstant tidsskift

    J +=1

    i +=1

    Return arr

    `` `

    Analyse:

    * `n` er længden af ​​input -arrayet` arr`.

    * Den ydre sløjfe (`Jeg ') kører` n' gange.

    * Den indre sløjfe (`j`) kører cirka` n - i 'gange. I værste tilfælde, når `jeg er 0, kører det` n 'gange.

    * Swap -operationen inde i den indre sløjfe er O (1).

    Derfor bidrager de indlejrede løkker til O (n^2) kompleksitet. Swap er konstant tid og påvirker ikke den samlede o (n^2) runtime. Denne algoritme ligner udvælgelsessortering.

    Sammenfattende skal du omhyggeligt analysere, hvor mange gange sløjfen udføres i forhold til inputstørrelsen og overveje kompleksiteten af ​​de operationer, der udføres i løkken for at bestemme runtime -kompleksiteten af ​​en 'mens' loop.

    Forrige :

    næste :
      Relaterede artikler
    ·Hvordan man skriver et C + + Computer Program der bereg…
    ·Sådan bruges strcat Funktion i C + + 
    ·Fordele og ulemper ved Objective C 
    ·Hvordan man laver en Card Game fil i C + + 
    ·Program, der tager et enkelt heltalargument n fra komma…
    ·Hvad betyder det, at instruktionen på 0x11460c03 refer…
    ·Datatyper til Turbo C 
    ·Sådan tilføjes kolonner til en DataTable i C # 
    ·Sådan oprettes en Portrait i C + + 
    ·Sådan logger opkald til D3D 
      Anbefalede Artikler
    ·Hvad er statisk i Java 
    ·HTML-kode for Understregede Kursiv 
    ·Sådan tilføjes en ny linje til adgang til en forespø…
    ·Sådan oprettes et edb-program From Scratch 
    ·Sådan Kast View Parameter på Android 
    ·Sådan foretages fejlfinding Apache og PHP -filer 
    ·Sådan oprettes en Pulse Width Modulation (PWM ) i en V…
    ·Sådan Embed RESX i CSC Compiler 
    ·Sådan får du adgang videopodcasts Med iPhone SDK 
    ·Hvordan at finde den maksimale & Minimum antal i Python…
    Copyright © Computer Viden https://www.computerdk.com