Kaj je zapis Big-O?

Kaj je zapis Big-O?

Ste se kdaj vprašali, zakaj je program, ki ste ga napisali, trajal tako dolgo? Morda vas zanima, ali lahko svojo kodo naredite učinkovitejšo. Razumevanje načina izvajanja kode lahko vašo kodo pripelje na naslednjo raven. Zapis Big-O je priročno orodje za izračun, kako učinkovita je vaša koda.





Kaj je zapis Big-O?

Z zapisom Big-O lahko izračunate, kako dolgo bo trajalo izvajanje kode. Fizično lahko določite, koliko časa traja koda, vendar s to metodo težko ujamete majhne časovne razlike. Na primer, čas med izvajanjem 20 do 50 vrstic kode je zelo majhen. Vendar se lahko v velikem programu te neučinkovitosti povečajo.





da bo windows 7 videti kot xp

Zapis Big-O šteje, koliko korakov mora algoritem izvesti za oceno njegove učinkovitosti. Ta pristop k vaši kodi je lahko zelo učinkovit, če jo morate prilagoditi, da povečate učinkovitost. Zapis Big-O vam bo omogočil merjenje različnih algoritmov glede na število korakov, ki jih potrebuje za izvajanje, in objektivno primerjavo učinkovitosti algoritmov.





Kako izračunate zapis Big-O?

Razmislimo o dveh funkcijah, ki štejeta, koliko posameznih nogavic je v predalu. Vsaka funkcija vzame število parov nogavic in vrne število posameznih nogavic. Koda je napisana v Pythonu, vendar to ne vpliva na to, kako bi šteli število korakov.

Algoritem 1:



def sockCounter(numberOfPairs):
individualSocks = 0
for x in range(numberOfPairs):
individualSocks = individualSocks + 2
return individualSocks

Algoritem 2:

def sockCounter(numberOfPairs):
return numberOfPairs * 2

To je neumen primer, zato bi morali zlahka ugotoviti, kateri algoritem je učinkovitejši. Za vajo pa pojdimo skozi vsako.





POVEZANE: Kaj je funkcija pri programiranju?

Algoritem 1 ima več korakov:





  1. Spremenljivki individualSocks dodeli vrednost nič.
  2. Spremenljivki i dodeli vrednost ena.
  3. Primerja vrednost i s numberOfPairs.
  4. IndividualSocks doda dva.
  5. Povečano vrednost individualnih nogavic pripisuje sebi.
  6. Poveča i za eno.
  7. Nato se po korakih od 3 do 6 vrne nazaj tolikokrat kot (indiviualSocks - 1).

Število korakov, ki jih moramo opraviti za algoritem 1, lahko izrazimo kot:

4n + 2

Obstajajo štirje koraki, ki jih moramo opraviti n -krat. V tem primeru bi bilo n enako vrednosti numberOfPairs. Obstajata tudi dva koraka, ki ju enkrat opravite.

Za primerjavo, algoritem 2 ima samo en korak. Vrednost numberOfPairs se pomnoži z dvema. To bi izrazili kot:

1

Če še ni bilo očitno, lahko zdaj enostavno vidimo, da je algoritem 2 precej učinkovitejši.

Big-O analiza

Na splošno, če vas zanima zapis Big-O algoritma, vas bolj zanima splošna učinkovitost, manj pa natančna analiza števila korakov. Za poenostavitev zapisa lahko navedemo samo obseg učinkovitosti.

V zgornjih primerih bi bil algoritem 2 izražen kot en:

O(1)

Toda algoritem 1 bi bil poenostavljen:

O(n)

Ta hitri posnetek nam pove, kako je učinkovitost algoritma ena vezana na vrednost n. Večje kot je število, več korakov bo moral algoritem dokončati.

Linearna koda

Avtor slike: Nick Fledderus/ Projekt samostalnikov

Ker ne poznamo vrednosti n, je bolj koristno razmisliti, kako vrednost n vpliva na količino kode, ki jo je treba zagnati. V algoritmu 1 lahko rečemo, da je razmerje linearno. Če narišete število korakov v primerjavi z vrednostjo n, dobite ravno črto, ki se dvigne.

Kvadratna koda

Niso vsi odnosi tako preprosti kot linearni primer. Predstavljajte si, da imate 2D matriko in bi radi poiskali vrednost v matriki. Ustvarite lahko takšen algoritem:

