TDT4120 Algoritmer og datastrukturer Interaktivt kompendium · H2026
Fremgang
0/15

03

Splitt og hersk

Kjernepensum

Del tabellen på midten, sorter hver halvdel, og flett de to sorterte halvdelene sammen. Det er hele Merge-Sort, og den bruker Θ(nlg⁡n)\Theta(n \lg n) tid i alle tilfeller, der Insertion-Sort bruker Θ(n2)\Theta(n^2) i verste tilfelle. Beskrivelsen er kort fordi den lener seg på seg selv: «sorter hver halvdel» er et rekursivt kall.

Splitt og hersk

Dekomponering reduserer en instans til mindre instanser av samme problem. Insertion-Sort kutter av ett element om gangen. Splitt og hersk deler i stedet instansen i flere uavhengige deler, gjerne to like store, løser hver del rekursivt og kombinerer delsvarene. Merge-Sort har alle fire trinnene:

  1. Grunntilfelle

    Er instansen liten nok, løses den direkte. En tabell med ett element er allerede sortert.

  2. Del

    Del instansen i to eller flere delinstanser som ikke overlapper. Merge-Sort deler tabellen på midten.

  3. Løs rekursivt

    Kall algoritmen på hver delinstans for seg: sorter hver halvdel.

  4. Kombiner

    Sett delsvarene sammen til et svar for hele instansen: flett de to sorterte halvdelene.

Delingen og kombinasjonen er kjernen i designet, og som regel ligger arbeidet i bare én av dem. I Merge-Sort er delingen triviell, og alt arbeidet ligger i flettingen. Grunntilfellet og de rekursive kallene ser like ut i hver splitt og hersk-algoritme.

Korrektheten er induksjon over problemstørrelsen, akkurat som for annen dekomponering. Grunntilfellet løses direkte. Induksjonshypotesen sier at algoritmen svarer riktig på alle mindre instanser, ikke bare på instansen som er ett element mindre. Det er sterk induksjon, og den trengs fordi en halvdel har omtrent n/2n/2 elementer. Delinstansene er mindre enn nn, så hypotesen gjelder for dem. Induksjonssteget viser at delingen og kombinasjonen gir riktig svar når delsvarene er riktige: er begge halvdelene sortert, gir flettingen en sortert tabell. Argumentet er det samme for hver størrelse, så du viser det én gang for en vilkårlig instans.

Rekurrenser

Kjøretiden til en rekursiv algoritme er kjøretiden til de rekursive kallene pluss arbeidet utenfor dem. Gjør Merge-Sort nn operasjoner selv og kaller seg to ganger på halve instansen, er T(n)=2T(n/2)+nT(n) = 2T(n/2) + n. Det er en rekurrens: en ligning der funksjonen står på begge sider, med mindre argument til høyre. Ligningen bestemmer TT fullstendig så snart grunntilfellet er kjent, men den sier ikke direkte hva T(n)T(n) er. Å løse rekurrensen er å bli kvitt TT på høyresiden.

Grunntilfellet er konstant, T(n)=Θ(1)T(n) = \Theta(1) for nn under en grense n0n_0, og rekursjonen stopper etter endelig mange kall. Læreboka kaller dette en algoritmisk rekurrens, og det antas når ikke annet er sagt. Avrunding sløyfes: skriv n/2n/2 for ⌊n/2⌋\lfloor n/2 \rfloor, som om nn var en toerpotens. Det endrer ikke den asymptotiske løsningen.

Ta T(n)=T(n−1)+1T(n) = T(n-1) + 1 med T(0)=0T(0) = 0. Sett rekurrensen inn i seg selv til et mønster viser seg, og velg så antall ekspansjoner slik at argumentet treffer grunntilfellet. Det er iterasjonsmetoden:

  1. Ekspander

    Rekurrensen gjelder også for n−1n - 1, så T(n−1)=T(n−2)+1T(n-1) = T(n-2) + 1. Sett dette inn for T(n−1)T(n-1) i T(n)=T(n−1)+1T(n) = T(n-1) + 1: T(n)=T(n−2)+2T(n) = T(n-2) + 2.

  2. Finn mønsteret

    Etter ii ekspansjoner er T(n)=T(n−i)+iT(n) = T(n-i) + i.

  3. Treff grunntilfellet

    Velg ii slik at argumentet blir grunntilfellet. n−i=0n - i = 0 gir i=ni = n.

  4. Sett inn

    T(n)=T(0)+n=nT(n) = T(0) + n = n.

Eksamensoppgave Løs rekurrensen eksakt
Ordinær eksamen, desember 2025, oppgave 14

Løs følgende rekurrens eksakt:

T(n)=T(n−1)+2n−1T(0)=0\begin{aligned} T(n) &= T(n - 1) + 2n - 1 \\ T(0) &= 0 \end{aligned}

Oppgi svaret uten asymptotisk notasjon. Forklar kort.

Vis løsning Skjul løsning

Iterasjonsmetoden: rull ut ett steg om gangen ned til grunntilfellet.

T(n)=(2n−1)+T(n−1)=(2n−1)+(2n−3)+⋯+3+1+T(0)=∑i=1n(2i−1)=n2.\begin{aligned} T(n) &= (2n - 1) + T(n - 1) \\ &= (2n - 1) + (2n - 3) \\ &\qquad + \cdots + 3 + 1 + T(0) \\ &= \sum_{i=1}^{n} (2i - 1) = n^2. \end{aligned}

Summen av de nn første oddetallene er n2n^2, og T(0)=0T(0) = 0 bidrar ikke.

Svar
T(n)=n2T(n) = n^2

Binærsøk

Søk etter vv i en sortert tabell. Se på elementet i midten. Er det vv, er du ferdig. Er vv mindre, ligger den i venstre halvdel, ellers i høyre, og du søker rekursivt der. Delingen er kjernen, og kombinasjonen finnes ikke: svaret fra det rekursive kallet returneres uendret.

bisect.py
def bisect(A, p, r, v):
  if p > r:
      return None
  q = (p + r) // 2
  if v == A[q]:
      return q
  elif v < A[q]:
      return bisect(A, p, q - 1, v)
  else:
      return bisect(A, q + 1, r, v)

def bisect_iter(A, p, r, v):
  while p <= r:
      q = (p + r) // 2
      if v == A[q]:
          return q
      elif v < A[q]:
          r = q - 1
      else:
          p = q + 1
  return None

Korrektheten følger ved induksjon over lengden på segmentet. Et tomt segment gir NIL, og ett element svarer direkte. Er segmentet lengre, er begge halvdelene kortere, så hypotesen gjelder for dem, og testen i midten velger den halvdelen vv må ligge i. Det rekursive kallet er det siste som skjer i prosedyren, så den kan skrives som en løkke som flytter pp eller rr i stedet. Bevis og kjøretid er de samme.

Ett kall på halve instansen pluss konstant arbeid gir T(n)=T(n/2)+1T(n) = T(n/2) + 1. Iterasjon halverer argumentet for hver ekspansjon, så det trengs lg⁡n\lg n ekspansjoner for å nå T(1)=1T(1) = 1:

T(n)=T(n/2)+1=T(n/4)+2=⋯=T(n/2i)+i=T(1)+lg⁡n=lg⁡n+1\begin{aligned} T(n) &= T(n/2) + 1 = T(n/4) + 2 = \cdots \\ &= T(n/2^i) + i = T(1) + \lg n = \lg n + 1 \end{aligned}

Binærsøk bruker Θ(lg⁡n)\Theta(\lg n) tid.

Merge-Sort

Merge-Sort deler på midten og sorterer halvdelene rekursivt. Kjernen er flettingen: det minste elementet forrest i de to sorterte halvdelene flyttes til neste ledige plass, om og om igjen. Halvdelene kopieres først til to hjelpetabeller LL og RR, hver med en vaktpost ∞\infty bakerst. Når den ene halvdelen er brukt opp, står ∞\infty forrest i den og taper hver sammenligning, så resten tas fra den andre uten en egen test for tom halvdel. Hver runde i løkka plasserer ett element, så flettingen bruker Θ(n)\Theta(n) tid.

merge_sort.py
inf = float("inf")

def merge_sort(A, p, r):
  if p >= r:
      return
  q = (p + r) // 2
  merge_sort(A, p, q)
  merge_sort(A, q + 1, r)
  merge(A, p, q, r)

def merge(A, p, q, r):
  L = A[p : q + 1] + [inf]
  R = A[q + 1 : r + 1] + [inf]
  i = j = 0
  for k in range(p, r + 1):
      if L[i] <= R[j]:
          A[k] = L[i]
          i = i + 1
      else:
          A[k] = R[j]
          j = j + 1
Merge-Sort som rekursjonstre
0 / 0

Rekursjonstreet til Merge-Sort, med hele tabellen øverst og ett nivå per rad. Grønt er sorterte halvdeler, oransje er elementene som sammenlignes, rødt er segmentet flettingen skriver til, og ∞\infty er vaktposten.

Læreboka skriver flettingen uten vaktposter, med en egen test for at en halvdel er tom. Flettingen blir like riktig og bruker fortsatt Θ(n)\Theta(n) tid.

To kall på halve instansen pluss nn arbeid til flettingen gir T(n)=2T(n/2)+nT(n) = 2T(n/2) + n. Ekspansjonene i iterasjonsmetoden kan tegnes som et rekursjonstre, med ett nivå per ekspansjon og kostnaden summert nivå for nivå. Treet har nn på rota, to noder med n/2n/2 under, fire med n/4n/4 under der igjen, og hvert nivå summerer til nn. Treet har lg⁡n+1\lg n + 1 nivåer:

T(n)=n+2T(n/2)=n+n+4T(n/4)=⋯=n⋅lg⁡n+n⋅T(1)=nlg⁡n+n\begin{aligned} T(n) &= n + 2T(n/2) = n + n + 4T(n/4) = \cdots \\ &= n \cdot \lg n + n \cdot T(1) = n \lg n + n \end{aligned}

Merge-Sort bruker Θ(nlg⁡n)\Theta(n \lg n) i alle tilfeller. Den deler på midten uansett hvordan inputen ser ut.

Substitusjonsmetoden finner ingenting selv, men verifiserer en løsning med induksjon: anta at løsningen holder for mindre argumenter, og vis at den da holder for nn.

Regneeksempel Verifiser med substitusjon

Vis at T(n)=nlg⁡n+nT(n) = n \lg n + n løser T(n)=2T(n/2)+nT(n) = 2T(n/2) + n med T(1)=1T(1) = 1.

Vis løsning Skjul løsning

Grunntilfellet: 1⋅lg⁡1+1=11 \cdot \lg 1 + 1 = 1. Anta at T(k)=klg⁡k+kT(k) = k \lg k + k for alle k<nk < n. Halvdelen n/2n/2 er mindre enn nn, så antagelsen gjelder for den:

T(n)=2(n2lg⁡n2+n2)+n=n(lg⁡n−1)+n+n=nlg⁡n+n\begin{aligned} T(n) &= 2\Big(\frac{n}{2} \lg \frac{n}{2} + \frac{n}{2}\Big) + n \\ &= n(\lg n - 1) + n + n = n \lg n + n \end{aligned}
Svar
Løsningen stemmer i grunntilfellet og bevares i induksjonssteget, så T(n)=nlg⁡n+nT(n) = n \lg n + n for alle nn.

Er påstanden asymptotisk, som T(n)=O(n)T(n) = O(n), skriver du konstanten ut. For T(n)=T(n−1)+1T(n) = T(n-1) + 1 med T(0)=0T(0) = 0 antar du T(k)≤ckT(k) \le ck for alle k<nk < n. Da er

T(n)≤c(n−1)+1=cn−(c−1)≤cnT(n) \le c(n - 1) + 1 = cn - (c - 1) \le cn

for c≥1c \ge 1, og grunntilfellet T(0)=0≤c⋅0T(0) = 0 \le c \cdot 0 stemmer. Den samme cc står i hypotesen og i konklusjonen, så T(n)=O(n)T(n) = O(n).

Eksamensoppgave Lurvik-Sort mot Smartnes-Sort
Kontinuasjonseksamen, august 2023, oppgave 7

Dine venner Lurvik og Smartnes har laget hver sin sorteringsalgoritme, som rett og slett utfører to andre sorteringsalgoritmer etter hverandre:

Lurvik-Sort(A, n)
1 Insertion-Sort(A, n)
2 Merge-Sort(A, 1, n)

Smartnes-Sort(A, n)
1 Merge-Sort(A, 1, n)
2 Insertion-Sort(A, n)

Hvilken av dem har best kjøretid i verste tilfelle? Forklar kort.

Vis løsning Skjul løsning

Merge-Sort bruker Θ(nlg⁡n)\Theta(n \lg n) uansett hvordan inputen ser ut. Kjører den først, er tabellen sortert når Insertion-Sort begynner, og det er beste tilfelle for Insertion-Sort: Θ(n)\Theta(n). Smartnes-Sort bruker dermed Θ(nlg⁡n)\Theta(n \lg n) i verste tilfelle. Lurvik-Sort kjører Insertion-Sort på usortert input, og der er verste tilfelle Θ(n2)\Theta(n^2), som dominerer Θ(nlg⁡n)\Theta(n \lg n) fra Merge-Sort etterpå.

Svar
Smartnes-Sort, med Θ(nlg⁡n)\Theta(n \lg n) mot Θ(n2)\Theta(n^2).

Quicksort

Quicksort legger arbeidet i delingen, og kombinasjonen er ingenting. Partition velger det siste elementet xx som pivot og ordner resten slik at alt som er mindre enn eller lik xx ligger til venstre og alt større til høyre. Så settes xx mellom de to delene. Der står den på sin endelige plass og flyttes aldri igjen, og Quicksort sorterer de to delene rekursivt.

Løkka i Partition deler segmentet i soner. Elementene fra pp til og med ii er små, fra i+1i + 1 til og med j−1j - 1 store, og fra jj og utover ikke sett ennå. Et lite element A[j]A[j] bytter plass med det første store, A[i+1]A[i+1], og grensen ii rykker ett hakk. Et stort element blir stående. Hver runde ser på ett nytt element, så Partition bruker Θ(n)\Theta(n) tid.

quicksort.py
def partition(A, p, r):
  x = A[r]
  i = p - 1
  for j in range(p, r):
      if A[j] <= x:
          i = i + 1
          A[i], A[j] = A[j], A[i]
  A[i + 1], A[r] = A[r], A[i + 1]
  return i + 1

def quicksort(A, p, r):
  if p < r:
      q = partition(A, p, r)
      quicksort(A, p, q - 1)
      quicksort(A, q + 1, r)
Quicksort
0 / 0

Det skyggelagte området er segmentet som deles, og den stiplede linja er pivoten xx i det. Gult er sonen med små elementer, oransje sonen med store, og grått er ikke sett ennå. Grønne søyler står på sin endelige plass.

Deler pivoten jevnt, er rekurrensen T(n)=2T(n/2)+nT(n) = 2T(n/2) + n, den samme som for Merge-Sort, og kjøretiden Θ(nlg⁡n)\Theta(n \lg n). Havner pivoten helt ytterst hver gang, slik den gjør når tabellen allerede er sortert, får det ene kallet n−1n - 1 elementer og det andre ingen. Da er T(n)=T(n−1)+nT(n) = T(n-1) + n, og iterasjon gir summen n+(n−1)+⋯+1=n(n+1)/2n + (n-1) + \cdots + 1 = n(n+1)/2, altså Θ(n2)\Theta(n^2).

Sortert input er vanlig input, så det verste tilfellet er ikke bare teori. Randomized-Partition bytter et tilfeldig valgt element inn på plass rr før delingen. Da er hvert element i segmentet like sannsynlig som pivot, uansett hvordan inputen er ordnet.

Den forventede kjøretiden finner du ved å telle per element. Partition på et segment med mm elementer koster Θ(m)\Theta(m), altså en konstant for hvert element i segmentet. Den totale kjøretiden er derfor summen, over alle elementene, av hvor mange delinger hvert element er med i. Følg ett element ee, og kall en pivot god når rangen i segmentet ligger mellom m/4m/4 og 3m/43m/4. Da får begge delene høyst 3m/43m/4 elementer, så etter en god pivot har segmentet til ee krympet til høyst 3/43/4 av størrelsen. Etter log⁡4/3n\log_{4/3} n gode pivoter har segmentet høyst ett element, så ee er med i høyst log⁡4/3n\log_{4/3} n delinger med god pivot. Halvparten av elementene er gode pivoter, så en tilfeldig pivot er god med sannsynlighet minst 1/21/2, og i forventning går det høyst to delinger per god pivot. Element ee er dermed med i høyst 2log⁡4/3n=O(lg⁡n)2\log_{4/3} n = O(\lg n) delinger i forventning, og de nn elementene gir til sammen forventet O(nlg⁡n)O(n \lg n).

Jevn deling er det beste som kan skje, og den koster allerede Θ(nlg⁡n)\Theta(n \lg n), så forventet kjøretid er Θ(nlg⁡n)\Theta(n \lg n) for enhver input. Regningen bruker bare de tilfeldige valgene og ikke rekkefølgen i inputen. Verste tilfelle er fortsatt Θ(n2)\Theta(n^2), men det krever uflaks med de tilfeldige valgene, og ingen input er mer utsatt enn andre.

Den samme tellingen gir gjennomsnittstilfellet for Quicksort med fast pivot. Er alle rekkefølger av inputen like sannsynlige, er det siste elementet i hvert segment like sannsynlig hvilken som helst rang, og snittet over instansene er også Θ(nlg⁡n)\Theta(n \lg n).

Gjennomsnittstilfelle

Snitt over instansene av størrelse nn, med en sannsynlighetsfordeling over input. Quicksort med fast pivot: Θ(nlg⁡n)\Theta(n \lg n) når alle rekkefølger er like sannsynlige.

Amortisert

Snitt over operasjonene i én følge, i verste fall og uten sannsynlighet. Tabelldobling: Θ(1)\Theta(1) per innsetting.

Forventet

Snitt over algoritmens egne tilfeldige valg, for én fast instans. Randomized-Quicksort: Θ(nlg⁡n)\Theta(n \lg n) for enhver input.

Masterteoremet

Mange splitt og hersk-algoritmer gjør aa rekursive kall på instanser av størrelse n/bn/b og bruker f(n)f(n) på deling og kombinasjon: T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n). Rekursjonstreet har log⁡bn\log_b n nivåer under rota, nivå ii har aia^i noder av størrelse n/bin/b^i, og nederst står alog⁡bna^{\log_b n} løvnoder. Antallet løvnoder skrives om med alog⁡bn=nlog⁡baa^{\log_b n} = n^{\log_b a}. Summert nivå for nivå:

T(n)=f(n)+af(n/b)+a2f(n/b2)+⋯+Θ(nlog⁡ba)T(n) = f(n) + a f(n/b) + a^2 f(n/b^2) + \cdots + \Theta(n^{\log_b a})

Læreboka kaller f(n)f(n) den drivende funksjonen og nlog⁡ban^{\log_b a} vannskillefunksjonen. Ta først f(n)=ndf(n) = n^d. Nivå ii koster til sammen ai(n/bi)d=nd(a/bd)ia^i (n/b^i)^d = n^d (a/b^d)^i, så summen er geometrisk med forholdet a/bda/b^d. Er a/bd>1a/b^d > 1, altså d<log⁡bad < \log_b a, vokser leddene nedover, og løvnodene dominerer: T(n)=Θ(nlog⁡ba)T(n) = \Theta(n^{\log_b a}). Er a/bd=1a/b^d = 1, koster alle de log⁡bn+1\log_b n + 1 nivåene ndn^d, og T(n)=Θ(ndlg⁡n)T(n) = \Theta(n^d \lg n). Er a/bd<1a/b^d < 1, krymper leddene, og rota dominerer: T(n)=Θ(nd)T(n) = \Theta(n^d).

Rekursjonstreet nivå for nivå

Rekursjonstreet for T(n)=aT(n/b)+ndT(n) = aT(n/b) + n^d med n=b5n = b^5, rota øverst. Hver stolpe er det samlede arbeidet på ett nivå, merket med antall kall og størrelsen på hvert. Stolpene er grønne når a/bd>1a/b^d > 1, røde når a/bd=1a/b^d = 1 og oransje når a/bd<1a/b^d < 1.

Masterteoremet gjelder også andre f(n)f(n), så lenge avstanden til vannskillefunksjonen er en faktor nϵn^\epsilon eller lg⁡kn\lg^k n:

Tilfelle 1, 2 og 3 er de tre utfallene av forholdet a/bda/b^d for f(n)=ndf(n) = n^d: løvnodene dominerer, alle nivåene koster like mye, eller rota dominerer.

I tilfelle 2 kan f(n)f(n) ha en ekstra faktor lg⁡kn\lg^k n. Nivå ii koster da omtrent nlog⁡balg⁡k(n/bi)n^{\log_b a} \lg^k(n/b^i), og summen over nivåene får én faktor lg⁡n\lg n til.

I tilfelle 1 og 3 må avstanden til vannskillefunksjonen være polynomisk, en faktor nϵn^\epsilon. En logaritmisk faktor over vannskillefunksjonen havner i tilfelle 2. En logaritmisk faktor under den havner i ingen av tilfellene: i T(n)=2T(n/2)+n/lg⁡nT(n) = 2T(n/2) + n/\lg n er f(n)f(n) mindre enn nn, men ikke polynomisk mindre, og summen nivå for nivå gir Θ(nlg⁡lg⁡n)\Theta(n \lg\lg n). Teoremet krever også at instansen deles på en konstant faktor b>1b > 1, så T(n)=T(n−1)+nT(n) = T(n-1) + n har ikke formen.

Betingelsen af(n/b)≤cf(n)a f(n/b) \le c f(n) i tilfelle 3 kalles regularitet. Den holder alltid for f(n)=ndf(n) = n^d med d>log⁡bad > \log_b a, for da er af(n/b)=(a/bd)f(n)a f(n/b) = (a/b^d) f(n) med a/bd<1a/b^d < 1.

Regneeksempel Bruk masterteoremet

Løs T(n)=9T(n/3)+nT(n) = 9T(n/3) + n og T(n)=2T(n/2)+nlg⁡nT(n) = 2T(n/2) + n \lg n.

Vis løsning Skjul løsning

Første rekurrens: a=9a = 9, b=3b = 3 og f(n)=nf(n) = n. Vannskillefunksjonen er nlog⁡39=n2n^{\log_3 9} = n^2, og f(n)=n=O(n2−1)f(n) = n = O(n^{2 - 1}) er polynomisk mindre. Tilfelle 1 gir T(n)=Θ(n2)T(n) = \Theta(n^2).

Andre rekurrens: a=2a = 2, b=2b = 2 og f(n)=nlg⁡nf(n) = n \lg n. Vannskillefunksjonen er nlog⁡22=nn^{\log_2 2} = n, og f(n)=Θ(nlg⁡1n)f(n) = \Theta(n \lg^1 n). Avstanden er bare en logaritmisk faktor, så dette er tilfelle 2 med k=1k = 1, og T(n)=Θ(nlg⁡2n)T(n) = \Theta(n \lg^2 n).

Svar
Θ(n2)\Theta(n^2) og Θ(nlg⁡2n)\Theta(n \lg^2 n).
De første to er binærsøk og Merge-Sort, og den siste er Quicksort i verste tilfelle.
Rekurrensnlog⁡ban^{\log_b a}Løsning
T(n/2)+1T(n/2) + 1n0=1n^0 = 1tilfelle 2, k=0k = 0: Θ(lg⁡n)\Theta(\lg n)
2T(n/2)+n2T(n/2) + nnntilfelle 2, k=0k = 0: Θ(nlg⁡n)\Theta(n \lg n)
4T(n/2)+n4T(n/2) + nn2n^2tilfelle 1: Θ(n2)\Theta(n^2)
2T(n/2)+n22T(n/2) + n^2nntilfelle 3: Θ(n2)\Theta(n^2)
T(n−1)+nT(n-1) + nikke på formeniterasjon: Θ(n2)\Theta(n^2)
Eksamensoppgave To rekurrenser
Ordinær eksamen, desember 2023, oppgave 3

Løs følgende rekurrenser. Oppgi svaret i Θ\Theta-notasjon.

a) T(n)=T(n−1)+n2−(n−1)2T(n) = T(n - 1) + n^2 - (n - 1)^2

b) T(n)=2T(n/4)+n lg⁡2nT(n) = 2T(n/4) + \sqrt{n}\,\lg^2 n

Vis løsning Skjul løsning

a) Leddet n2−(n−1)2n^2 - (n - 1)^2 gjør at utrullingen blir en teleskopsum der alt unntatt n2n^2 og grunntilfellet faller bort:

T(n)=n2−(n−1)2+T(n−1)=n2−(n−2)2+T(n−2)=n2−(n−i)2+T(n−i)=n2+T(0)=Θ(n2).\begin{aligned} T(n) &= n^2 - (n - 1)^2 + T(n - 1) \\ &= n^2 - (n - 2)^2 + T(n - 2) \\ &= n^2 - (n - i)^2 + T(n - i) \\ &= n^2 + T(0) = \Theta(n^2). \end{aligned}

b) Her er a=2a = 2 og b=4b = 4, så vannskillefunksjonen er nlog⁡42=n1/2=nn^{\log_4 2} = n^{1/2} = \sqrt{n}. Da er f(n)=n lg⁡2n=nlog⁡balg⁡2nf(n) = \sqrt{n}\,\lg^2 n = n^{\log_b a} \lg^2 n, og tilfelle 2 med k=2k = 2 gir at T(n)T(n) får én logaritmefaktor til.

Svar
a) Θ(n2)\Theta(n^2), b) Θ(n lg⁡3n)\Theta(\sqrt{n}\,\lg^3 n)

Sjekk deg selv

En algoritme gjør fire rekursive kall på halve instansen og bruker Θ(n2)\Theta(n^2) på å dele og kombinere. Hva er kjøretiden?
Oppdatert 27. september 2026 Foreslå endring