HALLOWEEN JE TADY: Získej 66 % extra kreditů zdarma při nákupu od 1199 kreditů s promo kódem NEBOJSEIT66. Zjisti více:
NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:

Diskuze – Lekce 2 - Výpočet časové složitosti algoritmů

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:6.2.2019 17:22

Ahoj, pěkný článek, dopodrobna prochází tematiku, neznalým (i neznalým limit) myslím moc hezky osvětlí, jak to s časovou složitostí je.

Pár chybiček:

  • sekce c) - "ultrahlouLé prohledání"
  • sekce c) - v pseudokódu chybí jedno "KONEC BLOKU" a řádek výše je indentován o jednu úroveň méně, než by měl být
  • Poslední řádek před "Poznámka na závěr" - má být "ten asymptoticky "horší" algoritmus"
:)
Odpovědět
6.2.2019 17:22
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na krepsy3
Ondřej Michálek:8.2.2019 18:49

Opraveno, díky :)

Odpovědět
8.2.2019 18:49
Raduj se z bugu. Tedy z toho, ktery jsi uz nasel...
Avatar
asifa.hvshthvg:31.12.2019 10:28

Ahoj, v sekci b, malý chaos na závěr je věta

V praxi se ale samozřejmě může stát, že velmi špatně napsaný algoritmus s O(n) bude na daném stroji rychlejší, než ten s O(n2)

Nemělo by to být naopak?

V praxi se ale samozřejmě může stát, že velmi špatně napsaný algoritmus s O(n2) bude na daném stroji rychlejší, než ten s O(n)

 
Odpovědět
31.12.2019 10:28
Avatar
Odpovídá na asifa.hvshthvg
Ondřej Michálek:31.12.2019 10:59

Určitě mělo. Jinak se to běžně stává, že algoritmus v O(n), byť blbě napsaný, je rychlejší než ten s druhou mocninou. Opraveno, díky!

Odpovědět
31.12.2019 10:59
Raduj se z bugu. Tedy z toho, ktery jsi uz nasel...
Avatar
Martina MAKOVSKÁ:7.9.2023 10:28

Je škoda, že nejdou algoritmy vyzkoušet. Jink velmi pěkné.

 
Odpovědět
7.9.2023 10:28
Avatar
nrgpostsk
Člen
Avatar
nrgpostsk:8.10.2023 15:35

zase moje subjektivni hodnoceni. Moc omacky a malo vysvetleno. Pro matematika urcite skvele ale pro ostatni nejakou animaci ozivit a vysvetlit. ale i tak dekuju.

 
Odpovědět
8.10.2023 15:35
Avatar
Ivo Fořt
Člen
Avatar
Ivo Fořt:5.5.2024 10:21

Ahoj, vysvětlení naivního algoritmu mi připadá nejasné

"Kdybychom v poli narazili na větší prvek, než je doposud známé maximum,
spustili bychom celý cyklus znovu
"

Podle vašeho kódu se ale celý cyklus znovu nespustí, poze se zopakuje 2x iterace, ve které bylo nalezeno další maximum.

"Přiřazení max_value = numbers[i] se provede minimálně
0-krát, maximálně n-krát a provede se jen, pokud
je hodnota proměnné max_value větší než prvek. Příkaz
continue se provede minimálně 1-krát, maximálně
n-krát.
"

Příkaz continue se nachází ve stejném bloku jako přiřazení maximální hodnoty a provede se tudíž ve stejném počtu jako přiřazení, tzn. v nejlepším případě 0-krát, v nejhorším n-krát.

Jinak děkuji za lekci

Ivo

 
Odpovědět
5.5.2024 10:21
Avatar
Vítězslav
Člen
Avatar
Vítězslav:9. října 8:47

Ahoj,

Ať se dívám, jak se dívám, tak nikde žádnou složitost
1 + n * ( n + n + n + n + 0 ) + 1 + 1 = 4n2 + 3 = O(n2)
u algoritmu "Naivní prohledávání pole" nevidím. Pořád je to O(n).

Naopak algoritmus "Ultrahloupé prohledání pole" je podle mého názoru O(n2) a nikoliv O(n).
Mohl by se na to někdo kompetetní podívat a případě opravit?
Děkuji.

 
Odpovědět
9. října 8:47
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Vítězslav
DarkCoder:9. října 14:59

Naprosto správná úvaha.

Kód naivního algoritmu pro hledání maxima nedělá to co se očekává. Pouze zpomaluje tím, že při nalezení maxima se testovaný prvek otestuje 2x. Ale pořád se jedná o časovou složitost O(n). pouze s tím že každý prvek se v nejhorším případě (vzestupné pole) otestuje 2x.

Ultrahloupý algoritmus má také složitost O(n), avšak počet operací je n * 1000 001.

Kvadratická složitost O(n²) by nastala například tehdy, kdybychom při každém nalezení nového maxima:

znovu prošli celé pole od začátku

nebo

porovnávali každý prvek se všemi ostatními

Ale to se v tomto algoritmu neděje. continue jen zdržuje o jedno porovnání navíc, ne o celý nový průchod polem.

Editováno 9. října 15:01
Odpovědět
9. října 14:59
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.