[python] Re: matematická olympiáda - P (programování)
Jan Kara
jack na atrey.karlin.mff.cuni.cz
Středa Říjen 27 18:23:01 CEST 2004
Ahoj,
p.kosina <gen2n na seznam.cz> wrote:
...
> Nicméně Python je skutečně pro výuku programování u začátečníků asi
> nejvhodnější, takže pro prosazení jeho do této soutěže je více než
> žádoucí pro všechny. Že bychom jim tam poslali nejlepší řešení z
> Pythonu, ať vidí eleganci v praxi.
Shodou okolnosti jsem jeden z tech, kteri tu olympiadu poradaji, tak
se pokusim vysvetlit nektere duvody, proc jsou veci tak, jak jsou.
Hlavnim cilem programatorske olympiady neni cvicit programovani v tom
ci onom programovacim jazyce. Jejim cilem je naucit studenty
algoritmizaci - trochu tezko se popisuje, co to presne je, ale v
podstate jde o to, ze kdyz clovek dostane problem, tak je schopen
navrhnout jeho reseni pomoci nejake "mechanicke procedury" (v praxi
rozumej programovaciho jazyka). Kvalita reseni se v tomto pripade meri
predevsim jeho casovou a pametovou slozitosti (coz je nejaka abstraktni
predstava, jak merit rychlost a spotrebu pameti bez zavislosti na
pouzitem pocitaci nebo jazyku). Samozrejme elegance reseni se take
pocita, ale je az druhorada. Dalsi veci je, ze v reseni olympiady je
hlavni slovni popis algoritmu, kde se vysvetli myslenky (a melo by z nej
byt jasnem, jakou bude mit algoritmus slozitost a tak) a samotny
zdrojovy kod slouzi jen pro ujasneni nekterych detailu. Tim se dostavame
k volbe programovaciho jazyka. Jednou vyhodou Pascalu, C, C++ je to, ze ho
vsichni opravovatele znaji. Druhou, a tu povazuji za tu hlavni, je to, ze
tyto jazyky neposkytuji prilis "pokrocilych" konstrukci (coz je prave
to, proc ty bys Python chtel pouzivat ;) - pokusim se vysvetlit proc:
Kdyz jazyk poskytuje jako beznou operaci "najdi v retezci regularni vyraz",
tak studenta obvykle nenapadne, ze ackoliv se to zapisuje stejne jako treba
scitani, tak je za tou operaci radove vice prace (tedy ze treba tato
operace zvetsi casovou slozitost). Navic to, jak konkretne jednotlive
slozitejsi operace ovlivni casovou slozitost, dost zavisi na konkretni
implementaci v kompilatoru/interpretru a to skutecne nemame sanci
zkoumat...
Tak to jsem se docela rozepsal, ale snad jsem trochu osvetlil nase
pohnutky.
> Asi by nebylo fér použít nejrůznější moduly, kde se konkrétní zadání
> řeší, spíš jen standardní nástroje. Již něco mám hotovo. Třeba úloha
> Fylogenetika je pravděpodobně v Pascalu problém, protože v Pythonu je to
> triviální záležitost, že se divím, že to tam vůbec dávají.
Ono v Pythonu je to asi snadne napsat, ale nejsem si uz tak jisty,
jestli casova slozitost programu, co mas v Pythonu bude tak dobra, jak
slozitost programu v Pascalu.
Honza
PS: Tuhle konferenci nectu, takze pripadne dotazy/pripominky smerujte
primo na muj mail.
Další informace o konferenci Python