Eerste hertoets Algoritmiek

Download Report

Transcript Eerste hertoets Algoritmiek

Eerste hertoets Algoritmiek
28 mei 2014, 9.00 tot 11.00, Educ-α.
Motiveer je antwoorden kort! Zet je mobiel uit. Stel geen vragen over deze toets; als je een
vraag niet duidelijk vindt, schrijf dan op hoe je de vraag interpreteert en beantwoord de vraag
zoals je hem begrijpt.
Cijfer: Te halen 15pt (3 voor Lantaarns, 2 voor de anderen), cijfer is punten plus 1 gedeeld
door 1.5.
1. Substitutie-methode: Bewijs met de substitutie-methode dat de oplossing van T (n) =
T (n/2) + T (n/3) + O(n) voldoet aan T (n) = O(n).
Oplossing: Je moet altijd de impliciete constante expliciteren, dus bewijzen dat T (n) ≤
c.n voor een c uit gegeven T (n) ≤ T (n/2) + T (n/3) + d.n. Neem aan dat T (n0 ) ≤ c.n0 (Ind
Hyp) voor n0 < n, dan volgt
T (n) ≤
≤
≤
≤
T (n/2) + T (n/3) + d.n
c.n/2 + c.n/3 + d.n
(5/6.c + d).n
c.n
Gebruik Gegeven
Gebruik Ind Hyp
Vereenvoudig
mits c ≥ 6d
Beoordeling: Als het bewijs goed is 2pt. Als explicitering van constanten goed, maar
rekenwerk fout, 1pt.
A = Komt uit op O(n) ipv c.n. Het is verleidelijk om in de laatste stap (5/6.c + d).n in
een keer te vervangen door O(n), want “dat is wat je wilt bewijzen”. Het is fout, want na
explicitering van de constante is wat je wilt bewijzen: T (n) ≤ c.n; 0pt.
C = Geen of onjuiste Conditie op c afgeleid.
E = Vergeet de Explicitering van constanten. Als je dit niet doet voor het gegeven krijg
je vaak een Vage stap.
I = Let op, IndHyp gaat over n0 < n, nooit formuleren als T (n) = O(n); min 1/2.
R = Rekenwerk fout, aftrek naar ernst van het vergrijp.
S = Geen Substitutiemethode gebruikt, max 1pt.
V = Vage stap waarvan geen motivatie is gegeven of deze onterecht is, aftrek naar ernst
(bij bluffen geen punten).
2. Master Theorem: Bereken met de Master Theorem de (asymptotische) oplossing voor
de recurrentie T (n) = T (n/2) + O(n lg n).
b
Oplossing: Met a = 1 en b = 2 komt n log a op n0 = O(1). De extra term n lg n heeft een
grotere exponent van n (namelijk 1) en is dus polynomiaal meer. De oplossing is dus die
term, zodat T (n) = Θ(n lg n).
Beoordeling: Voor goed antwoord 2pt.
P = Antwoord wel goed maar Past gevaalen niet goed toe.
3. Topkeuze bij Knapsack: Bij het Knapsack (Rugzak) probleem zijn gegeven: n objecten
van gewicht wi en opbrengst pi , en een gewichtslimiet M . De uitvoer is de maximale
opbrengst van een deelverzameling van de objecten met totaalgewicht begrensd door M .
Geef een recursieve karakterisering van de te behalen opbrengst, waarbij je als topkeuze
neemt: wat is de index van het hoogste gekozen object.
Oplossing: Laat (als in het college) P [i, m] de winst zijn die te behalen is met limiet m
en een keuze uit i objecten. Randvoorwaarde is dat P [i, m] = 0 wanneer geen enkel object
past. Als j het hoogste gekozen object is, moet natuurlijk wj ≤ m (gekozen object moet
in de zak passen), de overige objecten moeten in de overgebleven ruimte passen en (omdat
j het hoogste is) verder wordt er gekozen uit de j objecten met index < j. Totale waarde
van dit alternatief is dus pj + P [j, m − wj ]. Je vindt dus het beste alternatief met
P [i, m] = max pj + P [j, m − wj ].
j:wj ≤M
Beoordeling: Max 2pt te behalen.
B = Je gebruikt de Binaire topkeuze (neem laatste object wel of niet), max 1pt.
M = Geen Maximalisering over alternatieven, max 1pt.
4. Stokzagen met Zaagbeperking: Een stokjesfabriek verzaagt een lat van integer lengte
n in een of meer stokjes van integer lengte, waarbij een stokje van lengte i wordt verkocht
voor pi . De lat kan op elke integer-positie s worden gezaagd, maar de zaagbaas heeft
bepaald dat er maximaal k keer gezaagd mag worden. De revenu van de lat is de opbrengst
van de stokjes.
(a) Geef een recurrente uitdrukking voor de revenu van een lat, waarbij je als topkeuze
hanteert: de positie van de hoogste zaagsnede (dwz., de zaagsnede met de hoogste positie).
(b) Wat is de looptijd van het resulterende DP-algoritme?
Oplossing: (a) De positie van de laatste zaagsnede (alternatieven) kan elke waarde van 0
tot n − 1 zijn (s = 0 betekent: niet zagen), geeft opbrengst pn−s , en een restlat van lengte
s. Echter, de restlat verzagen we met een ander probleem, namelijk: maximaal k − 1
keer zagen. Definieer R(i, j) als de revenu van een i-lat met hoogstens j zaagsneden. De
randvoorwaarde is R(0, j) = 0 en R(i, 0) = pi en verder
R(i, j) = max R(s, j − 1) + pi−s .
s=0..i−1
(b) Het evalueren van R(i, j) bekijkt Θ(i) initiatieven, elk in O(1) tijd dus kost Θ(i).
Sommeren over alle i ≤ n en j ≤ k geeft tijd Θ(n2 .k).
Beoordeling: Beide deelvragen 1pt.
A = Je bekijkt wel het Aantal deelinstanties, maar niet het aantal alternatieven van elk.
M = Vergeet Maximaliseren over alternatieven.
N = Revenu bij Nul keer zagen is niet 0 maar pi .
R = Randvoorwaarde vergeten.
Z = Je verandert het aantal Zaagsneden niet in je deeloplossing.
5. Greedy Plaatsing van Lantaarns: Een lange weg heeft n huizen, met huis i op afstand
si meter van het begin (dit is gesorteerd dus i < j ⇒ si ≤ sj ). Het gemeentebestuur
gaat lantaarns plaatsen en heeft besloten dat elk huis een lantaarn moet hebben binnen
M meter. Voorbeeld: Als de s zijn: 340, 670, 1200, 1600, 2400, 2710 en M = 500 dan
kan het met drie lantaarns, bv. op posities 500, 1500 en 2400.
Geef een algoritme dat in lineaire tijd het minimaal aantal benodigde lantaarns berekent.
Wat is de uitvoer van je algoritme in het voorbeeld? Waarom is je algoritme correct (geef
GCP)?
Oplossing: Als de verzameling huizen niet leeg is, moet het hoogste huis sn−1 worden
belicht met een lamp hoogstens M ervanaf.
Er is een optimale oplossing met de hoogste lamp op plek sn−1 −M . GCP: Bij elke oplossing
met een lamp hoger dan dat, is er een oplossing met evenveel lampen die de hoogste op
plek sn−1 − M heeft. Bewijs: vervang de hoogste lamp door die waarde; mogelijk worden
lagere huizen dan n − 1 nu beschenen, huis n − 1 blijft nog beschenen, maar waar het nu
donker wordt (boven sn−1 ) zijn geen huizen.
Algoritme: zet een lamp op verste huis min M , verwijder alle beschenen huizen, herhaal
tot leeg.
Voorbeeld: Lamp op 2210 beschijnt 2400 en 2710; lamp op 1100 beschijnt 670, 1200 en
1600; lamp op 0 (of –160) beschijnt 340.
Beoordeling: Max 3pt, 1 voor het algoritme (half voor voorbeeld) en anderhalf voor de
GCP.
G = GCP niet of onvolledig beargumenteerd.
V = Zet paal Voor de deur ipv M verderop.
6. Samenhangscomponenten: Gegeven een ongerichte graaf G = (V, E), gerepresenteerd
als Adjacency List. Beschrijf een algoritme dat in lineaire tijd O(n + m) telt, uit hoeveel
samenhangscomponenten G bestaat.
Oplossing: Doorloop alle knopen; per knoop voer je een BFS uit (of DFS) als hij nog
niet is doorzocht. Het aantal componenten is gelijk aan het aantal keren dat BFS werd
gestart.
Beoordeling: Max 2pt voor goed algoritme, voldoende precies beschreven. (Gelijk aan
commando delen in de praktikumopdracht WegOnderhoud.)
L = Ipv markeren, verwijderen uit Lijst; te duur, -1/2.
M = Gebruik MinHeap, niet lineair omdat operaties duur zijn, -1/2.
U = Je kunt componenten tellen met Union-Find (bijhouden hoeveel sets je nog hebt aan
het eind) maar dat is (net!) niet lineair; max 1pt.
Z = Zoeken naar een witte knoop is duur.
7. DFS Volgorde:
Op dit netwerk wordt een Depth First Search uitgevoerd met
startpunt A en elke knoop exploreert zijn buren in alfabetische
volgorde. In welke volgorde worden de knopen ontdekt?
Oplossing: A-B-C-E-D-I-H-J-F-G-K
Beoordeling: Voor de goede volgorde 2pt. Codes:
B = ABGCFEJDIHK is de volgorde van BFS, 0pt.
E = E´en punt staat op verkeerde plaats, 1pt.