|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> C /C + + -programmering >> Content

    Vad är runtime -komplexiteten för en stundslinga i programmet?

    Runtime -komplexiteten för en "medan" -slinga beror helt på hur många gånger slingan iterater. Det finns inget enda, definitivt svar. Det är avgörande att analysera tillståndet som styr slingan och hur variablerna som är involverade i det tillståndet förändras inuti slingan.

    Här är en uppdelning av vanliga scenarier och deras runtime -komplexitet:

    1. Konstant tid (O (1))

    * När slingan kör ett fast, litet antal gånger oavsett ingångsstorlek. Detta är sällsynt, men det kan hända om slingtillståndet beror på ett konstant värde och inte påverkas av ingången.

    `` `python

    i =0

    Medan jag <5:# slingrar exakt 5 gånger

    tryck (i)

    I +=1

    `` `

    2. Logaritmisk tid (O (log n))

    * När slingan minskar problemstorleken med en konstant faktor i varje iteration. Ett klassiskt exempel är binär sökning.

    `` `python

    låg =0

    hög =n - 1

    Medan låg <=hög:# Loop fortsätter så länge sökutrymmet finns

    Mid =(låg + hög) // 2

    Om arr [mid] Låg =Mid + 1

    elif arr [mid]> mål:

    hög =mitten - 1

    annan:

    Återvänd mitten av # målet hittades!

    `` `

    Här halveras storleken på sökutrymmet (från "låg" till "hög") i varje iteration. Därför går slingan ungefär `log2 (n)` tider.

    3. Linjär tid (o (n))

    * När slingan itereras genom varje element i en ingång av storlek `n` en gång. Detta är mycket vanligt.

    `` `python

    i =0

    Medan jag Skriv ut (arr [i]) # åtkomst till varje element i 'arr' en gång.

    I +=1

    `` `

    I det här fallet kör slingans kropp "n" -tider.

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

    * När slingan iterater "n" -tiderna för vart och ett av "n" -element (ofta kapslade slingor).

    `` `python

    i =0

    Medan jag j =0

    Medan j tryck (i, j)

    J +=1

    I +=1

    `` `

    Detta innebär en kapslad "medan" slinga, där båda slingorna itererar "n" -tider. Det totala antalet iterationer är `n * n =n^2`.

    5. Annan polynomtid (O (n^k))

    * Generaliseringar av det kvadratiska exemplet ovan. Till exempel skulle tre kapslade slingor som varje `n` -tider skulle resultera i o (n^3) komplexitet.

    6. Exponentiell tid (o (2^n)) eller sämre

    * Loopens körningstid växer exponentiellt med ingångsstorleken. Detta indikerar ofta en dåligt utformad algoritm eller ett problem som i sig är mycket svårt. Exempel kan innebära att du försöker alla möjliga kombinationer av element.

    Nyckelöverväganden:

    * Ingångsstorlek (n): Vad representerar `n`? Storleken på en matris, storleken på ett nummer osv. Detta är avgörande för att uttrycka komplexiteten när det gäller inmatning.

    * Skick Variabla ändringar: Hur förändras variabeln (er) som kontrollerar slingtillståndet i slingan? Ökar det med en konstant mängd, minskning med en faktor etc.?

    * operationer inuti slingan: Runtime för operationerna * inuti * slingan är viktig. Om du till exempel har en O (n) -operation inuti en slinga som går n gånger, är den övergripande komplexiteten o (n * n) =o (n^2).

    Hur man bestämmer runtime -komplexitet:

    1. Identifiera ingångsstorleken (n): Vad är den relevanta storleksparametern?

    2. Bestäm antalet iterationer: Hur många gånger körs slingan *i förhållande till `n` *? Detta är kärndelen.

    3. Överväg operationer i slingan: Om slingan innehåller komplexa operationer måste deras runtime -komplexitet tas med i. Den övergripande komplexiteten blir komplexiteten i sling -iterationerna multiplicerade med komplexiteten i den dyraste operationen i slingan.

    4. Uttryck komplexiteten: Använd stor o -notation (o (), ω (), θ ()) för att representera den övre gränsen, nedre gränsen eller snäva gränsen för runtime. Vanligtvis fokuserar vi på Big O (Worst-Case Scenario).

    Exempel:

    `` `python

    DEF Process_Array (ARR):

    n =len (arr)

    i =0

    Medan jag j =i + 1

    Medan j Om arr [i]> arr [j]:

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

    J +=1

    I +=1

    returnera

    `` `

    Analys:

    * `n` är längden på ingångsgruppen` arr`.

    * Den yttre slingan (`i ') körs` n` gånger.

    * Den inre slingan (`j`) går ungefär` n - jag '. I värsta fall, när "jag" är 0, kör det "n" -tider.

    * Swap -operationen inuti den inre slingan är O (1).

    Därför bidrar de kapslade slingorna till O (n^2) komplexitet. Bytet är konstant tid och påverkar inte den totala o (n^2) runtime. Denna algoritm liknar urvalssortering.

    Sammanfattningsvis, för att bestämma runtime -komplexiteten för en "medan" slinga, analysera försiktigt hur många gånger slingan kör relativt inmatningsstorleken och överväga komplexiteten i de operationer som utförs i slingan.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Lägga till protokollet till DateTime
    ·Hur du gör din egen Game Engine
    ·Hur skriver man ett program för att hitta den kinetisk…
    ·Vad är ett samtal i programmering och hur fungerar det…
    ·Hur man använder strängar som inmatning från tangent…
    ·Vilken betydande motivering finns det för operatorn - …
    ·Hur man använder Turbo C
    ·Hur man använder Set STL Container Class
    ·Hur konvertera C + + ASCII till UTF8
    ·Hur man använder HeapSize Funktion
    Utvalda artiklarna
    ·Vilken server används för att köra PHP i Windows?
    ·Hur man läser in ingångsvärde i Java
    ·Hur man skapar en funktion Temperatur Konvertering Med …
    ·Hur man installerar Vcvarsall.Bat
    ·Konvertera HashMap till Bean
    ·Vad är programmering av datorspråk?
    ·Hur man byter Spaces i DOS Delsträngar
    ·Hur köra ett skript fil i Java för att mata ut en XML…
    ·Ställa Focus till ASP.NET -kontroller
    ·Hur man startar en C -kod från kommandotolken
    Copyright © Dator Kunskap https://www.dator.xyz