Big O Flashcards
Co je Big O (+jak změřit trvání algoritmu)?
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.
Vysvětli O(n) - typicky příklad, jak to je time?
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
Vysvětli O(1) a příklad, Jakej je to time?
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
Vyjmenuj čtyři pravidla pro počítání Big O
- Worst case
- Remove constants
- Different terms for inputs
- Drop Non Dominants
Rule 1 - worst case - vysvětli
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)
Rule 2 - remove constants - vysvětli
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.
Rule 3 - Different terms for input - vysvětli
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
Rule 4 - Drop Non Dominants
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
O(n^2) vysvětli
Loops který jsou nested- místo sčítání nasobim. Quadratic time
Data structures + algoritmy = programy
Dat structures - ways to Store data
Algoritmy - functions;ways tu use data structures to write our programs
O(n!) - vysvětli, Jakej time
“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.
3 pilíře pro dobrej kód ?
Readable
Memory - space complexity
Speed - time complexity
Většina řešení je trade of mezi space and time complexity
Space complexity - co vytváří space komplexity, příklad O(1) a O(n)
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