8.3 Øvingseksamen 2 — håndkjørings- og hashing-tungt sett
Komplett sett med tyngdepunkt på håndkjøring (sjanger E) og hashing/søk, men fortsatt full tredeling.
Dette er det andre av tre komplette øvingssett, og det har et bevisst
tyngdepunkt: håndkjøring og hashing. Alle oppgavene er nyskrevet for denne
boka.
Tyngdepunktet er ikke tilfeldig. Hashing med lineær probing har dukket opp i
7 av 7 av settene boka bygger på, og det testes både som håndkjøring på
Del 1 og som pseudokode på Del 2. Håndkjøring av en datastruktur — min-heap,
hashtabell, AVL-tre, Huffman-tre — er den sjangeren som er sikrest av alle:
minst én kommer i hvert eneste sett, ofte to. Kommer du fra et pensum der
hashing er et faktapunkt, undervurderer du den systematisk her. Her er den en
utførelsesferdighet.
Formen: digital skoleeksamen i Inspera, som er UiOs digitale eksamenssystem,
fire timer, ingen hjelpemidler, karakter A til F, teller 100 prosent.
Settet har 83 poeng:
| Del | Innhold | Poeng | Anbefalt tid |
|---|---|---|---|
| Oppvarming | to korte definisjonsspørsmål | 2 | 5 min |
| Del 1 | sant/usant, kode til O, fire håndkjøringer, to matriser | 35 | 90 min |
| Del 2 | fem pseudokode- og resonnementsoppgaver | 46 | 125 min |
Legg merke til at de anbefalte tidene summerer til 5 + 90 + 125 = 220 minutter, ikke 240.
De tjue som er til overs, er bevisst buffer: å lese gjennom hele settet før
du begynner, å komme tilbake til en oppgave du hoppet over, og å lese gjennom
svarene til slutt. Bruker du dem opp på den første oppgaven som setter seg fast,
har du ingen igjen til den siste.
Om håndkjøringene: sensor ber om sluttilstanden, ikke om mellomregningen.
Men gjør mellomregningen på kladd likevel — det er der feilene fanges. Formatet
er fast: heapen leveres som hele arrayet med indeks fra 0, hashtabellen som
hele tabellen med _ for tomme plasser, AVL-treet som antall enkle
rotasjoner pluss rotverdi, og Huffman som kodelengde per symbol.
Antigjettings-skaleringen står i oppgave 1. Blankt og feil teller likt, så
svar på alt — men skaleringen er satt slik at ren gjetting i snitt gir null.
Sett klokka på fire timer og legg bort boka. Løsningsforslagene ligger i lukkede
bokser under oppgavene.
Forkunnskaper
| Oppgave | Tema | Kapittel |
|---|---|---|
| 1 | hashing-, sorterings-, tre- og Huffman-fakta | kap. 1.4, kap. 3.2 |
| 2 | kjøretid fra kode | kap. 1.2, kap. 1.3 |
| 3 | min-heap, Insert og RemoveMin | kap. 4.4, kap. 4.5 |
| 4 | lineær probing med lik nøkkel og wraparound | kap. 3.1, kap. 3.3 |
| 5 | AVL-rotasjoner | kap. 4.3 |
| 6 | Huffman-koding | kap. 6.4 |
| 7 | stabilitet, in-place og kjøretider | kap. 2.1, kap. 2.2, kap. 2.4 |
| 8 | korteste vei og kjøretid per grafalgoritme | kap. 6.2, kap. 6.5 |
| 9 | hash-set som Del 2-verktøy | kap. 3.2, kap. 3.4 |
| 10 | binærsøk og modifikasjonen av det | kap. 3.4 |
| 11 | søk med beskjæring i et binært søketre | kap. 4.1, kap. 4.2 |
| 12 | komponenter og traversering | kap. 5.2, kap. 5.3 |
| 13 | drøft to strategier | kap. 7.2, kap. 2.3 |
Strategien bak Del 2-svarene er drillet i kap. 8.1, og
kap. 8.2 er det brede settet du bør ha tatt først.
Oppvarming (2 poeng)
Oppgave 0. Svar med høyst fire setninger på hvert punkt.
a) Hva er en algoritme?
b) Hva er en datastruktur?
Del 1 — auto-rettet (35 poeng)
---
Oppgave 1 (10 poeng). Sant eller usant?
Antigjettings-skalering: blokken har 10 påstander, og poengsummen regnes som
, der er antall riktige.
a) I en hashtabell med lukket hashing og lineær probing skal en nøkkel som allerede ligger i tabellen, overskrives i stedet for å settes inn en gang til.
b) Etter en rehashing til dobbelt så stor tabell kan de gamle indeksene gjenbrukes direkte.
c) Load-faktoren er antall lagrede elementer delt på tabellstørrelsen.
d) Et oppslag i en hashtabell er i verste tilfelle.
e) Tellesortering kan brukes på hvilke som helst elementer, så lenge de kan sammenlignes.
f) Radix-sortering krever at delsorteringen på hvert siffer er stabil.
g) Haugsortering er stabil.
h) Ethvert AVL-tre kan fargelegges slik at det oppfyller kravene til et rød-svart-tre.
i) En dobbeltrotasjon i et AVL-tre telles som to enkle rotasjoner.
j) I et Huffman-tre får aldri et hyppigere symbol en lengre kode enn et sjeldnere symbol.
I tillegg:
k) Du er sikker på seks av påstandene og gjetter på de fire siste. Hvor mange
poeng kan du forvente?
---
Oppgave 2 (4 poeng). Oppgi kjøretiden.
Svar med det strammeste -uttrykket. To poeng per delspørsmål.
a)
Procedure Q1(A)
Input: array A med n tall, indeks fra 0
Output: en telling
n = A.length
c = 0
for i = 0 to n-1:
j = 1
while j < n:
j = j * 3
c = c + 1
return cb)
Procedure Q2(A)
Input: array A med n tall, indeks fra 0
Output: en telling
n = A.length
c = 0
for i = 0 to n*n - 1:
j = n
while j > 1:
j = j / 2
c = c + 1
return c---
Oppgave 3 (4 poeng). Håndkjøring av min-heap.
Sett inn 23, 8, 41, 15, 6, 19 og 3 i denne rekkefølgen i en tom min-heap
(array, indeks fra 0).
a) Oppgi arrayet etter innsettingene.
b) Utfør RemoveMin to ganger. Oppgi arrayet etter hver av dem.
---
Oppgave 4 (3 poeng). Håndkjøring av lineær probing.
En hashtabell har plasser og , med lineær probing.
Sett inn 34, 45, 23, 34, 10 og 21 i denne rekkefølgen.
a) Oppgi hele tabellen, med _ for tomme plasser.
b) Hvor mange nøkler ligger i tabellen til slutt?
c) Hvilken innsetting brukte wraparound?
---
Oppgave 5 (3 poeng). Håndkjøring av AVL-tre.
Sett inn 9, 18, 27, 36, 45 og 22 i denne rekkefølgen i et tomt AVL-tre.
a) Hvor mange enkle rotasjoner utføres totalt?
b) Hva er rotverdien til slutt?
c) Er resultatet et gyldig AVL-tre?
---
Oppgave 6 (3 poeng). Huffman-koding.
Seks symboler har frekvensene 21, 13, 8, 5, 3 og 2.
a) Oppgi kodelengden til hvert symbol.
b) Hvor mange bits trengs for å kode hele teksten?
c) Hvor mange bits ville en fastlengdekode med like mange bits per symbol
brukt på den samme teksten?
---
Oppgave 7 (4 poeng). Sorteringsegenskaper.
Fyll inn tabellen. Ett poeng per rad.
| Algoritme | Stabil? | På stedet? | Verste kjøretid |
|---|---|---|---|
| innsettingssortering | ? | ? | ? |
| utvalgssortering | ? | ? | ? |
| flettesortering | ? | ? | ? |
| kvikksortering | ? | ? | ? |
---
Oppgave 8 (4 poeng). Grafalgoritmer: valg og kjøretid.
a) For hver situasjon: hvilken algoritme finner korteste vei fra én kilde
raskest?
1. Et t-banenett der alle strekninger regnes som like lange.
2. Et veinett med kjøretider i minutter, alle positive.
3. En rettet asyklisk graf av arbeidsprosesser med varighet på hver kant.
b) Oppgi kjøretiden for hver av disse fire, med binær prioritetskø der det er
relevant:
1. dybde-først-søk over hele grafen
2. Kahns topologiske sortering
3. Prims algoritme
4. Bellman-Fords algoritme
Del 2 — pseudokode og resonnement (46 poeng)
Navngi problemet, oppgi antagelser om representasjon, gi algoritmen, og oppgi
kjøretiden med (eller og ) definert. Pseudokode og klar tekst gir
like mye uttelling.
---
Oppgave 9 (10 poeng). En avisredaksjon vil finne det første ordet som
gjentas i en artikkel — altså det ordet som først forekommer for andre gang
når du leser teksten fra begynnelsen. Teksten er gitt som et array T med
ord i den rekkefølgen de står.
a) Skriv algoritmen. Oppgi antagelser og kjøretid.
b) En kandidat foreslår å sortere ordene og se etter to like ved siden av
hverandre. Hvorfor løser ikke det oppgaven?
c) Sett opp poengtrappen for oppgaven.
---
Oppgave 10 (8 poeng). Et sortert array A inneholder måleverdier, og
samme verdi kan forekomme flere ganger. Du skal finne den laveste indeksen
der verdien står, eller melde at ikke finnes.
a) Skriv algoritmen, og si eksplisitt hva du har endret i forhold til
binærsøket slik det står i pensum.
b) Oppgi kjøretiden.
c) Kjør algoritmen for hånd påA = 4, 4, 9, 12, 12, 12, 17, 21, 21, 30 med . Vis lav, hoy ogmidt for hvert steg.
---
Oppgave 11 (10 poeng). Et lagersystem lagrer varenumre i et binært søketre.
Når en kunde spør etter et varenummer som ikke finnes, skal systemet foreslå det
nærmeste varenummeret i treet — altså det tallet med minst absolutt
differanse fra det etterspurte.
a) Skriv algoritmen. Oppgi antagelser og kjøretid.
b) En kandidat foreslår å traversere hele treet og holde det beste tallet
underveis. Hva er kjøretiden for det, og hvor mye mindre uttelling gir det?
c) Treet er bygget ved å sette inn 55, 28, 74, 13, 39, 66, 88, 21, 33 og 47.
Hvilke noder besøker algoritmen din når kunden spør etter 42, og hva foreslår
den?
---
Oppgave 12 (10 poeng). Et driftsmiljø har tretten servere. Nettverkskablene
mellom dem er gitt som en urettet graf:
A: B, C
B: A, C
C: A, B
D: E, G
E: D, F
F: E, G
G: D, F
H: I
I: H
J: K, L
K: J, L
L: J, K, M
M: LDriftsavdelingen vil vite hvor stor den største sammenhengende gruppen av
servere er, altså hvor mange servere som henger sammen i den største klyngen.
a) Skriv algoritmen. Oppgi antagelser og kjøretid.
b) En kandidat foreslår å kjøre et bredde-først-søk fra hver server og se
hvilken som når flest. Hva er kjøretiden for det?
c) Kjør algoritmen på grafen over. Hvor mange grupper finnes, og hvor stor
er den største?
---
Oppgave 13 (8 poeng). To ord er anagram hvis det ene kan skrives om til
det andre ved å stokke om bokstavene. Ordene består av små bokstaver fra a tilz.
Sammenlign to strategier for å avgjøre om to ord av lengde er anagram:
a) sortér begge ordene og sammenlign dem tegn for tegn
b) tell forekomsten av hver bokstav i begge ordene og sammenlign tellingene
Drøft kjøretid (verste og forventet) og minne, og konkludér om når hver
strategi lønner seg. Definér .
Under ligger løsningsforslag med poengfordeling — én lukket boks per oppgave.
De er skrevet for denne boka, ikke hentet fra noe reelt sett og ikke fra noen
studentbesvarelse.
Etter den siste boksen ligger en ærlig merket midtnivåbesvarelse, en
poengoversikt og en selvdiagnose-liste.
Poengoversikt og selvdiagnose
| Del | Oppgave | Poeng |
|---|---|---|
| Oppvarming | 0 | 2 |
| Del 1 | 1 sant/usant (skalert) | 10 |
| Del 1 | 2 kjøretid fra kode | 4 |
| Del 1 | 3 min-heap | 4 |
| Del 1 | 4 lineær probing | 3 |
| Del 1 | 5 AVL-rotasjoner | 3 |
| Del 1 | 6 Huffman | 3 |
| Del 1 | 7 sorteringsegenskaper | 4 |
| Del 1 | 8 grafalgoritmer | 4 |
| Del 2 | 9 første gjentatte ord | 10 |
| Del 2 | 10 første forekomst med binærsøk | 8 |
| Del 2 | 11 nærmeste varenummer | 10 |
| Del 2 | 12 største servergruppe | 10 |
| Del 2 | 13 anagram | 8 |
| Sum | 83 |
Merk at Del 1 er tyngre her enn i kap. 8.2: 35 poeng mot
28, og fire av dem er håndkjøringer. Det er bevisst. Håndkjøringene er de
poengene som er helt i din kontroll — de krever ingen idé, bare at du gjør
det samme som strukturen gjør, uten å ta snarveier.
---
Selvdiagnose
☐ Oppga du hele hashtabellen i oppgave 4, med
_ for de tomme plassene?☐ Ble den andre 34-en overskrevet i stedet for lagt til på nytt?
☐ Sank elementet i
RemoveMin mot det minste barnet — og sjekket du atbarnet finnes før du sammenlignet?
☐ Telte du dobbeltrotasjonen som to enkle rotasjoner i oppgave 5?
☐ Oppga du kodelengder og ikke kodeord i oppgave 6?
☐ Svarte du «verste» der det sto verste, og ikke «forventet», i oppgave 7?
☐ Skrev du eksplisitt hva du hadde endret i binærsøket i oppgave 10?
☐ Brukte du søketre-egenskapen til å hoppe over et subtre i oppgave 11, eller
traverserte du hele treet?
☐ Oppga du kjøretid på alle fem Del 2-oppgavene, og matcher hver av dem
koden du faktisk skrev?
☐ Sto forbeholdet «forventet» der du skrev eller om hashing?
☐ Definerte du både og i oppgave 13, og konkluderte du betinget?
Neste steg: kap. 8.4 er det grafmodellerings-tunge
topp-settet. Ta det på en egen kveld.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.