def searchForValue(targetValue, arraySearched):
foundTarget = False
for x in arraySearched:
for y in x:
if(y == targetValue):
foundTarget = True
return foundTarget

V tem primeru je število korakov odvisno od števila nizov v arraySearched in števila vrednosti v vsakem nizu. Torej bi poenostavljeno število korakov n * n ali n².

netflix, trenutno imamo težave pri igranju tega naslova

Avtor slike: Nick Fledderus/ Projekt samostalnikov

To razmerje je kvadratno razmerje, kar pomeni, da število korakov v našem algoritmu eksponentno narašča z n. V zapisu Big-O bi to zapisali tako:

O(n²)

POVEZANE: Koristna orodja za preverjanje, čiščenje in optimizacijo datotek CSS

Logaritemska koda

Čeprav obstaja veliko drugih odnosov, je zadnji odnos, ki ga bomo pogledali, logaritmični. Za osvežitev pomnilnika je dnevnik števila eksponentna vrednost, ki je potrebna za dosego števila z osnovno vrednostjo. Na primer:

log 2 (8) = 3

Dnevnik je enak tri, ker če bi bila naša osnova 2, bi potrebovali eksponentno vrednost 3, da pridemo do številke 8.

Avtor slike: Nick Fledderus/ Projekt samostalnikov

Torej je odnos logaritmične funkcije nasprotje eksponentnega razmerja. Ker n narašča, je za zagon algoritma potrebno manj novih korakov.

Na prvi pogled se zdi to ne-intuitivno. Kako lahko koraki algoritma rastejo počasneje kot n? Dober primer tega so binarna iskanja. Razmislimo o algoritmu za iskanje števila v nizu edinstvenih vrednosti.

  • Začeli bomo z nizom za iskanje po vrstnem redu od najmanjšega do največjega.
  • Nato bomo preverili vrednost na sredini matrike.
  • Če je vaša številka večja, bomo pri iskanju izključili nižje številke, če pa je bila številka nižja, bomo izključili višje številke.
  • Zdaj bomo pogledali srednjo številko preostalih številk.
  • Ponovno bomo izključili polovico številk glede na to, ali je naša ciljna vrednost višja ali nižja od srednje vrednosti.
  • Ta postopek bomo nadaljevali, dokler ne najdemo cilja ali ugotovimo, da ga ni na seznamu.

Kot lahko vidite, ker binarna iskanja odstranijo polovico možnih vrednosti pri vsakem prehodu, ko se n poveča, je učinek na število preverjanj matrike komaj vplivan. Če želimo to izraziti v zapisu Big-O, bi zapisali:

O(log(n))

Pomen zapisa Big-O

Big-O nation vam omogoča hiter in enostaven način sporočanja, kako učinkovit je algoritem. Tako se lažje odločite med različnimi algoritmi. To je lahko še posebej koristno, če uporabljate algoritem iz knjižnice in ne veste nujno, kako izgleda koda.

kako ustvariti snapchat filter po meri

Ko se prvič naučite kodirati, začnete z linearnimi funkcijami. Kot lahko vidite na zgornjem grafu, boste prišli zelo daleč. Toda ko postanete bolj izkušeni in začnete graditi bolj zapleteno kodo, učinkovitost postaja problem. Razumevanje, kako količinsko opredeliti učinkovitost kode, vam bo dalo orodja, ki jih potrebujete, da jo začnete prilagajati za učinkovitost in pretehtati prednosti in slabosti algoritmov.

Deliti Deliti Cvrkutati E-naslov 10 najpogostejših napak pri programiranju in kodiranju

Napake pri kodiranju lahko povzročijo toliko težav. Ti nasveti vam bodo pomagali pri izogibanju programskim napakam in ohranili smiselnost vaše kode.

Preberite Naprej
Sorodne teme
  • Programiranje
  • Programiranje
O avtorju Jennifer Seaton(21 objavljenih člankov)

J. Seaton je znanstveni pisatelj, specializiran za razčlenjevanje kompleksnih tem. Je doktorica znanosti na Univerzi v Saskatchewanu; njena raziskava se je osredotočila na uporabo učenja na podlagi iger za povečanje vključenosti študentov na spletu. Ko ne dela, jo boste našli z branjem, igranjem video iger ali vrtnarjenjem.

Več od Jennifer Seaton

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti