Atsisiųsti pateiktį
Pateiktis įkeliama. Prašome palaukti
1
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 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.
2
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 ∞ , 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
3
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 ∞ , 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
Panašios pateiktys
© 2025 SlidePlayer.lt Inc.
All rights reserved.