Datastrukturer og Algoritmer, dat C

Henning Christiansen

2/10-2002

 

Opgaver til forel¾sningen 1/10-2002 om Rekursion, dynamisk programmering, m.v.

 

Det foreslŒs at prioritere 1.1, 1.2, 1.4 og 3 h¿jest. Opgave 2 er velegnet som hjemmesyssel.

 

Opgave 1

Betragt programmet side 271 i bogen som handler om at give byttepenge tilbage

(programtekst med hovedprogram kan findes via link pΠkursushjemmesiden).

 

  1. I forel¾sningen forklarede vi kun den del af algoritmen, som handlede om at bestemme det mindste antal antal m¿nter, som skal til for at give et vist bel¿b tilbage. Men algoritmen indeholder faktisk ogsŒ noget ekstra, som g¿r det mulig at udskrive hvilke m¿nter der faktisk er tale om. Men det er ikke forklaret hvordan eller hvorfor det virker Ñ og de benyttede variabelnavne er heller ikke hj¾lpsomme. Opgaven lyder nu: Find ud af og forklar for hinanden hvordan denne del af algoritmen virker.
  2. Nu skal programmet tilpasses danske forhold, og for nemheds skyld, regn alt i ¿rebel¿b. Inds¾t data svarende til danske sedler og m¿nter, og tilf¿j  princippet Órund-op-ned-til-n¾rmeste-25¿reÓ. ImplementŽr og aftest programmet.
  3. Algoritmen synes ikke at v¾re specielt effektiv.
  1. Der findes faktisk mere optimale mŒder at give penge tilbage pŒ end den som vor algoritme nŒr frem til. Tag bel¿bet 99kr. Vi vil forvente 50+20+20+5+2+2, dvs. 6 m¿nter. Men den kan klares med to enheder: Òhar du en krone, fŒr du en hund af migÓ. Tilpas algoritmen sŒ den tillader denne mŒde at give tilbage pŒ og minimerer det totale antal m¿nter, som gives tilbage.
  2. Bogen omtaler en ÓgreedyÓ algoritme side 268, som nogen gange virker og nogen gange ikke virker. Vil den virke i Danmark? Hvilke krav skal v¾re opfyldt af en m¿ntsystem for at ÓgreedyÓ virker?

 

Opgave 2

Tag udgangspunkt i programmet ÓdrawRulerÓ side 247 i bogen (programtekst med hovedprogram han findes via link pŒ kursushjemmesiden). Det indeholder noget primitivt grafik, som viser hvordan man definere sig en tegneplade og tegne en streg. Det er sŒdan set det eneste vi skal bruge fra det program. Brug disse faciliteter til at l¿se sŒ mange af f¿lgende opgaver som du gider, eller hit selv pŒ nogen, der er sjovere:

1/1, 1/2, 2/3, 3/5, 5/8, 8/13, 13/21, 21/34...

 

Opgave 3

Betragt de fire versioner af Fibonacci-beregnere i foresl¾sningsOHerne (via kursets hjemmeside), og angive ÒOÓ udtryk for dem.

  1. Angiv ÒOÓ udtryk for dem hver is¾r, nŒr de kaldes Žn enkelt gang med et eller anden n.
  2. Angive ÒOÓ udtryk for et program som ikke laver andet end at kalde pŒ Fibonacci-metoden. Det antages, at den kaldes m gange med et argument som er begr¾nset opadtil med n.