Rubriker markerade med en asterisk ( * ) kommer från kursplan version VT 2026
Innehåll och lärandemål
Kursinnehåll
Grundläggande algoritmer och datastrukturer: En systematisk genomgång av begreppen abstrakta datatyper, stackar, köer, listor, träd, sökning, sortering och rekursion. Hashning, prioritetsköer, sökträd och problemträd, enkel syntaxanalys och reguljära uttryck.
Algoritmanalys med avseende på både effektivitet och korrekthet. Korrekthetsbevis.
använda abstraktion som ett verktyg för att förenkla programmeringen
designa och dokumentera programpaket som andra programmerare kan använda
analysera och jämföra algoritmer med avseende på tids- och minnesåtgång
avgöra korrekthet för iterativa och rekursiva algoritmer
beskriva och implementera grundläggande algoritmer och datastrukturer t.ex. djupet först och bredden först-sökning, binärsökning, sorteringsalgoritmer, binära träd, grafer, hashtabeller, länkade listor
välja eller konstruera lämplig algoritm och datastruktur för att lösa ett givet problem
konstruera och använda reguljära uttryck och enkel BNF-syntax
i syfte att
bli bra på att lösa problem med programmering
kunna använda datalogiska metoder i tillämpningsprojekt
få tillräckliga förkunskaper för att kunna läsa fortsättningskurser i datalogi.
Läraktiviteter
I kursen finns sex typer av aktiviteter varav fyra utgörs av schemalagda tillfällen:
Föreläsningar Tvåtimmarssessioner i helklass med genomgångar, frågor och uppgifter att lösa.
Workshop Tretimmarspass första veckan där vi löser större delen av första hemuppgiften. Enda tillfället att lösa uppgifter tillsammans i kursen! Vi har både några övningssalar och en datorsal. Ta med egen dator om du har.
Övningar Obligatoriska tvåtimmarspass i fasta grupper där veckans hemuppgifter kamtartgranskas, presenteras muntligen för och diskuteras med kurskamrater. Förberedelser för nästa hemuppgift.
Hemuppgifter Skriftliga individuella inlämningsuppgifter som presenteras på övningarna. Dessa utgör kursens examination. Den sista uppgiften är ett lite större projekt med avvikande betygsättning jämfört med de tidigare uppgifterna.
Laborationer Schemalagda tvåtimmarspass då det finns möjlighet att få hjälp med hemuppgifterna av kursens lärare. Dessa tillfällen är inte till för redovisning av hemuppgifter utom ifall det på förhand gjorts upp med respektive lärare.
Avslutande quiz i Canvas Moment med deadline 1/6 som sammanfattar kursen. Obligatorisk och ingår i momentet HEM1, men är inte betygsatt.
Labbar och individuell hjälp
Labbarna är till för att ni ska kunna ställa frågor om veckans inlämningsuppgift. Sker på plats i övningssalar om inte assistenterna säger annat. Ställ dig i grudat-kön.
EECSs allmänhandledare hjälper också till med programmeringsfrågor och andra problem två gånger dagligen varje vardag under terminstid, oftast 11–13 och 17–20.
Förberedelser inför kursstart
Rekommenderade förkunskaper
Motsvarande DD1331 Grundläggande programmering och SF1672 Linjär algebra.
Särskilda förberedelser
Kursen använder Canvas för gruppindelning, kommunikation och betygsrapportering. Preliminär lista över föreläsningarnas ämnen med tillhörande förberedelser publiceras och uppdateras i Canvas.
Hemuppgifterna länkas också från Canvas, men de ligger i ett repository på GitHub och lämnas in i era respektive repositories via KTHs GitHub.
Övning x på kursen ska lämnas in i katalogen username-ovnx i organisationen grudat26 på KTH GitHub. Användaren nisse hittar alltså sin katalog för övning 1 på adressen
gits-15.sys.kth.se/grudat26/nisse-ovn1
Om ni loggar in på KTH GitHub för första gången så kan det ta någon dag innan ni kommer åt era kataloger.
Övningsgrupper
Övningsgrupperna är benämnda A-C och D-G i schemat. Den grupp som har den första bokstaven på varje pass har den första övningssalen och gruppen med sista bokstaven den sista övningssalen. Vi tillämpar fasta grupper så att vi inte behöver göra legitimationskontroller på alla varje gång, men en vikarie eller en assistent med dåligt ansiktsminne kan behöva kolla legitmation vid vilket övningstillfälle som helst. Grupp C är egentligen två grupper, en i sal och en på zoom.
Titta i schemat om ni har några preferenser. I Canvas finns möjlighet att skriva upp sig på en övningsgrupp (om den inte är full)
Kurslitteratur
Det finns ingen obligatorisk kursbok på papper. Du hittar all kurslitteratur via länkarna ifrån föreläsningarna. Du kan också ha nytta av de här sajterna och böckerna om du vill lära dig mer om algoritmer och programvaruteknik.
HEM1 - Individuella hemuppgifter, 4,0 hp, betygsskala: A, B, C, D, E, FX, F
PRO1 - Individuellt projekt, 2,0 hp, betygsskala: P, F
Examinator beslutar, baserat på rekommendation från KTH:s handläggare av stöd till studenter med funktionsnedsättning, om eventuell anpassad examination för studenter med dokumenterad, varaktig funktionsnedsättning.
Examinator får medge annan examinationsform vid omexamination av enstaka studenter.
När kurs inte längre ges har student möjlighet att examineras under ytterligare två läsår.
Avsnittet nedan kommer inte från kursplanen:
För att intyga att kursens regler följts måste studenten klara kursens quiz om hederskodex och användning av generativ AI. Momentet HEM1 examineras med individuella skriftliga inlämningsuppgifter som redovisas muntligt i samband med de obligatoriska övningarna. Varje hemuppgift består av ett antal obligatoriska problem för betyget E. Dessutom finns sex valfria uppgifter som vardera kan ge 10 högrebetygspoäng om de lämnas in i tid, redovisas muntligt och bedöms vara godkända. Ifall något signifikant behöver kompletteras på dessa uppgifter ges ett tillfälle till komplettering, och i dessa fall kan uppgiften bara ge 5 högrebetygspoäng vilket motsvarar att kunna lösa uppgiften med viss ledning.
Antal godkända obligatoriska hemuppgifter
Antal högrebetygspoäng från valfria uppgifter
A
6
50
B
6
40
C
6
30
D
6
20
E
6
Fx
5
F
0-4
Övriga krav för slutbetyg
Det är obligatoriskt att närvara vid de övningar då uppgifter ska redovisas.
Målrelaterade betygskriterier/bedömningskriterier
Genomgående bedöms kursens högrebetygsuppgifter i relation till studentens förmåga att självständigt lösa dessa, och lösningar som korrigeras för att bli korrekta enligt lärares påpekanden bedöms som att studenten kan lösa de aktuella uppgifterna med viss ledning.
Mål
E
D
C
B
A
1. systematiskt testa program för att upptäcka fel
För ett givet API, med ledning, konstruera tester som visar om ingående metoder gör det de förväntas göra.
För ett givet API, och med viss ledning, konstruera tester som visar om de ingående metoderna gör vad de förväntas göra.
För ett givet API, avgöra vad som behöver testas och självständigt konstruera tester som visar att de ingående metoderna gör rätt utan oönskade bieffekter samt vad som händer om de används fel.
2. använda abstraktion som ett verktyg för att förenkla programmeringen
Implementera publika funktioner och metoder för en abstrakt datastruktur. Jämföra abstrakta datastrukturer med varandra med avseende på användningsmöjligheter eller använda abstrakta datastrukturer i algoritmer för att lösa problem.
3. designa och dokumentera programpaket som andra programmerare kan använda
Designa ett användbart API för andra programmerare. Dokumentera API:ets alla publika funktioner och klasser utan att överkommentera. För kod som publiceras välja licens. Ange något problem med att ändra i ett API som används av någon.
4. analysera och jämföra algoritmer med avseende på tids- och minnesåtgång
Med ledning analysera tidskomplexitet för enkla rekursiva eller iterativa algoritmer.
Med viss ledning analysera tidskomplexitet för relativt enkla rekursiva och iterativa algoritmer.
Självständigt analysera tidskomplexitet för relativt enkla rekursiva och iterativa algoritmer samt ange om det rör sig om t.ex. värstafalls-, probabilistisk värstafalls- eller amorterad komplexitet.
5. avgöra korrekthet för algoritmer
Beskriva några metoder för att avgöra korrekthet för iterativa och rekursiva algoritmer. Med tydlig ledning skriva induktionsbevis för enkla rekursiva algoritmer.
Med viss ledning skriva invarianter eller induktionsbevis för enkla algoritmer.
Självständigt skriva invarianter eller induktionsbevis för enkla algoritmer eller avgöra om ett korrekthetsbevis som bygger på en invariant är komplett och korrekt.
6. Beskriva och implementera grundläggande algoritmer och datastrukturer
Beskriva egenskaper och användningsmöjligheter för vanliga datastrukturer. Beskriva egenskaper och idé för vanliga algoritmer för t.ex. sökning, sortering eller graftraversering. Med ledning implementera vanliga datastrukturer och algoritmer.
Med viss ledning implementera mer komplexa datastrukturer och algoritmer.
Självständigt implementera mer komplexa datastrukturer och algoritmer.
7. Välja eller konstruera lämplig algoritm och använda datastrukturer för att lösa ett givet problem
Bland några alternativ välja en lämplig algoritm, eller enligt instruktioner skriva algoritm av en viss typ och/eller använda en given datastruktur, för att lösa ett givet (enkelt) problem.
Med viss ledning modellera enkla problem med datastrukturer och använda eller anpassa algoritmer för att lösa lite mer komplexa problem.
Självständigt modellera enkla problem och använda eller anpassa algoritmer för att lösa lite mer komplexa problem.
8. konstruera och använda reguljära uttryck och enkel BNF-syntax
Tolka enkel BNF-syntax (avgöra om givna strängar följer syntaxen eller inte). Skriva ett enkelt reguljärt uttryck samt avgöra vad som matchas av enkla reguljära uttryck
Med viss ledning skriva egen BNF-syntax eller algoritmiskt avgöra om givna strängar följer syntaxen.
Självständigt skriva BNF-syntax för problem eller algoritmiskt avgöra om text är syntaktiskt korrekt givet en BNF-syntax.
Kriterierna på A-nivå gäller i tillägg till kriterierna på C- och E-nivå. Det tillkommer oftast inte något nytt innehåll på högre nivåer utan de nivåerna avser att hantera mer komplexa uppgifter (där algoritmer och datastrukturer behöver jämföras, modifieras och kombineras). För högre betyg gäller alltså att studenten har klarat alla mål för E och behärskar vissa eller alla moment även på högre betygsnivå.
Möjlighet till komplettering
En enstaka övning som kommer att missas kan redovisas vid annan tidpunkt enligt överenskommelse med gruppens lärare. Detta ska göras upp i förväg med läraren för gruppen. Om detta inte görs blir hemuppgiften och eventuella valfria uppgifter inte godkända.
Ifall den skriftliga eller muntliga redovisningen har genomförts med mindre brister kan dessa kompletteras enligt lärarens anvisningar för att uppnå godkänt betyg. Om bristerna är större, eller vid komplettering om bristerna inte bedöms ha förbättrats av kompletteringen, kommer uppgiften inte att bli godkänd. Då hänvisas till ersättningsuppgift under omtentaperioden.
Möjlighet till plussning
Det erbjuds inte möjlighet till plussning.
Möjlighet till ersättningsuppgifter
Inga ersättningsuppgifter ges normalt för de valfria uppgifterna för högre betyg. För de obligatoriska uppgifterna kan ersättningsuppgifter delas ut i omtentaperioden (april för hemuppgift 1-2 och juni för hemuppgift 3-6) till studenter som misslyckats med komplettering eller missat deadline eller redovisning.
På försök kommer omexamination i form av ett frivilligt, övervakat programmeringsprov med svårare uppgifter att erbjudas, i en miljö som kan ha vissa begränsingar jämfört med din vanliga dator, där uppgifterna automaträttas. Att klara det provet kommer i år att vara en alternativ metod för högre betyg, men det går inte att få "nästan rätt" eller delpoäng på detta prov.
Resultatrapportering
Kommentarer till den skriftliga inlämningen ges via GitHub issues och resultaten efter rättning och presentation kommer att rapporteras i Canvas.
Etiskt förhållningssätt
Vid grupparbete har alla i gruppen ansvar för gruppens arbete.
Vid examination ska varje student ärligt redovisa hjälp som erhållits och källor som använts.
Vid muntlig examination ska varje student kunna redogöra för hela uppgiften och hela lösningen.
Avsnittet nedan kommer inte från kursplanen:
Att hjälpa studiekamrater som kört fast i en uppgift är positivt och lärorikt för både den student som får och den som ger hjälp, men man ska inte visa upp hela sin lösning eller dela sina lösningar publikt. (Det går inte att "ose" något man har sett.) Ni får heller inte lösa uppgifterna tillsammans och sen skriva ner varsin lösning individuellt om inte annat anges i uppgiften.
Generativ AI får inte användas till att lösa uppgifter, generera eller felsöka kod eller generera text eller strategier, om inte annat sägs i den enskilda uppgiften. Detta motsvarar att lämna in någon annans arbete som sitt eget.
Ovanstående gäller kursens alla uppgifter och är en sammanfattning av hederskodex för datalogikurser vid EECS-skolan, som tillämpas på kursen.
För att något betyg ska rapporteras på kursen behöver studenten ha klarat quizzet om hederskodex och AI-användning i kursen. Detta motsvarar försättsbladet vid skriftlig tentamen.
Identitetskontroll
Vid varje övningstillfälle ska du vara beredd att visa legitmation.
Ytterligare information
Ändringar inför denna kursomgång
Eftersom tidigare betygstabell tillät att ett mål missas, och fler uppgifter inte är ett alternativ, kommer kravet för betyg E att vara att alla grunduppgifter är godkända efter kompletteringar för att följa KTHs regelverk.
Schemat ska justeras så att det upplevs luftigare i början.
Högrebetygsuppgifterna är ett stressmoment pga att det endast ges en chans på varje uppgift att få full poäng. På försök planeras en omexamination för högre betyg att genomföras som ett övervakat digitalt programmeringsprov i en miljö med vissa begränsningar. Detta prov automaträttas. Provet blir frivilligt och kommer eventuellt att ges i Flemingsberg där en lämplig digital provmiljö finns, dock är språkstödet för Python i denna miljö på en mycket gammal version.
Automaträttningssystemet Kattis kommer att introduceras med mer stöttning.