Google Code Jam Cheat sheet What language do you speak?

Slides:



Advertisements
Panašios pateiktys
Laisvės ir kalnų šauksmas
Advertisements

“Ieškosiu Tavo veido...” pagal Isabel Guerra.
Lakštingala, čiulbanti 100 metų
Gėlių horoskopas MOTERIMS
Juozas Aputis (g. 1936) – rašytojas, bandantis surankioti ir savaip sudėlioti pasaulio grožį ir neįžvelgiamą jo gelmę reiškiančius žodžius. Parengė Vilniaus.
ATRASK DIEVO PAŠAUKIMĄ
III klasių viktorina Paruošė G.Baublienė ir L.Venskutė
Pateikties kopija:

Google Code Jam Cheat sheet What language do you speak? Prieš rašydamas kodą, savęs paklausk: Ar pusiau optimalus sprendimas yra pakankamas? Ar užtenka tik pasinaudoti logiška intuicija? Ar gali išskaidyti problemą į smulkesnes? Ar gali suprogramuoti atsakymą nuo pačio pirmo atvejo kai N=1? Ar būtų lengviau, jei duomenys būtų surūšiuoti? Algoritmai ir sprendimų technikos, galinčios padėti Brute force / Backtracking’as. Grafas/Medis. „Skaldyk ir valdyk" / Binarinė paieška. Suprogramuoti atsakymą, kai atvejas N=1, tada kai N=2, tada kai N=3, o  tada bandyti, kai N=n. Dinaminis programavimas (smulkesnius duomenų subset'us išsaugoti atmintyje ir perpanaudoti). Trumpiausio kelio radimas (Dijkstra algoritmas). Jei algoritmas per lėtas, gal: Algoritmas lankosi tame pačiame grafo taške keletą kartų? Gali išsaugoti tarpinius rezultatus, kad nereikėtų jų skaičiuoti antrą kartą? Gali susisteminti naudingą informaciją, kuri bus panaudota pagrindiniame užduoties algoritme. Gali eliminuoti didelę dalį sprendinių iškart? Užstrigai? Perskaityk užduotį dar kartą, būk tikras, kad įsisavinai kiekvieną dalelę informacijos (taip pat ir limitus, problemos dydį ir kitų programuotojų sprendimo statistiką). Pabandyk išspręsti ranka ant popieriaus. Atidžiai peržvelk rezultatus ir ieškok pattern’o. Vistiek nieko? Pasilik 30-60 min. brute force algoritmui. Jei algoritmas per lėtas, gal: Perskaityk problemą dar kartą, būk tikras, kad nieko nepraleidai. Peržvelk statistiką: jei nedidelė dalis code jam’o dalyvių neišsprendžia užduoties ( > 10%), ieškok užslėptų pitfalls’ų. jei didelė dalis neišsprendžia (> 30%), pagalvok, ar verta imtis šios problemos.

Maksimalus problemos dydis pagal kompleksiškumą Net nebandyk implementuoti O(n!) sudėtingumo. Patikrink viską (input’us, output’us, tarpinius rezultatus), jei kas nors nesutampa, greitai surasi klaidą ir ištaisysi greičiau nei per 4 baudos minutes. Pasitikrink algoritmą su savo sugalvotais duomenimis: (nulis, neigiamas, corner case avejai…) Maksimalus problemos dydis pagal kompleksiškumą Kompleksiškumas 1 Log n n n log n 𝑛 2 𝑛 3 2 𝑛 n! N max ∞ 10 9 10 8 10 4 10 3 30 10 Duomenų tipų limitai Int Long BigInteger doubles decimal 2.10 9 9.10 18 ∞ 10 308 , 15 skaitmenų 10 28 , 28 skaitmenys Matematika Kvadratinė lygtis 𝑎𝑥 2 +𝑏𝑥+𝑐=0 = 𝑏 2 −4𝑎𝑐 𝑥= −𝑏±  2𝑎 Kombinatorika (eiliškumas ignoruojamas) 𝑎𝑥 2 +𝑏𝑥+𝑐=0 = 𝑏 2 −4𝑎𝑐 𝑥= −𝑏±  2𝑎 Kombinatorika (eiliškumas ignoruojamas) Elementai k tarp n Permuliacijų numeriai 𝐴 𝑛 𝑘 = 𝑛 𝑛−𝑘 ! 𝐴 𝑛 𝑛 =𝑛! Tikimybių teorija A ir B 𝑃 𝐴∩𝐵 =𝑃 𝐵 𝐴 .𝑃(𝐴) 𝐴 𝐵 = 𝑒 𝑖𝑛𝐴−𝐼𝑛𝐵 Nedarykite griežtų palyginimų. Priimkite nedidelės klaidos tikimybę. Pirminiai numeriai Function gcd (a, b) t := b b := a mod b a := t return a gcd (a, b) x lcm (a, b) = a x b Co-prime

Google Code Jam Cheat sheet What language do you speak? Maksimalus problemos dydis pagal kompleksiškumą Kompleksiškumas 1 Log n n n log n 𝑛 2 𝑛 3 2 𝑛 n! N max ∞ 10 9 10 8 10 4 10 3 30 10 Duomenų tipų limitai Int Long BigInteger doubles decimal 2.10 9 9.10 18 ∞ 10 308 , 15 skaitmenų 10 28 , 28 skaitmenys Matematika Kvadratinė lygtis 𝑎𝑥 2 +𝑏𝑥+𝑐=0 = 𝑏 2 −4𝑎𝑐 𝑥= −𝑏±  2𝑎 Kombinatorika (eiliškumas ignoruojamas) 𝐶 𝑛 𝑘 = 𝑛! 𝑘! 𝑛−𝑘 ! 𝐶 𝑛 2 = 𝑛 (𝑛−1) 2 ┌ 𝑛 𝑘 = 𝐶 𝑛+𝑘−1 𝑘 Permuliacijos (eiliškumas svarbus) Elementai k tarp n Permuliacijų numeriai 𝐴 𝑛 𝑘 = 𝑛 𝑛−𝑘 ! 𝐴 𝑛 𝑛 =𝑛! Tikimybių teorija A ir B 𝑃 𝐴∩𝐵 =𝑃 𝐵 𝐴 .𝑃(𝐴) 𝐴 𝐵 = 𝑒 𝑖𝑛𝐴−𝐼𝑛𝐵 Nedarykite griežtų palyginimų. Priimkite nedidelės klaidos tikimybę. Pirminiai numeriai Function gcd (a, b) t := b b := a mod b a := t return a gcd (a, b) x lcm (a, b) = a x b Co-prime