Finne det nest største tallet i en liste

Hele eksamen, alle hjelpemidler

Finne det nest største tallet i en liste

Du får i oppgave å finne det nest største tallet i en liste (array) med tall. Dersom det finnes flere like tall som er størst, skal ingen av disse regnes som nest størst. Under finner du fire alternative løsninger for denne oppgaven skrevet i pseudokode.

Løsning 1

SET størst TO negativt uendelig tall
FOR hvert tall i listen
    IF tall GREATER THAN størst
        SET størst TO tall
    ENDIF
ENDFOR
Fjern størst fra listen
SET nestStørst TO negativt uendelig tall
FOR hvert tall i listen
    IF tall GREATER THAN nestStørst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst

Løsning 2

SET størst TO første tall i listen
SET nestStørst TO andre tall i listen
IF nestStørst GREATER THAN størst
    Bytt størst og nestStørst
ENDIF
FOR hvert tall i listen med start fra tredje tall
    IF tall GREATER THAN størst
        SET nestStørst TO størst
        SET størst TO tall
    ELSEIF tall GREATER THAN nestStørst AND tall NOT EQUAL TO størst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst

Løsning 3

SET størst TO negativt uendelig tall
SET nestStørst TO negativt uendelig tall
FOR hvert tall i listen
    IF tall GREATER THAN størst
        SET nestStørst TO størst
        SET størst TO tall
    ELSEIF tall GREATER THAN nestStørst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst

Løsning 4

Sorter listen i synkende rekkefølge
FOR hvert tall i listen
    IF tall NOT EQUAL TO neste tall i listen
        DISPLAY neste tall i listen
        avbryt for-løkken
    ENDIF
ENDFOR
Hjelpemiddelkrav: For hånd

Hvilke to løsninger er riktige?

Hjelpemiddelkrav: For hånd

Vurder og sammenlign de to løsningene du valgte i punkt a.

Fasit

Løsning 1 og løsning 4. Løsning 1 forutsetter at «Fjern størst fra listen» fjerner alle forekomstene av det største tallet.

Begge er riktige. Løsning 1 går gjennom listen to ganger (lineær tid), mens løsning 4 sorterer først og er tregere på store lister, men kortere og enklere å lese. Begge endrer listen, og begge må håndtere lister der alle tallene er like.

LøsningsforslagKI-generert

Vi tester løsningene med to lister: [3, 7, 5] (ingen like tall) og [5, 5, 3]. I den siste listen er 5 størst to ganger, så det riktige svaret er 3.

Løsning[3, 7, 5][5, 5, 3]
153 (hvis alle femmerne fjernes)
255 (feil)
355 (feil)
453

Løsning 1 finner det største tallet, fjerner det fra listen og finner deretter det største av tallene som er igjen. Det blir riktig så lenge alle forekomstene av det største tallet fjernes. Fjernes bare én forekomst (som liste.remove(x) i Python), blir resultatet det samme som i løsning 3.

Løsning 2 har en sjekk for like tall (tall NOT EQUAL TO størst) inne i løkken. Den starter likevel med de to første tallene uten å sjekke om de er like. For [5, 5, 3] blir både størst og nestStørst 5 før løkken starter, og tallet 3 endrer ikke dette. Løsningen feiler hver gang listen begynner med to like tall og det ikke kommer et større tall senere.

Løsning 3 mangler sjekken for like tall. Når samme største tall kommer en gang til, er det større enn nestStørst, og det blir satt som nest størst.

Løsning 4 sorterer listen synkende. Da ligger alle forekomstene av det største tallet først. Det første tallet som er ulikt tallet foran seg, er det nest største. For [5, 5, 3] er rekkefølgen etter sortering 5, 5, 3, og løkken skriver ut 3.

De to riktige løsningene er derfor 1 og 4.

Hvordan de virker. Løsning 1 bruker to vanlige gjennomganger av listen og finner det største tallet hver gang. Løsning 4 overlater mesteparten av arbeidet til en sorteringsalgoritme og trenger bare å se på tallene øverst i den sorterte listen.

Effektivitet. Løsning 1 går gjennom listen to ganger. I tillegg må den finne og fjerne forekomstene av det største tallet. Tidsbruken vokser proporsjonalt med antall tall n (lineær tid). Å sortere en liste tar mer tid, typisk proporsjonalt med n⋅log⁡n med en god sorteringsalgoritme. Løsning 4 blir derfor tregere enn løsning 1 for store lister. For lister med noen hundre eller tusen tall merkes ikke forskjellen.

Lesbarhet og hvor lett de er å implementere. Løsning 4 er kortest. De fleste språk har en innebygd sorteringsfunksjon, så løsningen kan skrives med få linjer. Løsning 1 er også enkel, men lengre. Den krever at vi vet hvordan listefunksjonen for å fjerne elementer virker, siden remove i mange språk fjerner bare den første forekomsten.

Sideeffekter. Begge løsningene endrer listen: løsning 1 fjerner elementer, og løsning 4 endrer rekkefølgen. Trenger programmet den opprinnelige listen senere, må begge jobbe på en kopi.

Spesialtilfeller. Hvis alle tallene i listen er like, finnes det ikke noe nest største tall:

  • Løsning 1 ender med en tom liste og viser «negativt uendelig tall». Det må håndteres særskilt.
  • Løsning 4 finner ikke to ulike naboer og viser ingenting.

I løsning 4 finnes det heller ikke noe «neste tall» når løkken kommer til det siste tallet. Løkken må derfor stoppe på det nest siste tallet, ellers gir programmet en feil (indeks utenfor listen).

Konklusjon. Løsning 4 er enklest å skrive og lese og passer godt for små og mellomstore lister. Løsning 1 er mer effektiv for store datamengder. Den beste løsningen for store lister er én gjennomgang som ligner løsning 2, men som også tar hensyn til like tall helt fra starten.

Forstå oppgaven med en KI

Du får en ferdig tekst du limer inn i den KI-chatboten du bruker. Teksten inneholder oppgaven og en instruks om at chatboten skal hjelpe deg å tenke selv — stille spørsmål, gi ett hint av gangen og la deg gjøre regningen.

Anbefalt. Chatboten får beskjed om å bruke det til å veilede deg riktig vei — ikke til å røpe svaret. Du kan slå det av hvis du vil være helt sikker på at ingenting lekker.

Hva du bør vite
  • Ingenting sendes herfra. Teksten kopieres bare til utklippstavla på enheten din. Det du limer inn i en chatbot, går til den tjenesten — og de har sine egne regler for hva de lagrer.
  • Ikke lim inn personopplysninger — navn, skole eller noe annet om deg selv eller andre. Oppgaveteksten holder.
  • KI kan ta feil, også i informasjonsteknologi. Sjekk alltid mot løsningsforslaget her på siden.
  • Er du usikker på om du har lov til å bruke KI på skolearbeidet ditt, spør læreren din først.

Tastatursnarveier

Navigasjon

⌘K / Ctrl+K
Åpne søk
G F
Gå til Fag
G E
Gå til Eksamener
G T
Gå til Temaer
G K
Gå til Kompetansemål
G H
Hjem
?
Vis snarveier

I oppgave

←/→ · J/K
Forrige / neste oppgave
0
Marker som ikke prøvd
1
Marker som prøvd
2
Marker som trenger hjelp
3
Marker som ferdig
S
Vis / skjul løsningsforslag
A
Legg til i liste
N
Skriv notat
Esc
Tilbake / avslutt