Michael0x2a/cse-143-16au-study-guide.md

Hogyan tanuljunk

A programozás nagyrészt az alkalmazott problémamegoldásról szól, és nem a memorizálásról.Ez azt jelenti, hogy a programozási vizsgákra való felkészülés legjobb módja nem az, hogy leülsz és elolvasod a diákat, hanem az, hogy sok problémát megoldasz.

Az alábbiakat javaslom a felkészülés során:

  1. Próbálj meg mostantól kezdve naponta legalább 3-4 programozási feladatot megoldani.

    A vizsgáig még körülbelül 12 nap van hátra. Ha naponta 4 feladatot oldasz meg, akkor a vizsgáig kb. 30-50 feladatot oldasz meg, ami NAGY előnyhöz juttat azokkal szemben, akik az utolsó pillanatban tanulnak. Ha nagyon sűrű az időbeosztásod, legalább napi 1 feladatot próbálj meg megoldani.

    Ez részben azért van, mert sokkal több tapasztalatod lesz a feladatok megoldásában, mint azoknak, akik az utolsó pillanatban magolnak, részben pedig azért, mert néha csak újra felhasználjuk a gyakorlati feladatokat a vizsgán. Ha 30-50 megoldott probléma van a tarsolyodban, sokkal nagyobb az esélye annak, hogy a vizsgán találkozol egy újdonsággal…

    Íly módon arra is lesz időd, hogy kérdezz, ha olyan problémába ütközöl, ami megakaszt téged.

    Próbálj beütemezni egy 1 órás blokkot minden nap a naptáradba, amikor csak leülsz, és átdolgozod a problémákat. (A 8. feladatot is kezdje el korán, hogy biztosan legyen elég ideje mind a tanulásra, mind a feladatok elvégzésére.)

  2. Közösítsen egy napot, amikor leül, és egy csomó feladatot dolgoz fel egy rejtélyes témakörből.

    Meg kell próbálnia addig a pontig gyakorolni, hogy a rejtélyes feladatokat megbízhatóan és 100%-os pontossággal tudja megoldani. Lehet, hogy eredményesebb, ha csak leülsz egy nap, és egyszerre egy csomót dolgozol át, hogy gyakorolhass. (Például ezen a hétvégén próbálj meg egy csomó polimorfizmusos feladatot megoldani)

  3. Próbáld meg a gyakorló feladatokat egyszerre megoldani. Ne “szerkessz és fordítsd újra”.

    A döntőn nem lesz fordítóprogram, amivel ellenőrizheted a munkádat. Tegyél meg mindent, hogy elsőre megoldd a feladatokat. Használjon ceruzát és papírt, hogy átgondolja a problémákat, mielőtt megnyomja a “beküldés” gombot.

    Ha nem sikerül elsőre megbízhatóan megoldania a gyakorló feladatokat, az azt jelenti, hogy sokkal több gyakorlásra van szüksége.

    (Ez azt jelenti, hogy kezdetben elsősorban arra koncentráljon, hogy a feladatokat elsőre megoldja.Ha már viszonylag otthonosan mozog egy témában, helyezze előtérbe a feladatok elsőre történő megoldását).

  4. Vezess egy futó listát a “javítanivalókról”.

    Ha hibázol, figyelmen kívül hagysz valamit, vagy észreveszed, hogy zavarban vagy, írd le.A hibák futó listája segít eligazodni abban, hogy milyen problématípusokkal van gondod, és mit kell többet tanulnod.

    Például előfordulhat, hogy néha azért rontod el a gyakorlat-it problémákat, mert elfelejtesz hozzáadni egy kivételellenőrzést. Ez azt jelezheti, hogy a záróvizsgán különösen óvatosnak kell lenned az utasítások elolvasásakor.

    Vagy azt tapasztalhatod, hogy nehézségeid vannak a kapcsolt listás feladatokkal, ahol két kapcsolt listát kell feldolgoznod. Ez egy olyan dolog lehet, amiben érdemes lenne segítséget kérni a tanársegédtől.

  5. A produktív küzdelem jó, a nem produktív küzdelem rossz.

    Az normális, hogy küszködsz, amikor a feladatokon dolgozol. Törekedj azonban a “produktív “küzdelemre, ne a “nem produktív” küzdelemre. Ha egy problémán dolgozol, és úgy érzed, hogy folyamatosan haladsz (még ha lassan is), akkor az “produktív” küzdelem.

    Ha azonban elakadtál, és véletlenszerű változtatásokhoz folyamodtál, hogy lássuk, működnek-e, az “nem produktív” küzdelem. Ha elérte a “nem produktív” szakaszt, akkor tegye félre a problémát, tartson szünetet, próbáljon meg egy másik problémán dolgozni, próbáljon meg segítséget kérni valakitől, stb….

Gyűjtési feladatok

Bináris fa átjárási és beszúrási feladatok

Itt talál néhány gyakorló feladatot: http://practiceit.cs.washington.edu/problem/search?keyword=tree+traversals

Az 5. feladat az összes gyakorlati vizsgán is tartalmazza ezeket a feladattípusokat.

