Algoritmer og datastrukturer
Lærebok − kompendium
Les meg

• Om kompendiet og faget
Dette kompendiet gir kun en innføring i emnet Algoritmer og datastrukturer. Dessverre har ikke kompendiet blitt fullført helt frem til det som var planen. Men de delemnene som normalt inngår i et innføringskurs, er dekket. Det er imidlertid en del litt mer videregående stoff som er påbegynt, men ikke ordentlig fullført. De som ønsker mer omfattende og mer detaljert kunnskap, har imidlertid mange muligheter. Første skritt er nok å gå til internasjonale lærebøker. Det finnes også en enorm mengde stoff på internett. Men det som ligger der er ofte fragmentert og ikke alltid pedagogisk tilrettelagt. Men en kan finne gode lærebøker der (open source). På archive.org ligger det mye. Robert Sedgewick er en av de store internasjonale navnene innen Algoritmer og datastrukturer. Her er to gode (men litt avanserte) bøker (open source) der han er medforfatter:

  Sedgewick & Wayne, Algorithms, 4th ed. 2011
  Sedgewick & Flajolet, Analysis of Algorithms, 2.ed. 2013

• Weblesere
Valid XHTML 1.0 Strict Kompendiet er nettbasert og er skrevet i html. Det tilfredsstille XHTML 1.0 Strict og burde derfor vises stort sett likt av alle weblesere. Forfatteren av dette kompendiet er forøvrig en svoren tilhenger av Firefox. Kompendiet finnes også i pdf-versjon. Det anbefales sterkt at utskrifter gjøres fra den. Det gir best resultat.

• Fargekoder

  kvadrat → Fagstoff   kvadrat → Tilleggsstoff   kvadrat → Uoppdatert/ufullført   aterisk → Matematikk

• Kompendiestruktur
Kompendiet er delt opp i kapitler, hvert kapittel har flere delkapitler og hvert delkapittel består av en serie avsnitt. Kapitteloversikten står i innholdslisten. Obs: Alle lenker her og ellers i kompendiet (bortsett fra i innholdslisten) er markert med brunrød skrift. Alle lenker skifter til hvit skrift på blå bakgrunn når markøren føres over lenken. Kapitlene har nummer (fra 1 og oppover) og tittel. For eksempel har Kapittel 1 tittelen Grunnleggende begreper og teknikker. Hvert delkapittel har undernummer (fra 1 og oppover) og undertittel. Delkapittel 1.1 er derfor første delkapittel i Kapittel 1 og har undertittelen Algoritmer og effektivitet. Hvert delkapittel er lagt ut som en separat html-fil (og pdf-fil).

• Utskrift
Som nevnt over utgjør hvert delkapittel en separat html-fil. I tillegg finnes det en pdf-fil med samme navn og innhold. Hvis en ønsker en papirutskrift av et delkapittel, anbefales det sterkt at det gjøres ved å skrive ut pdf-filen. Se f.eks. kap11.pdf som er pdf-filen for Delkapittel 1.1. Da vil alle få lik utskrift og utskriften blir slik forfatteren av kompendiet ønsker at det skal se ut. Utskrift direkte fra html-filen kan skape problemer. De forskjellige webleserne formaterer ikke sidene på nøyaktig samme måte. Det kan f.eks. være forskjeller i antall linjer per utskriftsside. En effekt kan være at en figur deles i to - den ene delen nederst på en side og den andre delen øverst på neste side. Pdf-filen er laget for å unngå slike ting.

• Avsnitt
Hvert delkapittel er delt opp i flere avsnitt. Symbolet kvadrat (og i farger som kvadrat, kvadrat og kvadrat) markerer starten på et avsnitt. Avsnittene har nummer (fra 1 og oppover) og tittel. Avsnitt 1.1.1 er første avsnitt i Delkapittel 1.1 og har undertittelen Hva er en algoritme? Noen få avsnitt er markert med symbolet aterisk . Slike avsnitt inneholder vanligvis matematiske utledninger og kan derfor være litt mer krevende. Et avsnitt avsluttes normalt med en serie øvingsoppgaver og de er markert med symbolet Til fasit . Ved å klikke på den blå kulen Til fasit kommer en til en side med løsningsforslag. De er ikke alltid fullstendige, men de som hører til ukeoppgaver vil være oppdatert.

• «Nummereringer» innenfor et avsnitt
I et avsnitt vil det ofte stå ting som det er aktuelt å referere til senere. Det kan f.eks. være definisjoner, setninger, figurer, tabeller og kode. Hvis det er flere refererbare ting av samme type, kommer de som a), b), c), osv. F.eks. inneholder Avsnitt 1.1.8 følgende «nummererte» kodebiter: Programkode 1.1.8 a), Programkode 1.1.8 b), · · · · , Programkode 1.1.8 e).

• Syntaksmarkering
I Java-koden brukes fast tegnavstand (Consolas eller Courier New) og syntaksmarkering (eng: syntax highlighting). Obs: I Consolas blir sifferet 0 skrevet som 0. Alle reserverte Java-ord er skrevet med fet type og lilla farge. Kommentarer er med kursiv og grønn farge. Tegnstrenger (og noe annet) har blå farge. Dette svarer til standardinnstillingene i Eclipse. Flg metode viser hvordan dette tar seg ut:

  public static int maks(int[] a)  // a er en heltallstabell
  {
    if (a.length < 1) throw new IllegalArgumentException("a er tom!");

    int m = 0;  // indeks til største verdi

    for (int i = 1; i < a.length; i++) // obs: starter med i = 1
    {
      if (a[i] > a[m]) m = i;  // indeksen oppdateres
    }

    return m;  // returnerer indeksen/posisjonen til største verdi

  } // maks  

• Lenker i teksten
I teksten vil det mange steder bli referert til ting som står andre steder. Det kan være definisjoner, setninger, figurer, tabeller og programkode. De har alle navn og nummer. F.eks. refererer Figur 1.2.1 a) til Figur a) i Avsnitt 1.2.1. Hvis en slik referanse har rødbrun farge (og skifter til hvit skrift med blå bakgrunn når markøren beveges over den) er den klikkbar. Dermed kan du få et direkte oppslag på den referansen. Du kan velge å få det i samme vindu (klikk), i et nytt vindu/fane (Ctrl+klikk) eller i en ny utgave av webleseren (Shift+klikk). Det siste kan være aktuelt hvis du vil ha både den opprinnelige siden og det det refereres til ved siden av hverandre. Da forminsker du slik at begge får plass.

• Navigering
Du kan, siden dette er html-dokumenter, navigere ved å bruke de vanlige tastene som virker på samme måte i alle weblesere. Dvs. Home, End, Backspace, Shift+Backspace, PageUp, PageDown, ↓ og ↑. Du kan også bruke mulighetene i den lille menyen du får ved et høyre museklikk eller ved symbolene øverst til venstre i skjermbildet. Symbolene varierer mellom webleserne. F.eks. har Firefox symbolene ←, →, forny og hjem. Vær klar over at ikonet forny ikke er det samme som tasten med navn Home. Et trykk på Home bringer deg øverst på inneværende (current) side, mens hjem bringer deg til webleserens startside. En webleser har normalt en meny der du selv kan bestemme hva som skal være startside. Det er også mulig å fjerne hjem fra verktøylinjen (toolbar).

• Navigering innen et delkapittel
Kompendiet har noen ekstra navigeringsmuligheter. Symbolet kvadrat (og asterisk3 ) som markerer starten på et avsnitt, er klikkbart. Et klikk bringer deg ned til neste avsnitt (opp til toppen fra siste avsnitt). Prøv dette på Delkapittel 1.1. Tilbake (back m.m.) bringer deg motsatt vei. Tabulatorene (Tab og Shift+Tab) kan brukes til det samme. Kommer du inn på et delkapittel for første gang, må du trykke Tab flere ganger før du kommer ned i selve dokumentet. Antall trykk avhenger av hvilken web-leser du bruker. Prøv Tab og Shift+Tab i Delkapittel 1.1.

• Navigering ut av et delkapittel
Hvis du, etter å ha klikket deg frem og tilbake en stund, står langt nede i et delkapittel og ønsker å komme deg ut, er det selvfølgelig mulig å bruke tilbake (back) diverse ganger. Men det er en enklere måte. Bruk først hjem-tasten (tasten Home øverst på tastaturet) til å flytte markøren øverst på web-siden. Ta Delkapittel 1.3 som eksempel. Det har flg. «heading»:

Algoritmer og datastrukturer
Kapittel 1 - Delkapittel 1.3

Flytter du markøren til deloverskriften Kapittel 1, vil du se at den er klikkbar. Et klikk bringer deg ut til innholdslisten for Kapittel 1. Flytter du markøren lenger til høyre til Delkapittel 1.3, vil du se at også den er klikkbar. Derfra kommer du til innholdslisten for Delkapittel 1.3. Til slutt vil et klikk på overskriften Algoritmer og datastrukturer bringe deg helt ut til kompendiets innholdsliste. Prøv dette! Det virker på figuren over.

Hvis du er inne på innholdslisten til et kapittel, kan du på samme måte som over, komme ut til kompendiets innholdsliste ved å klikke på overskriften Algoritmer og datastrukturer. Prøv det «headingen» for Kapittel 1:

Algoritmer og datastrukturer
1. Grunnleggende begreper og teknikker

• Navigering mellom kapitler, delkapitler og avsnitt
Hele kompendiet ligger under mappen ... /appolonius/ med kapitlene som undermapper. Strukturen er slik:

 ... /appolonius/                // mappe for hele kompendiet
 ... /appolonius/kap1/           // mappe for Kapittel 1
 ... /appolonius/kap1/1/         // mappe for Delkapittel 1.1

Html-filen som inneholder Delkapittel 1.1, ligger under den tilhørende mappen (se over) og vil ha adressen (url)  . . /appolonius/kap1/1/kap11.html . En kan også komme direkte til et bestemt avsnitt i et delkapittel. Ta for eksempel avsnitt 5 i Delkapittel 1.1. Det vil ligge under følgende adresse (url)  . . /appolonius/kap1/1/kap11.html#1.1.5 . Det blir på samme måte for alle de andre kapitlene. Ta for eksempel avsnitt 5 i Delkapittel 5.2. Det avsnittet vil ha følgende adresse (url) . . /appolonius/kap5/2/kap12.html#5.2.5 . Dette betyr at en kan hoppe direkte til et delkapittel eller til et avsnitt i et delkapittel ved å endre på en adresse i webleserens adressefelt.

• Alternative stiler
I kompendiet er Verdana primærfont. Dette er en «san serif»-font. Noen synes det er lettere å lese hvis det er en «serif»-font. Det betyr at bokstavene har små «føtter» og «armer». Det er lagt ut en alternativ stilmal der fonten Georgia brukes. Men det kan nok være litt vanskelig å finne ut hvordan en kan endre stilmal. Det er avhengig av hvilken web-leser du bruker.

• Trykkfeil
Det vil helt sikkert forekomme trykkfeil, rare setninger, ord som mangler, feil eller mangler i forklaringer, feil på tegninger og kanskje også enkelte feil i java-koden. Hvis du finner noe av dette, ville det være fint om du rapporterte det til forfatteren. Send for eksempel en epost til epost