NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Matematicke algoritmy, jsou opravdu treba?

Aktivity
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:21.11.2016 21:49

Cus, zrovna jsem se uchazel o jednu z pozic na externiho PHP developera a zaskocila me jedna z testovacich uloh, kterou jsem bohuzel nezvladl kvuli mym opravdu laickym znalostem matematiky, coz me vede k otazce.

Je vlastne treba umet matematiku, abych se nejak mohl "nazyvat" dobrym programatorem ?

Zadani bylo vytvorit algoritmus v PHP, ktery vypocte jednoduchy artimeticky vyraz jako je tento:
6 * ((26 / 2) + -3) - 20

Snazil jsem se o implementaci algoritmu shunting yard, ale kvuli tomu, ze jsem vlastne nepochopil tu "matematickou cast" popisu, jsem toho nebyl schopen.

Myslite, ze ma cenu se vubec "ucenim" matematiky a algoritmu zabyvat a k necemu mi to vubec bude krome pripadu, kdy dostanu (coz se mi stalo poprve) neco takoveho na testu ? Osobne mi to totiz vzhledem k casove narocnosti uceni prijde zanedbatelne.

 
Odpovědět
21.11.2016 21:49
Avatar
coells
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
coells:21.11.2016 22:19

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.

 
Nahoru Odpovědět
21.11.2016 22:19
Avatar
Jan Bezdíček
Tvůrce
Avatar
Odpovídá na coells
Jan Bezdíček:21.11.2016 22:41

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 :D 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 :D

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!

 
Nahoru Odpovědět
21.11.2016 22:41
Avatar
coells
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
coells:21.11.2016 23:04

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ší.

 
Nahoru Odpovědět
21.11.2016 23:04
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Martin Dráb:22.11.2016 1:13

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).

Nahoru Odpovědět
22.11.2016 1:13
2 + 2 = 5 for extremely large values of 2
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 5 zpráv z 5.