A vizsgán próbálj meg max. ~5 percet tölteni egyenként ezekkel a feladatokkal (tehát összesen ~10 percet)`00%-os pontossággal.

Gyűjtemények rejtélye

A gyakorlat-it-en csak két, térképekkel kapcsolatos gyűjtemények rejtélye feladatot találtam:

  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final8/collectionMystery
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final7/collectionMystery

Ezzel a témával kapcsolatban javaslom, hogy győződj meg arról, hogy pontosan hogyan viselkednek az alábbi adatstruktúrák, mennyire hatékonyak a különböző módszereik, és miben különböznek egymástól:

  • ArrayList
  • LinkedList
  • Stack
  • Queue
  • TreeSet
  • HashSet
  • .

  • TreeMap
  • HashMap

Polymorfizmus rejtély

Itt találsz néhány gyakorló feladatot: http://practiceit.cs.washington.edu/problem/search?keyword=polymorphism&language=

Ezekre a feladatokra a döntőn időt kell szánnod, hogy biztosan ne kövess el buta hibát.

Amikor ezeken a feladatokon dolgozol, győződj meg róla, hogy szilárd fogalmi megértésed van arról, hogy miről van szó. A szakaszon kiosztott puskalap nagyon hasznos lehet.

Programozási feladatok

A bináris fa és a kapcsolt listás kérdéseknél a kérdéseket nagyjából nehézség szerint rendeztem.Erősen ajánlom, hogy először a közepes és nehéz kérdések megoldását helyezd előtérbe, és csak akkor próbáld meg a könnyű és nehéz kérdéseket, ha a nehezebbekkel nehézségeid vannak.

Disclaimer: A nehézségeket úgy értékeltem, hogy mintegy szemrevételeztem a problémákat. Lehet, hogy kihagytam bizonyos kérdéseknél olyan eltéréseket, amelyek könnyebbé vagy nehezebbé teszik őket, mint eredetileg gondoltam.

Összehasonlítható programozás

Ez a feladat megköveteli a teljes osztály implementálását: http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final8/Office

A következő feladatokban csak a compareTo metódust kell implementálnod. Azt javaslom, hogy mindenképpen próbáld megírni a teljes osztályt, mivel valószínűleg ezt fogják kérni tőled a döntőn.

Megjegyzés: a gyakorlatban van még néhány feladat ebben a témában, de én kézzel választottam ki azokat, amelyek egy kicsit bonyolultabbnak tűntek. Néhány Comparable probléma a practice-it-en azt kéri, hogy a Comparable implementálása mellett bővítsd ki az osztályt — ezt nem kell megtenned ebben a negyedévben a döntőben.

  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm1/BankAccount
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm3/Food
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm4/MovieRating
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm5/Pokemon
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/comparable/Location
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm2/Rational

Binary Tree Programming (traversal)

Note: Gyakorlatban több probléma van, de kézzel válogattam ki néhányat, ami jónak tűnt/kényesnek tűnt. A gyakorlati érettségi is tartalmaz néhány jó kérdést, bár lesz némi átfedés a practice-it-vel. Amint fentebb említettük, a nehezebb feladatokon való munkának prioritást kell élveznie.

Egyszerűtől a közepesig:

  • http://practiceit.cs.washington.edu/problem/view/bjp3/chapter17/e18%2DinOrderList
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/countLeaves
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/height
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/isFull
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/printLevel

közepestől a nehézig:

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/depthSum
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/numEmpty
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/printLeaves
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/evenBranches
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final2/countMultiples
  • http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e9%2Dequals

Bináris fa programozás (módosítás)

Az előzőekhez hasonló — gyakorlatban több probléma van, Érdekeseket választottam, a gyakorlati vizsgák jó kérdéseket tartalmaznak némi átfedéssel, a kihívást jelentő problémákon való munkát helyezd előtérbe.

Ezért a témáért feltétlenül szükséges, hogy jól értsd ax = change(x) mintát. A stílus útmutatóban van néhány megjegyzés a x = change(x)-ről (többnyire felsorol egy csomó dolgot, amit nem szabad csinálni/van néhány példa), ami hasznos lehet.

Disclaimer: a “közepes” és “nehéz” kérdések közötti különbségtétel itt számomra kissé elmosódott, így idk, ha ezek valóban helyesen vannak rendezve.

Easy to medium:

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/removeLeaves
  • http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e20%2DmakePerfect
    • Ez a feladat egy “magasság” módszert ad. A “magasság” metódus megírását itt kell megpróbálnod magadnak megírni: http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/height
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final5/flip
  • http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e17%2DcombineWith
  • http://practiceit.cs.washington.edu/problem/view/bjp3/chapter17/e19%2DevenLevels

közepesen nehéz:

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/tighten
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/completeToLevel
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/construct
  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/limitPathSum
  • http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e15%2Dtrim
  • http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final6/removeMatchingLeaves

Kapcsolódó lista programozás

Az előzőekhez hasonló.

Azt is, ha egy összekapcsolt listás problémán dolgozva azon kapod magad, hogy “Jé, bárcsak használhatnék egy segédhalmazt”, az gyakran annak a jele, hogy az összekapcsolt listás probléma könnyebb lenne, ha megpróbálnád rekurzívan megoldani.

Mikor rekurzívan oldasz meg egy problémát, “tárolhatsz” változókat és információkat minden szinten/paklikereten — ez alapvetően egy implicit segédpaklit ad.

Az (implicit) verem megléte azonban nem feltétlenül lesz hasznos minden linkelt listás problémánál,ezért ne próbáld meg erőltetni a rekurziót olyan helyekre, ahol nem tűnik természetesnek.

Azt ne feledd, hogy kellő erőfeszítéssel a ciklusokat használó kódot rekurziót használó kóddal helyettesítheted, ésfordítva. (A kérdés az, hogy valóban jó ötlet-e ezt tenni…)

Egyszerűtől a közepesig:

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/min

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/lastIndexOf

    Próbáld meg ezt rekurzívan csinálni!

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/countDuplicates

    Figyelj arra, hogy kihasználd, hogyan van a lista rendezve

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/transferFrom

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/equals

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/doubleList

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/switchPairs

közepesen nehéz:

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/split

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeRange

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/reverse

    Próbáld meg ezt rekurzívan és iteratívan is!

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/takeSmallerFrom

  • http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeAll

Leave a Reply