To není úzký výsek, to je něco, čemu se říká základy. Na nich je vybudováno to ostatní.
Ne, to nejsou základy, to je úzký výsek. Základy to nejsou v žádném případě, protože základy jsou část stavby, které je na stejné úrovni detailu, jako jiné části stavby (třeba střecha). Je to, jako kdybyste říkal, že základem stavby je písek, cement a voda. Jistě, jsou to suroviny pro výrobu betonu, ale stavba vzniká až z toho betonu – a stavitel potřebuje znát vlastnosti toho betonu, a jak se jich z toho písku, cementu, vody a dalších příměsí docílí, to je starostí někoho jiného.
Jinak mým oborem je průmyslová automatizace.
Děkuji za potvrzení.
O jejích specialitách a konkrétních technologiích, které člověk musí znát, aby se v tom oboru uplatnil, tu nepíšu nic.
Mýlíte se v tom, že tu o tom nepíšete nic. To, že píšete o programování jednočipů nebo oblasti, kde je v amatérské rovině třeba Arduino, přímo čiší z každého vašeho komentáře.
Ale znovu opakuji, že i když toho je obrovské množství (ne toho, co umím, ale toho, co se v této oblasti vyskytuje), není to nic, co by člověk, který zvládl základy, nepochopil.
Ano, ale ty základy jsou úplně jiné, než základy, které potřebuje znát někdo, kdo programuje GMail nebo Facebook.
A programátoři se nemusejí vyznat v základech programování, protože ... dnešní programování není založeno na algoritmech a datových strukturách? Tak jste to myslel?
Když chcete dokazovat, že základy programování jsou algoritmy a datové struktury, nemůžete to zároveň použít jako předpoklad. Programování je stále založeno na algoritmech a datových strukturách, akorát ty algoritmy a datové struktury jsou podstatně odlišné od algoritmů a datových struktur, se kterými pracuje třeba quicksort. Datové struktury jsou třeba relační databáze, sloupcová databáze, key-value store, dokumentová databáze, grafová databáze, nebo dokonce REST API, a řešíte například to, jak data ukládat na více uzlů a jak zajistit konzistenci dat v případě, kdy se síť uzlů rozpadne na dva nebo více izolovaných ostrovů. Pořád jsou to datové struktury, ale dost jiného typu, než třeba nějaký spojový seznam. A při řešení těchhle datových struktur vyšší úrovně se někde vespod v implementaci určitě najde i ten spojový seznam – ale jsou to dvě dost odlišné úrovně řešení, a ten, kdo chce používat tu horní úroveň, nemusí vědět vůbec nic o té úrovni spodní. Stejně jako stavař potřebuje vědět, jaké vlastnosti má mít beton, který chce použít, ale neumí takový beton namíchat – a naopak ten, kdo umí ten beton namíchat, neumí postavit železobetonovou budovu.
Já to tušil, hned jak jsem tu odpověď odeslal, že se najde někdo, kdo se bude šťourat v tomto. Děkuji za upozornění na tento Váš cenný postřeh - občas si tu připadám jako mezi frekventanty pomocné školy.
Tak proč takové hlouposti píšete? Samozřejmě, že se vždy řadí podle nějakého kritéria, tak nechápu, proč jste místo toho napsal, že se řadí vždy podle velikosti. Jednodušší to není, srozumitelnější to není – prostě jste akorát napsal hloupost.
Z vašich komentářů je vidět, že máte pocit, že jsou tady jen samí hlupáci – no, jak je vidět, neznamená to, že byste si mohl dovolit psát hlouposti, protože i ti hlupáci na ně přijdou.
přiřadí nějaké číselné hodnoty a dané body potom srovnáme podle velikostí těchto hodnot
No to jistě. Co je to „velikost hodnoty“? Kolik bitů v binárním zápise je potřeba k zápisu té hodnoty? Nebo kolik číslic v dekadickém zápisu? Když už máte něco převedené na číselné hodnoty, porovnává se to v drtivé většině případů podle těch hodnot, ne podle jakýchsi „velikostí“ hodnot. A mimochodem, při řazení se nemusí řadit jen podle číselných hodnot. Text máte sice také zakódovaný do čísel, třeba podle ASCII nebo UTF-8, ale když se text řadí, neřadí se podle těchto číselných hodnot. Třeba už jen proto, že v UTF-8 můžete zapsat texty ve spoustě různých jazyků, ale pravidla pro řazení v těch jazycích jsou různá. Takže třeba znak „c“ má v Unicode hodnotu 99 (dekadicky), znak „d“ má hodnotu 100, ale mezi ně se v češtině řadí znak „č“, který má v Unicode dekadickou hodnotu 269.
Jediný rozdíl vidím čistě jazykový - seřadit = postavit za (vedle) sebe do řady. Když řeknu žákům, aby se seřadili, rozhodně to nemusí znamenat, že se mají seřadit podle velikos... totiž, pardon, nějakého kritéria (věku, hmotnosti, hustoty ranní stolice, velikosti...), ale že mají stát v řadě za sebou (v jídelně) nebo vedle sebe (při nástupu). Žádné pravidlo, podle něhož má zrovna žák B stát za žákem A a před žákem C tu nepozoruji. Řazení nutně nevyžaduje přítomnost nějakého kritéria. Pokud však něco třídím, činím tak zásadně podle nějakého kritéria, což je i podstatou třídicích algoritmů.
Ano, seřadit znamená uspořádat do řady, tedy u každých dvou prvků dokážete říci, jak jsou uspořádané – zda je jeden z nich víc vepředu nebo víc vzadu, než jiný prvek. Tady když budou žáci seřazení, dokážete říct, že např. žák A stojí před žákem B, nebo naopak, že stojí za ním. Mohou být seřazení podle nějakého kritéria, ale klidně mohou být seřazeni i náhodně. I pokud řadíte v počítači, vždy říkáte, podle jakého kritéria se má řadit – a nebo že má být řazení náhodné.
Naproti tomu třídění znamená (jak překvapivé) rozdělování do tříd. Nebo-li do skupin, které mají nějakou společnou vlastnost. Žáky můžete třeba roztřídit na chlapce a dívky. Nebo je můžete roztřídit podle známky z nějakého předmětu na vysvědčení. Ale chybí tam to pořadí – když máte žáky roztříděné, nemáte nijak určeno, zda je žák A před žákem B nebo až za ním.
Takže aspoň nějaký pozitivní výsledek tato absurdní debata pro mě měla - ve výše uvedeném odstavci jsem si aspoň ujasnil, že pojem "třídicí" algoritmy vůbec nebyl zvolen náhodně a že je rozhodně výstižnější než "řadicí".
Spíš jste si měl ujasnit, že „třídit“ znamená rozdělovat do tříd. Třídící algoritmy se tomu někdy chybně říká proto, že některé algoritmy používají pro řazení právě třídění. Například quicksort. Quicksort funguje tak, že prvky roztřídí na ty, které jsou menší než pivot, a na ty, které jsou větší. A rekurzivně pak stejným způsobem roztřídí každou z těch dvou tříd. Když pak seřadí každou tu dvojici skupin (což je triviální, protože ty skupiny se rovnou na začátku třídění vytvářejí tak, aby byly v té dvojici seřazené), máte ve výsledku seřazené všechny jednoprvkové skupiny a tudíž i prvky. Jde tedy o řazení tříděním, nebo-li quicksort je zároveň řadící algoritmus i algoritmus třídící. Akorát my ho používáme pro tu funkci řazení, takže je lepší ho pojmenovávat jako řadící algoritmus.
Nepsal jste tu, že znalost quicksortu je úplný základ? Já teda za znalost quicksortu považuju právě to, že quicksort řadí podle daného kritéria tím způsobem, že na základě pivotu a řadícího kritéria prvky roztřídí do dvou skupin, skupiny seřadí a rekurzivně pak pokračuje seřazením každé skupiny.
Jo. Rozdíl mezi exponenciální a logaritmickou složitostí je podle některých "mikrooptimalizace".
Ano, často to může být mikrooptimalizace. A někdy to dokonce může být antioptimalizace, protože u té logaritmické složitosti můžete mít nějakou vysokou konstantu, takže nakonec zjistíte, že pro typický počet prvků je ten exponenciální algoritmus rychlejší.
pochopení HTTP opravdu není nic, co by nezvládl běžný elektrikář během jednoho sezení v hospodě u píva; to opravdu nepatří mezi znalosti, které by zaměstnavatel musel vyvažovat zlatem
To samé ovšem platí i o quicksortu. I když, no – ale teď už snad po výkladu výše chápete, kde je v tom quicksortu schované to třídění, nebo ne?