Az algoritmusok és az adatszerkezet-készségek fejlesztése

Kép a Dynamo Primer-től.

A cikk egyes forrásai eredetileg az egyik megjegyzésemben jelentek meg egy reddit bejegyzésre vonatkozóan, amely meglehetősen népszerűvé vált. Itt van az eredeti szál, és az új felírásom az alábbiakban található.

alapjai

Az első dolog, amire szükséged van az algoritmusok és az adatszerkezetek jobb megismerésére, szilárd alap. Ez az alap többféle módon megtanulható, akár számítógépes tudományos program segítségével az egyetemen, néhány kódoló bootcamps egy kicsit az alábbi témákra összpontosít, vagy önmagában tanulhat könyveket, videókat vagy online előadásokat is. Tehát az induláshoz a következő témák alapvető ismereteire van szüksége:

Adatstruktúrák

Tudjon meg többet a tömbökről, a csatolt listákról, a bináris fákról, a kivonat-táblázatokról, a grafikonokról, a halmokról, a sorokról, a halmokról és az egyéb alapvető adatszerkezetekről.

Matematika és logika

Ha algoritmusokkal szeretne kitűnni, akkor ismernie kell néhány matematikai fogalmat több különböző területről. Ismerje meg a halmazelméletet, a véges állapotú gépeket, a reguláris kifejezéseket, a mátrix szorzást, a bitmennyiségű műveleteket, a lineáris egyenletek megoldását, a fontos kombinatorikus fogalmakat, például permutációkat, kombinációkat, a galamblyuk elvét.

Számítógép architektúra

Ismerje meg az adatok ábrázolását egy számítógépen, a digitális logikai tervezés alapjait, a logikai algebrát, a számítógépes aritmetikát, a lebegőpontos ábrázolást, a gyorsítótár kialakítását. Próbáljon meg egy kicsit megtanulni a C és az Assembly programozását.

Előrelépés az alapokon

Ha úgy érzi, hogy jól megértette a fent felsorolt ​​fogalmak többségét, itt az ideje, hogy belemerüljön az algoritmusokba. Itt található az erőforrások és a dolgok listája, amelyeket megtettem, hogy jobban megírjam és megértsem a fontos algoritmusokat.

Az algoritmus-tervezési kézikönyvből vett oldalak.

Big-O és Runtime

  • Tudja meg, mi a Big-O, és hogyan lehet elemezni az algoritmusok futási idejét. Ez egy klasszikus könyv a témáról (itt van a fejezet a funkciók növekedéséről).
  • Itt egy jó lista az online tanfolyamokról, amelyek algoritmusokat tanítanak.

Végezzen magad néhány algoritmust

Kezdje azzal, hogy önmagában végrehajtja számos fontos algoritmust, és megismerheti azok futási idejét. Néhány példa a következőkre:

  • Bináris keresés
  • Euclid algoritmusa
  • A mélység és a szélesség első kutatása
  • Dijkstra legrövidebb útja
  • Bináris fa átjárások
  • Beszúrás sorrendje, Mergesort, Quicksort
  • Min és max halom
  • További példák és listák.

Algoritmuskönyvek

  • Olvassa el az algoritmus-tervezési kézikönyvet. Nagyszerű könyv és a kedvencem.
  • Az algoritmusok bevezetése egy klasszikus könyv, amely sok anyagot fed le.
  • A programozási interjúk elemei sok kihívást és kódmegoldást tartalmaznak, amelyek segítenek felkészülni az interjúkra.

kihívások

  • Gyakorold az egyszerű, majd fejlettebb algoritmusok kódolását olyan webhelyeken, mint a Coderbyte és a HackerRank, amelyek magyarázatokat és megoldásokat kínálnak, így más kódolóktól is tanulhatnak.
  • Menjen át az interaktív python algoritmusok webhelyének kihívásaival.
  • A 10 legnépszerűbb kódolási kihívást jelentő webhely 2017-re.
  • Az öt legnehezebb kihívás a kezdők számára.

Algoritmusok magyarázata és interjúkérdések

  • Olvassa el annyi algoritmusmagyarázatot és kódpéldát, amennyit csak tudsz a GeeksforGeeks oldalán. Íme egy példa egy jó hozzászólásra a grafikon algoritmusokról.
  • Nézze meg néhány, a CareerCup-on feltett interjú kérdést, és próbálja meg megérteni, hogy a többi felhasználó hogyan oldotta meg a kérdéseket. Mint ez a példa.
  • A kódolási kihívásokkal teli webhelyek mellett próbálja meg megoldani az interneten talált általános kódolási interjúkérdéseket, például a listán szereplőket.

Dinamikus programozás

Ez egy nagyon fontos koncepció, amelyet meg kell értenie, ha jobban akarja tudni az algoritmusokat, ezért választottam el ezt a témát a többitől. A Wikipedia leírása: (a vastagítás az enyém):

Eljárás egy komplex probléma megoldására oly módon, hogy azt egyszerűbb részproblémák gyűjteményé bontja, az egyes részproblémákat csak egyszer oldja meg, és megoldásaikat tárolja. A következő alkalommal, amikor ugyanaz az alprobléma jelentkezik, ahelyett, hogy megoldását újra kiszámítja, egyszerűen megkeresi a korábban kiszámított megoldást, ezáltal megtakarítva a számítási időt.

Láttam, hogy a dinamikus programozás számos kódinterjún jelenik meg. Láttam olyan problémákat is, amelyek dinamikus programozási megoldást igényelnek olyan kihívásokkal teli webhelyeken, mint a LeetCode, a Google Code Jam, és a Google Foo Bar számos kihívása DP-megoldást igényelt.

Azt javaslom, hogy minél több problémát próbáljon megoldani a listán, amennyit csak tudsz. Van egy jó oktatóprogram a TopCoderről: Dinamikus programozás - kezdőtől fejlettig. Számos DP-probléma felépítése és mintázata megegyezik, tehát ha kb. 2 hétenként minden nap 3 DP-problémát old meg, egy idő után egy probléma nélkül észreveheti és megoldhatja a DP-problémákat.

Speciális források az algoritmusokban (opcionális)

  • Speciális adatszerkezetek Erik Demaine előadások
  • Algoritmikus alsó határok: Szórakozás keménység igazolásokkal, Erik Demaine
  • Versenyképes programozó kézikönyve
  • A Hitchhiker útmutatója a programozási versenyekhez
  • AlgoWiki: A versenyképes programozásra elkülönített wiki
  • Számítási geometriai problémák és algoritmusok (hűvös és szórakoztató, de meglehetősen nehéz lehet)
  • Az NP-teljes problémák listája
  • Nyílt adatstruktúrák könyv: szekvenciák, sorok, prioritási sorok, rendezetlen szótárak, rendezett szótárak és grafikonok adatszerkezeteinek megvalósítása és elemzése

Remélem, élvezte az erőforrások listáját. Nyugodtan gyakoroljon kódolást a Coderbyte-on, és kommentálhassa az alábbiakat bármilyen egyéb erőforrásról, amelyről úgy gondolja, hogy hasznos.