| Vitajte na stránke krúžku programovania pre začiatočníkov na gymnáziu Jura Hronca v Bratislave |
|---|
| Novinky | Pascal | Úlohy | Prográmky | Algoritmy | Linky |
|
Na tomto mieste budú pribúdať realizované programy algoritmického charakteru
Prvá algoritmická vec, ktorú som vám predstavoval. Binárne vyhladavanie nám slúži napríklad na zistenie prítomnosti dákeho čísla v utriedenom poli v čase log n.
Vyfarbovanie mapy za účelom hľadania počtu ostrovou a ich označovania. K dispozícii sú aj nejaké vzorové mapy (mapa1, mapa2, mapa3, mapa4). Program je dobre okomentovaný a nie je vôbec zložitý. Je v ňom použitý algoritmus prehľadávania do hĺbky, ktorý ma časovú zložitosť lineárne závislú od veľkosti ostrova, v ľudskej reči je to Šíkra*Výška mapy (štandardné značenie N*M). Ďalšia realizácia prehľadávania do hĺbky. Na prácu týchto programov potrebujete bludiská, tie sú tu: bludisko1, bludisko2, bludisko3, bludisko4. V týchto bludiskách vieme riešiť nasledujúce úlohy - v prvom programe, ktorý je plnohodnotne okomentovaný, máme zisťovať existenciu cesty z našej počiatočnej pozície k pokladu (a tu je k dispozícii pedagogická verzia zobrazujúca pohyb a postup prehľadávania - najlepšie ozrejmí fungovanie programu). V našom druhom programe sme dostali za úlohu zistiť vzdialenosť medzi pokladom a nami, čo sme opäť realizovali pomocou prehľadávania do hĺbky - tu. Ešte treba podotknúť, že pokiaľ na prvú úlohu môžeme označiť náš algoritmus za optimálny, v tej druhej úlohe to neplatí, existuje oveľa lepší postup, ako to naprogramovať, pretože prehľadávanie do hĺbky robí veľa vecí zbytočne. Časom si tento postup samozrejme ukážeme, je o niečo zložitejší. Okrem iného sme sa bavili aj o triediacich algoritmoch a predstavili si možno najrýchlejší z nich (aspoň sa za taký v smrteľníckych kruhoch považuje) - Quicksort. Tu si ho môžete stiahnuť implementovaný. Treba samozrejme vedieť ako pracuje, to môžete dostatočne pedagogicky nájsť v tomto materiáli (posledné tri stránky), poprípade na tomto webe. Tu je zadanie úlohy so slovenskou dedinou a krčmou, ktorú sme robili v januári pred olympiádou. Vzorák nie je, ale môžete pozrieť sem na úlohu číslo 1 a potom sem, je to rovnaký, len v niečom zložitejší príklad. Naprogramovaný zásobník a fronta. Z grafových algoritmov: Prehľadávanie do hĺbky, keď si graf pamätáme v matici (N na druhú), a pre každý vrchol zoznam jeho okolia (N+M). Tu je aj verzia, ktorá vypisuje nájdenú cestu. Ďalej sme si spomínali, ako pracovať s disjunktnými množinami (to sú také, ktoré majú prázdny prienik). Na to nám slúži Union-Find, ktorý máte naprogramovaný tu a popísaný v materiáli nižšie. Venovali sme sa aj problému hľadania najkratšej cesty v neohodnotenom grafe, na čo je najvhodnejšie prehľadávanie do šírky, pracujúce v peknom čase N+M. Tu je verzia vypisujúca aj trasu, takže pozrite. Toto je asi najťažšia vec, ktorú sme robili alebo budeme robiť. Pokračovalo sa Dijkstrovým algoritmom, ktorý hľadá najkratšiu (najlacnejšiu) cestu v ohodnotenom grafe. Ukazovali sme si ho na programe pracujúcom s cestnou mapou Slovenska, stiahnute tu. A ešte samozrejme dáta, bez nich to nepôjde, sú k dispozícii tu. Dijkstrov algoritmus v obyčajnej implementácii dosahuje zložitosť N na druhú, sú ale aj iné implementácie, dočítate sa o nich napríklad na liahni. Na konci sme sa ešte dostali k princípu ťaháku, spomínal sa príklad menom Parlament a ako ho efektívne riešiť. To je obsiahnuté v tomto programe - mantinelová verzia/nemantinelová. Riešenie úlohy s depami zo záverečnej súťaže. Tu je link na materiál k teórii grafov. |
| Vytvoril Zemčo, garl(at)azet(dot)sk, ICQ# = 233685327 |