Komplett pensumoversikt for algoritmer og datastrukturer ved UiO — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.
IN2010 Algoritmer og datastrukturer har én skriftlig eksamen i desember: 4 timer i Inspera, uten hjelpemidler. Neste eksamen er 11. desember 2026 kl. 09.00. Guiden er bygd på de 8 IN2010-settene H2018–H2025 og sensorveiledningene til dem. Alle tall under er målt deloppgave for deloppgave. Prosentene er andel av de publiserte poengene i snitt over settene: sant/usant-delen i H2023–H2025 er ikke publisert og kan ikke fordeles på tema.
Fire temaer er med i alle 8 settene: grafalgoritmer (20,5 % av de publiserte poengene i snitt), sortering og binærsøk (13,0 %), binære søketrær (11,2 %) og hashing (9,7 %). Heaper og korteste vei er med i 7 av 8. Så følger sammenheng i grafer (SCC og separasjonsnoder), minimale spenntrær og Huffman-koding i 5 av 8, NP og AVL/rød-svart i 4 av 8. Hashing står i oppgaveteksten i 7 av 8 sett og er verktøyet i sensorens løsning i det åttende. Kjøretid er ikke et eget felt på eksamen. Du må oppgi den etter nesten hver algoritme du skriver.
Dynamisk programmering, nettverksflyt, strengmatching, union-find og Floyd–Warshall har 0 treff i alle 16 IN2010-filene (oppgavesett og sensorveiledninger). De er ikke med i guiden.
Hver seksjon starter med «Slik testes dette på eksamen» og har gjennomregnede eksempler i eksamensform. Alle tall i eksemplene er kontrollregnet med et program. Grafseksjonene øver også på det som skiller de nyeste settene fra de eldre: en lang historie der hver deloppgave skal kobles til riktig algoritme.
Grafalgoritmer er med i 8 av 8 IN2010-sett og er det største temaet (20,5 % av de publiserte poengene i snitt): modeller historien som graf, og løs den med BFS, DFS, komponenter, syklusdeteksjon eller (modifisert) topologisk sortering i lineær tid.
En graf har noder og kanter. Den kan være rettet eller urettet, vektet eller uvektet. Nesten alle grafoppgaver i IN2010 er en «historie» der du selv må se hvilken kjent algoritme som løser den: BFS, DFS, komponenter, syklusdeteksjon eller topologisk sortering.
Slik testes dette på eksamen. Grafalgoritmer er med i 8 av 8 IN2010-sett (H2018–H2025) og er det største temaet: 20,5 % av de publiserte poengene i snitt, 22,1 % i de fire nyeste. Traversering og sammenheng står i 7 av 8 sett med 54 poeng til sammen, der svaret er pseudokode (Java i H2018). Modellering som graf (hva er noder og kanter, rettet eller urettet) kom i 4 av 8 sett. Syklusdeteksjon kom i H2023 og H2025 (16 p), modifisert topologisk sortering i H2018 og H2021 (24 p), avkrysning av grafegenskaper i H2020 og H2022 (19 p) og komponenter i H2021 og H2022 (13 p).
En urettet graf har kantene A–B, A–C, B–D, C–D, C–E, D–F, E–F, F–G og G–H. Naboene besøkes i alfabetisk rekkefølge. Kjør BFS og DFS fra A, og finn hvem som ligger innen ledd fra A.

| Tatt ut av køen | Nye noder (avstand) | Kø etterpå |
|---|---|---|
| A | B = 1, C = 1 | B, C |
| B | D = 2 | C, D |
| C | E = 2 | D, E |
| D | F = 3 | E, F |
| E | – | F |
| F | G = 4 | G |
| G | H = 5 | H |
Svar: BFS: A, B, C, D, E, F, G, H. DFS: A, B, D, C, E, F, G, H. Innen 2 ledd: B, C, D og E.
Skriv en prosedyre som avgjør om en urettet graf har en sykel, og oppgi kjøretiden.
Procedure HarSykel(G)
besøkt ← tom mengde
for s in V do
if s ∉ besøkt then
if DFSSykel(G, s, null, besøkt) then
return true
return false
Procedure DFSSykel(G, u, p, besøkt)
legg u til besøkt
for (u, v) in E do
if v = p then
continue // kanten vi kom fra
if v ∈ besøkt then
return true
if DFSSykel(G, v, u, besøkt) then
return true
return false
besøkt én gang, og hver kant ses høyst to ganger.Svar: HarSykel over, med kjøretid .
En topologisk ordning av en DAG lister før for hver kant . Kahns algoritme: legg alle noder med inngrad 0 i en beholder, ta ut én om gangen, skriv den ut og senk inngraden til naboene; den som når 0, legges inn. Kjøretid . Beholderen kan være stakk, kø eller heap. Med en min-heap ordnet etter en nøkkel (tidsstempel, navn) får du den ordningen som tar minste nøkkel først uten å bryte kantene, i . Det var løsningen i H2021 13.
En rettet graf har nodene P, Q, R, S, T og U og kantene P→Q, P→R, Q→S, R→S, S→T, T→U og R→U. (a) Gi en algoritme i lineær tid som avgjør om grafen har nøyaktig én topologisk rekkefølge. (b) Kjør den på grafen. (c) Hvilken ene kant kan legges til slik at rekkefølgen blir entydig?

Procedure EntydigTopologisk(G)
for v in V do
inn[v] ← inngraden til v
Q ← kø med alle v der inn[v] = 0
entydig ← true
antall ← 0
while Q ikke er tom do
if |Q| > 1 then
entydig ← false
u ← dequeue(Q)
antall ← antall + 1
for (u, v) in E do
inn[v] ← inn[v] − 1
if inn[v] = 0 then
enqueue(Q, v)
if antall < |V| then
return "sykel: ingen topologisk rekkefølge"
return entydig
| Uttak | Køen før uttaket | Merknad |
|---|---|---|
| 1 | P | én kandidat |
| 2 | Q, R | to kandidater: ikke entydig |
| 3 | R | |
| 4 | S | |
| 5 | T | |
| 6 | U |
Svar: Rekkefølgen er ikke entydig (Q og R kan byttes). Kanten Q→R (eller R→Q) gjør den entydig. Kjøretid .
Nøkkelformler
Vanlige feil
Eksamenstips
Laster...