Big O Flashcards

1
Q

Co je Big O (+jak změřit trvání algoritmu)?

A

Big O asymptotic analysis. Big O mi říká, jak dobře je kód napsaný z pohledu škálovatelnosti (jak dlouho to trvá, než algoritmus proběhne v ohledu na počet inputu). Měření času pomoci performance.now() - let t0 na začátku a t1 na konci, time je t1-t0.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Vysvětli O(n) - typicky příklad, jak to je time?

A

O(n) - typicky u for loop, jak zvyšuju počet elementu (napr. Počet položek v loopovanym array), zvyšuje se lineárně i počet operaci. Big O záleží na počtu n (počet elements/inputs)

Linear time

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Vysvětli O(1) a příklad, Jakej je to time?

A

Napr. Když hledám jednu konkrétní položku v array podle indexu - zabere to vždy konstantní čas bez ohledu na počet elementu. O(3) - hledá 3 položky.

Konstant time

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Vyjmenuj čtyři pravidla pro počítání Big O

A
  1. Worst case
  2. Remove constants
  3. Different terms for inputs
  4. Drop Non Dominants
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Rule 1 - worst case - vysvětli

A

Vždycky bych měl myslet na worst case scenario - mám array o 10 položkách, muže být na kterékoli, musím počítat s tím, že i na posledni -> pokud loopuju přes array, bude to O(n), kde n je počet položek.

Tip bokem -> můžeš u loop použit break a skončí to po najiti konkrétní položky (pořad muže být až na posledni pozici)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Rule 2 - remove constants - vysvětli

A

Napr. O (3 +2n+n/3) je ve výsledku O(n). U Big O a škálovatelnosti přemýšlím o vysokých počtech inputu. Pokud mám array o milion položkách, jsou konstanty zanedbatelný (insignificant). O(2n) je more steep than 0(n) ale je to pořád z hlediska Big O linear time.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Rule 3 - Different terms for input - vysvětli

A

Když mas funkci s jednim parametrem a dvě for loops s tímto parametrem -> O(2n) cili O(n). Když má funkce dva parametry a mám dvě for loops a každá používá jinej O( a + b) - protože mám dva různý parametry, každej muže být jinak velkej

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Rule 4 - Drop Non Dominants

A

V úvahu beres jen tu dominantnejsi (pomalejší, min skalovatelnou) variantu. O( n^2 + 3n + 100 + 2/n) je O(n^2). Teoreticky kdyby bylo n 5, pak je dominantní hodnota 100, ale u Big O nás zajímá škálovatelnost a velký čísla, pokud je n 1000, bude to na druhou milion a konstanta 100 je najednou insignificant

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

O(n^2) vysvětli

A

Loops který jsou nested- místo sčítání nasobim. Quadratic time

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Data structures + algoritmy = programy

A

Dat structures - ways to Store data

Algoritmy - functions;ways tu use data structures to write our programs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

O(n!) - vysvětli, Jakej time

A

“Oh no”, když píšeš kód takhle, něco děláš špatně :) je to faktoriál time. Je to nejhorší, steepest, most expensive oné. Nedal příklad funkce. For loop pro každej element.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

3 pilíře pro dobrej kód ?

A

Readable
Memory - space complexity
Speed - time complexity

Většina řešení je trade of mezi space and time complexity

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Space complexity - co vytváří space komplexity, příklad O(1) a O(n)

A

Vytváří - adding variables, data structures, function calls, allocations.

Ve for loop mám jenom let i=0, space komplexity 1, když loopoju Db a přidávám položky do array On

How well did you know this?
1
Not at all
2
3
4
5
Perfectly