Шта је Биг-О нотација?

Шта је Биг-О нотација?

Јесте ли се икада запитали зашто је програму који сте написали требало толико дуго времена да се покрене? Можда бисте желели да знате можете ли свој код учинити ефикаснијим. Разумевање начина извођења кода може довести ваш код на виши ниво. Биг-О нотација је згодан алат за израчунавање ефикасности вашег кода.





Шта је Биг-О нотација?

Биг-О нотација вам даје начин да израчунате колико ће времена требати за покретање вашег кода. Можете физички одредити време потребно за покретање кода, али с том методом тешко је ухватити мале временске разлике. На пример, време потребно за покретање 20 до 50 редова кода је веома мало. Међутим, у великом програму те се неефикасности могу збрајати.





ар зоне апп шта је то

Биг-О нотација броји колико корака алгоритам мора да изврши да би проценио своју ефикасност. Приступ вашем коду на овај начин може бити врло ефикасан ако морате прилагодити свој код како бисте повећали ефикасност. Биг-О нотација ће вам омогућити да мерите различите алгоритме према броју корака који су им потребни за извођење и објективно упоредите ефикасност алгоритама.





Како израчунавате Биг-О нотацију

Размотримо две функције које броје колико појединачних чарапа има у фиоци. Свака функција узима број парова чарапа и враћа број појединачних чарапа. Код је написан на Питхону, али то не утиче на то како бисмо рачунали број корака.

Алгоритам 1:



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

Алгоритам 2:

def sockCounter(numberOfPairs):
return numberOfPairs * 2

Ово је блесав пример и требали бисте моћи лако да кажете који је алгоритам ефикаснији. Али ради вежбе, хајде да прођемо кроз сваку.





ПОВЕЗАН: Шта је функција у програмирању?

Алгоритам 1 има много корака:





  1. Променљивој индивидуалСоцкс додељује вредност нула.
  2. Променљивој и додељује вредност један.
  3. Он упоређује вредност и са нумберОфПаирс.
  4. Додаје два у индивидуалСоцкс.
  5. Повећану вредност индивидуалних чарапа додељује себи.
  6. Повећава и за један.
  7. Затим се враћа кроз кораке 3 до 6 исти број пута као (индивиуалСоцкс - 1).

Број корака које морамо да обавимо за алгоритам један може се изразити као:

4n + 2

Постоје четири корака које морамо довршити н пута. У овом случају, н би било једнако вредности нумберОфПаирс. Постоје и 2 корака која се завршавају једном.

За поређење, алгоритам 2 има само један корак. Вредност нумберОфПаирс множи се са два. То бисмо изразили као:

1

Ако то већ није било очигледно, сада можемо лако видети да је алгоритам 2 прилично ефикаснији.

Биг-О анализа

Генерално, када сте заинтересовани за Биг-О нотацију алгоритма, више вас занима укупна ефикасност, а мање за детаљну анализу броја корака. Да поједноставимо запис, можемо само навести величину ефикасности.

У горњим примерима, алгоритам 2 би се изразио као један:

O(1)

Али алгоритам 1 би био поједностављен на следећи начин:

O(n)

Овај брзи снимак говори нам како је ефикасност једног алгоритма везана за вредност н. Што је већи број, више корака ће алгоритам морати да доврши.

Линеарни код

Кредит за слику: Ницк Фледдерус/ Ноун Пројецт

Пошто не знамо вредност н, корисније је размислити о томе како вредност н утиче на количину кода који је потребно покренути. У алгоритму 1 можемо рећи да је однос линеаран. Ако исцртате број корака у односу на вредност н, добијате праву линију која се повећава.

Квадратни код

Нису сви односи тако једноставни као линеарни пример. Замислите да имате 2Д низ и желите да потражите вредност у низу. Можете креирати овакав алгоритам:

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

У овом примеру, број корака зависи од броја низа у арраиСеарцхед и броја вредности у сваком низу. Дакле, поједностављени број корака би био н * н или н².

за покретање система Виндовс 10 потребно је 10 минута

Кредит за слику: Ницк Фледдерус/ Ноун Пројецт

Овај однос је квадратни однос, што значи да број корака у нашем алгоритму расте експоненцијално са н. У запису Биг-О, написали бисте то као:

O(n²)

ПОВЕЗАН: Корисни алати за проверу, чишћење и оптимизацију ЦСС датотека

Логаритамски код

Иако постоје многи други односи, последњи однос који ћемо погледати су логаритамски односи. Да бисте освежили меморију, дневник броја је експонентна вредност потребна за достизање броја који има базу. На пример:

log 2 (8) = 3

Дневник је једнак три, јер да нам је база 2, потребна нам је експонентна вредност 3 да бисмо дошли до броја 8.

Кредит за слику: Ницк Фледдерус/ Ноун Пројецт

Дакле, однос логаритамске функције је супротан експоненцијалном односу. Како се н повећава, потребно је мање нових корака за покретање алгоритма.

На први поглед, ово делује контра-интуитивно. Како кораци алгоритма могу расти спорије од н? Добар пример за то су бинарне претраге. Хајде да размотримо алгоритам за тражење броја у низу јединствених вредности.

  • Почећемо са низом за претраживање по редоследу од најмањег до највећег.
  • Затим ћемо проверити вредност у средини низа.
  • Ако је ваш број већи, искључит ћемо ниже бројеве у нашој претрази, а ако је број био мањи, искључит ћемо веће бројеве.
  • Сада ћемо погледати средњи број преосталих бројева.
  • Поново ћемо искључити половину бројева на основу тога да ли је наша циљна вредност већа или нижа од средње вредности.
  • Наставићемо овај процес док не пронађемо циљ или утврдимо да га нема на листи.

Као што видите, будући да бинарне претраге елиминишу половину могућих вредности при сваком пролазу, како н постаје све већи, то једва утиче на утицај на то колико пута проверавамо низ. Да бисмо то изразили у Биг-О нотацији, написали бисмо:

O(log(n))

Важност Биг-О нотације

Биг-О натион вам даје брз и једноставан начин да саопштите колико је алгоритам ефикасан. Ово олакшава избор између различитих алгоритама. Ово може бити посебно корисно ако користите алгоритам из библиотеке и не знате нужно како код изгледа.

виндовс 10 како ући у биос

Када први пут научите да кодирате, почињете са линеарним функцијама. Као што видите из горњег графикона, то ће вас одвести далеко. Али како постајете искуснији и почнете да градите сложенији код, ефикасност почиње да постаје проблем. Разумевање како квантификовати ефикасност вашег кода даће вам алате који су вам потребни за почетак прилагођавања за ефикасност и одмеравање предности и недостатака алгоритама.

Објави Објави Твеет Емаил 10 најчешћих грешака у програмирању и кодирању

Грешке у кодирању могу довести до толико проблема. Ови савети ће вам помоћи да избегнете грешке у програмирању и да ваш код остане смислен.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Програмирање
О аутору Јеннифер Сеатон(Објављен 21 чланак)

Ј. Сеатон је научни писац који се специјализовао за разбијање сложених тема. Докторирала је на Универзитету Саскатцхеван; њено истраживање се фокусирало на коришћење учења заснованог на играма за повећање ангажовања ученика на мрежи. Кад не ради, затећи ћете је како чита, игра видео игрице или се бави вртларством.

Више од Јеннифер Сеатон

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили