1.4 Rekurrenser — masterteoremet
Masterteoremet for `T(n)=aT(n/b)+f(n)` — de tre tilfellene, inkludert log-faktor-tilfellet som er den faste fellen.
skal oppgi hva den løser til, er blant de best belagte sjangrene i faget: den er
med i 76 % (13 av de 17 settene i grunnlaget). Oppgaven ber deg nesten alltid
om å navngi metoden du bruker, i tillegg til å gi svaret.
Høyeste prioritet — dette må sitte. Masterteoremet er den metoden som
dekker flest av oppgavene, og den er rask: har du de tre tilfellene i hodet, tar
en typisk oppgave under to minutter.
Det kritiske er å velge riktig tilfelle. Det aller vanligste tapet er å
glemme logaritmefaktoren i tilfelle 2 og svare der det riktige er
. Løsningsforslagene skiller tydelig mellom de to.
Slik er kapitlet lagt opp. Først hvor rekurrensene kommer fra og hva de tre
tallene , og betyr. Så selve teoremet med rekursjonstreet som
bilde, deretter de tre tilfellene ett for ett med et gjennomregnet eksempel på
hvert. Til slutt log-faktor-fellen, antall nivåer i rekursjonstreet og de
rekurrensene teoremet ikke dekker.
Kapitlet er anslått til 50 minutter, og hver overskrift har sitt eget tidsanslag
— det står «— naturlig pausepunkt —» der det er greit å stoppe.
Dette kapitlet bruker masterteoremet. Hvorfor det stemmer, og hva du gjør når
det ikke gjelder, hører hjemme i kapittel 1.5 om iterasjon og substitusjon.
Forkunnskaper
- Kapittel 1.1, Asymptotisk notasjon — de fem symbolene. Du trenger ,
og , og du må kunne avgjøre hvilken av to funksjoner som vokser
raskest.
- Potenser og logaritmer — regneregler for potenser og logaritmer
fra R1. Masterteoremet bygger helt og holdent på uttrykket , og
du må kunne regne ut for konkrete tall.
To notasjonspunkter før vi begynner. betyr — det er
CLRS-konvensjonen, og den brukes i hele boka. Og er logaritmen til
med grunntall : det tallet du må opphøye i for å få . For eksempel
er , fordi .
Der rekurrensene kommer fra (~8 min)
Et bibliotek får inn en kasse med 800 innleverte bøker som skal settes i hylla i
riktig rekkefølge. Én person alene ville brukt hele dagen. I stedet deler du
kassa i to like store bunker, gir én bunke til hver av to medarbeidere som gjør
akkurat det samme med sin, og til slutt fletter du de to ferdig ordnede bunkene
sammen til én — noe som krever at du tar én bok om gangen og ser hvilken av de
to bunkene som har den neste i rekkefølgen.
Hvor lang tid tar det? Kall tiden for bøker . De to medarbeiderne
bruker hver. Flettingen på slutten krever at du er innom hver bok én
gang, altså omtrent arbeidsenheter. Til sammen:
Dette er en rekurrens: en ligning som beskriver ved hjelp av av en
mindre inputstørrelse. Den er ikke et svar ennå — den sier ikke hvor lang tid
det faktisk tar. Å finne det lukkede uttrykket, altså å svare « er
», kalles å løse rekurrensen.
Nesten alle rekurrensene i dette faget ser like ut, fordi de kommer fra samme
type algoritme: del opp, løs delene, sett sammen. Det er derfor det finnes ett
verktøy som løser nesten alle på under et minutt.
En ligning som uttrykker kjøretiden for et problem av størrelse ved hjelp av
kjøretiden for mindre inputstørrelser. Den beskriver arbeidet, men oppgir det
ikke — svaret må regnes fram.
Standardformen i dette faget er : algoritmen lager
delproblemer av størrelse og bruker på alt annet.
Kravet for at masterteoremet skal kunne brukes, er at rekurrensen faktisk er på
denne formen — med og . Rekurrenser som
krymper ved subtraksjon i stedet for divisjon og faller utenfor.
Den minste inputen algoritmen ikke deler opp videre, og den verdien rekursjonen
stopper på. Uten et grunntilfelle er en rekurrens uendelig.
For algoritmiske rekurrenser antas for en konstant — å
sortere ett element eller søke i et array med ett element tar konstant tid.
Kravet er mildere enn man skulle tro: et oppgitt grunntilfelle som
eller er som regel uten betydning for det asymptotiske svaret, og
masterteoremet spør aldri etter det. Skal du derimot oppgi et eksakt
uttrykk, betyr grunntilfellet alt.
Hva de tre tallene betyr
Tre størrelser bestemmer alt, og de kan leses rett ut av rekurrensen:
- er hvor mange delproblemer algoritmen lager. I biblioteket er ,
fordi kassa deles i to bunker.
- er hvor mye mindre hvert delproblem er. Her er , fordi hver
bunke er halvparten så stor.
- er arbeidet utenom rekursjonen: både oppdelingen på veien ned og
sammensettingen på veien opp. Her er , fra flettingen.
Legg merke til at og ikke behøver å være like. Deler du inn i tre bunker
men bare må jobbe videre med to av dem, er og .
Masterteoremet består i å sammenligne to størrelser: arbeidet på toppen,
og uttrykket , som er antall løvnoder helt i bunnen av
rekursjonen. Den av de to som dominerer, bestemmer svaret. Er de like store,
kommer det en logaritme på kjøpet.
.
Tilfelle 1. Er for en konstant
, så er
Tilfelle 2. Er med , så er
Tilfelle 3. Er for en konstant
, og regularitetsbetingelsen holder
for en konstant og alle store nok , så er
Legg merke til to detaljer i tilfelle 2, for begge er faste feilkilder. For det
første må være ikke-negativ — er tillatt og er det aller
vanligste tilfellet, siden . For det andre er svaret
, ikke : du legger til én logaritme, du beholder ikke den
du hadde.
I tilfelle 1 og 3 er derimot strengt positiv. Gapet mellom
og må være en hel potens av , ikke bare en logaritme.
Det er nettopp derfor tilfelle 2 finnes: den fanger opp mellomrommet der
avstanden er logaritmisk.
. På neste nivå har du delproblemer som hver koster , altså
til sammen. Slik fortsetter det nedover, og helt i bunnen sitter
løvnoder som hver koster konstant tid.
Tre ting kan skje med en slik kolonne. Enten vokser tallene nedover, og da er
det bunnen — løvnodene — som dominerer, og svaret blir .
Det er tilfelle 1. Eller de synker nedover, og da dominerer toppen, og svaret
blir . Det er tilfelle 3. Eller de er omtrent like store hele
veien, og da er svaret arbeidet per nivå ganger antall nivåer — og antall nivåer
er . Det er tilfelle 2, og det er derfra logaritmen i svaret kommer.
Du trenger ikke bevise noe av dette på eksamen. Men bildet gjør at du husker
hvorfor tilfelle 2 er det eneste som legger på en logaritme.
Antall løvnoder i rekursjonstreet, altså hvor mye arbeid som ligger helt i
bunnen av rekursjonen. Det er den ene av de to størrelsene masterteoremet
sammenligner.
Regnes ut ved å ta logaritmen til med grunntall . For er
, altså . For er , altså
.
Kravet er å regne dette først, hver eneste gang. Alle tre tilfellene er
formulert som en sammenligning mot nettopp dette uttrykket, så uten det kan du
ikke velge tilfelle.
Løs med masterteoremet. Angi hvilket tilfelle du bruker.
Regn ut . , så .
Sammenlign. og er samme funksjon. Da er
, altså tilfelle 2 med — husk at
.
Sett inn i tilfelle 2. Svaret er med
:
Kortsvaret du leverer: masterteoremet, tilfelle 2 med , gir
.
Dette er Merge-Sorts rekurrens, og er den kjøretiden du
kommer til å møte igjen i Del 2. Legg merke til at er helt lovlig — det
er tvert imot det vanligste. Et krav om at måtte være strengt positiv, ville
utelukket nettopp denne rekurrensen fra teoremet.
Gitt .
a) Hva er , og ?
b) Regn ut .
c) Hvilket tilfelle av masterteoremet gjelder, og hva blir ?
De tre tilfellene, ett for ett (~14 min)
— naturlig pausepunkt —
Alle tre tilfellene er formulert som en sammenligning mellom og
. Rekkefølgen du bør gå fram i, er alltid den samme: regn ut
, sammenlign, velg tilfelle, sett inn.
Det som skiller tilfellene, er hvor stort gapet er:
| Gapet mellom og | Tilfelle | Svar |
|---|---|---|
| er en hel potens av mindre | 1 | |
| de er like store, eventuelt med en logaritmefaktor mellom | 2 | |
| er en hel potens av større | 3 |
«En hel potens av » er det -et står for. Er
og , er gapet en faktor , altså rikelig. Er , er
gapet bare en logaritme, og da holder det ikke til tilfelle 1.
Det tilfellet der rekursjonen dominerer: arbeidet utenom er så lite at det er
løvnodene som bestemmer kjøretiden.
Betingelsen er for en konstant
, og svaret er .
Kravet som lett overses, er at må være strengt positiv: gapet
må være en hel potens av . At bare er litt mindre enn ,
for eksempel med en logaritmefaktor, er ikke nok.
Løs med masterteoremet, og angi tilfellet.
, fordi . Altså er .
Nå sammenligner vi med . Gapet er en hel faktor : med
er , som stemmer. Betingelsen i
tilfelle 1 er oppfylt.
Kortsvaret: masterteoremet, tilfelle 1, gir .
Legg merke til at ikke dukker opp i svaret i det hele tatt når tilfelle 1
gjelder. Det er hele poenget: arbeidet på toppen er så lite at det drukner i
arbeidet nederst i treet.
Løs med masterteoremet, og oppgi tilfellet:
a)
b)
Det tilfellet der arbeidet på toppen og arbeidet i bunnen er like store, slik at
hvert nivå i rekursjonstreet koster omtrent det samme.
Betingelsen er med , og svaret er
.
Kravet er at er ikke-negativ. Den ekstra logaritmen i svaret kommer fra
antall nivåer i treet: like mye arbeid på hvert av nivåer gir én
logaritme ekstra.
Antall logaritmefaktorer i utover . Den avgjør hvor mange
logaritmer som står i svaret, og den skal alltid leses av før du konkluderer.
Er glatt, er og svaret får én logaritme. Er
, er og svaret får to. Regelen er alltid
.
Kravet er at må være ikke-negativ. Er mindre enn med
en logaritmefaktor — altså — faller rekurrensen utenfor den varianten av
teoremet som brukes i dette faget.
Løs med masterteoremet, og oppgi tilfellet og
verdien av :
a)
b)
Det tilfellet der arbeidet på toppen dominerer: oppdelingen og sammensettingen
koster så mye at rekursjonen blir uvesentlig.
Betingelsen er for en konstant
, og svaret er .
Kravet som skiller dette tilfellet fra de to andre, er at det har to
betingelser: gapet må være en hel potens av , og i tillegg må
regularitetsbetingelsen holde.
Tilleggskravet i tilfelle 3: arbeidet på ett nivå skal være en fast brøkdel
mindre enn arbeidet på nivået over, slik at summen nedover faktisk krymper.
Formelt: for en konstant og alle store nok .
Kravet er nesten alltid oppfylt for de -ene som dukker opp på eksamen —
polynomer og polynomer ganger logaritmer. For er
, altså , og betingelsen holder. Skriv én linje om
den når du bruker tilfelle 3; det er den linja løsningsforslagene ser etter.
Løs med masterteoremet. Angi tilfellet, og vis at
tilleggsbetingelsen holder.
, så .
Nå er større enn , og gapet er en hel faktor : med
er . Første betingelse i tilfelle 3 er
oppfylt.
Regularitetsbetingelsen. Vi må vise at for en
:
Det er , så virker. Betingelsen
holder.
Kortsvaret: masterteoremet, tilfelle 3 (regularitetsbetingelsen holder med
), gir .
Merk kontrasten til eksempel 1: samme og , men et tyngre , og
svaret blir noe helt annet. Det er alene som står i svaret her — ingen
logaritme kommer i tillegg.
Løs med masterteoremet. Oppgi tilfellet, og skriv én
linje om regularitetsbetingelsen der den er relevant.
a)
b)
Log-faktoren — den faste fellen (~12 min)
— naturlig pausepunkt —
Nå kommer den enkeltdetaljen som avgjør flest poeng i sjanger B. Når
matcher opp til en logaritme, er du i tilfelle 2 — og svaret
får én logaritme mer enn hadde.
Feilen ser slik ut i praksis. Du har , regner ut at
, ser at er «omtrent », og svarer eller
. Begge er gale. Riktig svar er .
Grepet som fjerner feilen er å skrive eksplisitt på formen
før du konkluderer, og lese av derfra. Da blir svaret
mekanisk: bytt med .
Løs med masterteoremet. Angi tilfellet og verdien av
, og forklar med én setning hvorfor tilfelle 3 ikke gjelder.
, så .
Skriv på riktig form. , altså
tilfelle 2 med .
Sett inn. Svaret er med :
Hvorfor ikke tilfelle 3? Fordi bare er en logaritme større enn
, ikke en hel potens av : det finnes ingen
med , siden vokser langsommere enn
enhver positiv potens av .
Kortsvaret: masterteoremet, tilfelle 2 med , gir
.
Legg merke til at betyr , ikke . Skriver du det
siste, har du svart på noe annet.
har tre ansikter.
Glemt logaritmefaktor. Når , altså tilfelle 2 med
, er svaret — ikke .
Å svare på er den vanligste enkeltfeilen i hele
sjangeren. Motgiften er å skrive eksplisitt som og
lese av , i stedet for å gjette tilfellet på øyemål.
Tilfelle 2 med negativ . Se på . Her er
, og , altså . Det er
utenfor den varianten av masterteoremet som brukes i dette faget: kravet er
at må være ikke-negativ. Rekurrensen har et svar — den løser til
— men det svaret får du ikke fra masterteoremet, og du skal
ikke sette inn i tilfelle 2 og håpe. Noterer du at rekurrensen faller utenfor
pensumvarianten, har du sagt det som er riktig. Det har hendt at en slik
rekurrens har havnet i et sett og blitt tatt ut av vurderingen etterpå, men det
er ikke noe å planlegge for: skriv hvorfor teoremet ikke gjelder, og gå videre.
Feil utregnet . Merk at har som grunntall, ikke .
For er , ikke . En byttet
rekkefølge her gir feil eksponent og dermed feil tilfelle.
Masterteoremet brukt på feil form. Teoremet krever
med og . En rekurrens som krymper ved
subtraksjon og er ikke på denne formen — der trengs iterasjonsmetoden, som hører
hjemme i kapittel 1.5. Det samme gjelder rekurrenser med ulikt store deler, som
. Å tvinge masterteoremet på en slik rekurrens gir
et svar som ser pent ut og er galt.
Løs med masterteoremet. Oppgi tilfellet og der
tilfelle 2 gjelder.
a)
b)
c)
Betrakt .
a) Regn ut og skriv på formen .
Hva blir ?
b) Kan du bruke masterteoremet slik det er formulert i dette kapitlet?
Begrunn.
c) Hva er riktig svar på en slik oppgave på eksamen?
Antall nivåer og grunntilfellet (~8 min)
Et fast delspørsmål er hvor mange nivåer rekursjonstreet har. Svaret følger av
figuren tidligere i kapitlet: hvert nivå deler størrelsen på , og du er
framme ved grunntilfellet når er krympet ned til en konstant. Antall
halveringer, tredelinger eller hva det nå er, er :
Legg merke til at ikke er med. Hvor mange delproblemer hvert nivå lager,
påvirker hvor bredt treet er, ikke hvor dypt. Bredden er
løvnoder; dybden er nivåer.
Legg også merke til at grunntallet i logaritmen ikke betyr noe asymptotisk.
og er samme klasse, siden logaritmer med ulikt
grunntall skiller seg med en konstant faktor. Blir du spurt om et konkret tall
— «hvor mange nivåer har treet for når ?» — må du derimot
regne med riktig grunntall: nivåer under rota, altså 11
nivåer i alt hvis du teller rota med.
Hvor dypt rekursjonen går før den treffer grunntilfellet. Det er antall ganger
du kan dele på før du er nede på en konstant.
Svaret er , og siden logaritmer med ulikt grunntall skiller seg
med en konstant faktor, er det samme klasse som .
Kravet er å ikke blande dybde og bredde: påvirker antall løvnoder
(), ikke antall nivåer. For og er det 10 nivåer
under rota, altså 11 nivåer i alt.
Gitt .
a) Hvor mange nivåer har rekursjonstreet, asymptotisk?
b) Hvor mange løvnoder har det?
c) Løs rekurrensen med masterteoremet, og oppgi tilfellet.
Når masterteoremet ikke gjelder (~8 min)
Masterteoremet er et verktøy med en tydelig bruksanvisning, og et av de
vanligste tapene i sjanger B er å bruke det på en rekurrens det ikke dekker.
Fire situasjoner er verdt å kjenne igjen med det samme:
- Størrelsen krymper ved subtraksjon. er ikke på formen
i det hele tatt. Slike løses med iterasjonsmetoden, som hører
hjemme i kapittel 1.5.
- Delene er ulikt store. har to ulike
delproblemstørrelser, og teoremet forutsetter én felles .
- ligger i gapet. er på riktig form, men
treffer verken tilfelle 1, 2 eller 3.
- eller er ulovlig. Kravene er og . En «rekurrens»
med krymper aldri.
I alle fire tilfellene er riktig eksamenssvar å si at masterteoremet ikke
gjelder, og hvorfor. Sjanger B ber om metodens navn, og «masterteoremet gjelder
ikke her, fordi rekurrensen ikke er på formen » er et helt svar.
De rekurrensene som faller utenfor bruksområdet, og som derfor krever en annen
metode.
Fire typer: størrelsen krymper ved subtraksjon (), delene er
ulikt store (), ligger i gapet mellom tilfellene
(), eller eller .
Kravet er å si det høyt i besvarelsen. Å tvinge teoremet på en slik rekurrens
gir et svar som ser riktig ut og er galt — og å påpeke at det ikke gjelder, gir
uttelling.
For hver av rekurrensene under: avgjør om
masterteoremet gjelder, og løs den hvis det gjør det. Oppgi tilfellet.
a)
b)
c)
d)
Eksempeltabellen du bør kjenne igjen
Disse rekurrensene dukker opp igjen og igjen, og de dekker alle tre tilfellene.
Kjenner du dem igjen på formen, sparer du et halvt minutt per oppgave.
| Rekurrens | Tilfelle | Svar | Hvor den kommer fra | |
|---|---|---|---|---|
| 2, | Merge-Sort | |||
| 2, | Binary-Search | |||
| 1 | rekursjonen dominerer | |||
| 2, | log-faktor-fellen | |||
| 3 | toppen dominerer | |||
| 2, | glemt logaritme | |||
| ingen | — | , utenfor teoremet |
Den andre raden er verdt en kommentar. har , altså bare
ett delproblem, og , så . Siden
er nøyaktig det samme, er dette tilfelle 2 med , og svaret blir
. Det er kjøretiden til
Binary-Search.Begrepsbank
Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har
lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder
kjernestoffet.
Den formen en rekurrens må ha for at teoremet skal kunne brukes: like store
delproblemer av størrelse , pluss arbeid utenom rekursjonen.
Skrevet ut: med og .
Kravene på og er ufravikelige. Er , krymper problemet aldri; er
, gir rekursjonen ingen mening. Og delene må være like store — én felles
for alle delproblemene.
Størrelsen på gapet mellom og , målt i potenser av .
Den finnes bare i tilfelle 1 og 3, og den må være strengt positiv.
I tilfelle 1 skal ; i tilfelle 3 skal
.
Kravet betyr i praksis at gapet må være en hel potens av . Er avstanden bare
en logaritme, finnes ingen slik , og du er i tilfelle 2 i stedet.
Det er nettopp derfor tilfelle 2 må finnes.
Det første steget i enhver masterteorem-oppgave: finn det tallet du må opphøye
i for å få .
Eksempler: fordi ; fordi ;
fordi ; ; .
Kravet er å ha grunntallet riktig vei: er grunntallet og er argumentet.
, mens — en ombytting her gir feil tilfelle og
feil svar. Verdien behøver ikke være et helt tall.
Den vanligste feilen i rekurrensoppgaver: å velge tilfelle på øyemål i stedet
for å regne.
Tre former: glemt logaritmefaktor når , bruk av
tilfelle 2 med negativ , og feil utregnet .
Kravet som fjerner alle tre, er å skrive eksplisitt, deretter
på formen , og først da velge tilfelle. To ekstra
linjer på kladden, og fellen er borte.
Oppgavetypen dette kapitlet trener: du får en rekurrens og skal oppgi hva den
løser til.
Den er med i 76 % (13 av de 17 settene i grunnlaget). Svarformen er 1–3 linjer:
metodens navn, svaret på riktig form, og hvilket masterteorem-tilfelle du
brukte.
Kravet som skiller full fra delvis uttelling, er at metoden navngis. Å skrive
bare uten å si «masterteoremet, tilfelle 2» besvarer ikke hele
spørsmålet.
Rekurrensen for Merge-Sort og for enhver algoritme som deler problemet i to
like halvdeler og bruker lineær tid på å sette dem sammen igjen.
Her er , så , som er nøyaktig . Tilfelle 2
med gir .
Kravet du bør merke deg, er at er lovlig. Med et krav om strengt
positiv ville denne aller mest sentrale rekurrensen falt utenfor teoremet.
Rekurrensen for Binary-Search og for enhver algoritme som halverer
søkeområdet og gjør konstant arbeid per steg.
Her er og , så , som er nøyaktig
. Tilfelle 2 med gir .
Kravet som overrasker, er at er tillatt — teoremet krever , ikke
. Én rekursiv gren er nok.
To ulike størrelser som ofte forveksles. Dybden er hvor mange nivåer treet har;
bredden er hvor mange løvnoder det ender med.
Dybden er og styres av alene. Bredden er og
styres av både og .
Kravet er å lese spørsmålet nøye: «hvor mange nivåer?» og «hvor mye arbeid gjøres
i bunnen?» har ulike svar, og delspørsmålet om nivåer går igjen i grunnlaget.
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 Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.