Diskuze: Matematicke algoritmy, jsou opravdu treba?
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Nazývat sám sebe "dobrým programátorem" nebo jakkoliv jinak můžeš bez dalších omezení, to s programováním nemá nic společného
Rád bych v tomhle směru byl nezaujatý, ale, bohužel, jsem matematik, takže to tak moc nepůjde. Matematika rozvíjí schopnost abstraktního uvažování a je základem úspěchu, pokud chceš umět opravdu dobře programovat. Ať už se jedná o oblasti, kam se bez matematiky nedostaneš nebo o schopnost zhodnotit a dokázat vlastnosti programu, který tvoříš, nebo o uvažování mimo hranice jazyka, ve kterém programuješ.
Mohlo by se zdát, že u tvorby webů v PHP to moc nepoznáš, ale dokonce i SQL, se kterým jsi se nejspíš setkal, je založené na sigma-algebře a její znalosti jsou důležité pro tvorbu kvalitních dotazů a analýzu chování databáze.
Ohledně parsování algebraických výrazů, tohle spadá spíš pod oblast algoritmizace než matematiky. Shunting yard bych navíc zařadil mezi jednoduché algoritmy (což může být relativní, když ho vidíš poprvé) a matematiku k němu nepotřebuješ.
Pokud to řeknu hodně natvrdo, nedokázal jsi nastudovat algoritmus a aplikovat ho v praxi. Když použiju tuhle formulaci, asi budeš souhlasit, že takovou vlastnost bys od externisty sám vyžadoval? To je pohled z druhé strany. Nedávno jsem přijímal nového člověka a na pohovoru jsme si celou dobu povídali o myšlenkách, které se za algoritmy schovávají, k tomu je matematika nezbytná, ale je to jasná vstupenka do řady firem.
Dobra tedy, dejme tomu, ze bych tomu tedy rad nejaky cas venoval. Neznas nejake "uzitecne" portaly na tema matematiky ?
Respektive, jestli si myslis, ze je vubec mozne se to naucit sam Mne toto s tim algoritmem zarazilo na jedne veci, na vysledku toho testu to asi zas takovou roli nehraje, jelikoz zbyvajici otazky jsem mel dle jejich programatora zpracovany suprove. Ale, kdyz jsem tam musel napsat, ze proste po nekolika-hodinovem tryhardu prisel fail, jen protoze "ja a matika", tak jsem si pripadal jako blbec
Psal si, ze to s matematikou nema moc co delat ale ... ja v tom tu matiku
vidim. Toto je v popisu algoritmu: "pokud je o1 asociativní zleva a jeho
priorita je menší nebo stejná (≤) jako priorita o2, nebo o1 je asociativní
zprava a jeho priorita je nižší (<) než priorita operátoru o2, vyjmi
operátor o2 ze zásobníku a vlož ho do výstupní fronty, jinak ukonči
cyklus."
Ani si nedokazes predstavit, jak jsem se zapotil kdyz sem si precetl termin
"asociativni zleva". Ty se nadtim asi zasmejes, ale opravdu bych o sobe nerekl,
ze jsem programator k zahozeni a celkem me trapi, ze me zaskoci takova
hloupost.
Tak jsem si tu vylil srdicko a snad mi dokazes nejak konstruktivne navrhnout, jak postoupit v tom studiu matematiky kazdopadne, diky za rozsahlou odpoved!
Máš pravdu, zasměju se, protože také řeším programátorské problémy, sedím nad nimi i týdny a potím se úplně stejně jako ty.
Hranice matematiky jsou dost nejasné (právě proto, že je tak úžasně obecná a abstraktní), takže chápu, co se snažíš říct, ale ten algoritmus je opravdu spíš algoritmus než matematika. Tím pádem bych ti nedoporučil čistou matematiku, ale místo toho si kup knihu a studuj programování.
https://www.amazon.com/…X/ref=sr_1_2?…
https://www.amazon.com/…=pd_sim_14_3?…
https://www.amazon.com/…3/ref=sr_1_1?…
Knuth se považuje za otce moderní analýzy algoritmů a větší přehled
než jeho dílo nenajdeš.
Sedgewick má na kontě polovinu algoritmů, o kterých kdy uslyšíš, ať už
je vymyslel, vylepšil nebo dokázal.
Obě knihy jsou ale trochu těžší na čtení.
Cormen je praktičtější a přístupnější a jako jediný z autorů
nečeká, že studuješ postgraduál, ta je pro začátek asi nejlepší.
Já mám taky problémy s pravou a levou asociativitou... asi bych to dal, kdybych musel, ale kouzlo je v tom, že v případě "běžných" aritmetických výrazů ji řešit nepotřebuješ. Hlavní problém v tvém případě dělají priority operátorů, takže si v nejhorším prostě vyzkoušíš na nějakém jednodušším příkladu, která varianta je správně. Není to sice moc vědecký postup, ale v praxi občas funguje velmi dobře.
Plus je dobré trochu získat nadhled nad věcí. S-Y není jediný způsob, jak vyhodnocovat matematické výrazy, ač bude patřit mezi ty nejrychlejší. Tím chci říci, že pokud ti něco nejde, je dobré zkusit se na problém podívat z jiného úhlu pohledu, případně použít i jiný (klidně horší) algoritmus... důležité často je, aby ti první verze programu nějak fungovala a mohl jsi ji testovat – později algoritmy vyměníš. Chce to najít hranici, po které si řekneš, že je třeba se na problém podívat jinak.
Místo S-Y se dá postupovat třeba tak, že v každé iteraci najdeš operátor, který není v žádné závorce a má nejnižší prioritu a podle něj rozdělíš výraz na dva jednodušší. A takhle pokračuješ, dokud jej nerozbiješ na "atomy" (konstanty a operátory) a nevyhodnotíš. Jistě, časová složitost v zásadě kvadratická, ale pro začátek může stačit.
Pokud bys přežil setkání s Pascalem, tak by se ti mohla líbit knížka Algoritmy a programovací techniky od Pavla Topfera, která obsahuje popis základních algoritmů a datových struktur. Látkou pokrývá cca první ročník Programování na MFF UK, ale matematiky tam moc nenajdeš (možná je i primárně určená pro střední školy, nevím).
Zobrazeno 5 zpráv z 5.