source: liacs/comp/opdracht-2.txt@ 385

Last change on this file since 385 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 5.0 KB
RevLine 
[2]1Rick van der Zwet, Universiteit Leiden
2StudentID: 0433373
3Version: $Id: opdracht-2.txt 561 2008-04-12 13:55:24Z rick $
4Complexiteit 2008 --- opdracht 1
5
6a) Bewijs met behulp van een beslissingsboomargument dat elk algoritme
7dat van n verschillende waarden de grootste en de op een na grootste
8waarde bepaalt met behulp van arrayvergelijkingen, ten minste 2
9[lg(n-1)] vergelijkingen moet doen in de worst case.
10
11Volgens de stelling van beslissingsbomen (pagina 4. sheet
12comp-2008-04.pdf) is elk algaritme dat de grootste cq de kleinste
13beplaald uit een array met n elementen, met uitsluitend gebaseerd op
14array vergelijkingen doet ten minste floor(lg n) vergelijkingen in worst
15case.
16
17In dit geval moet er dus eerst floor(lg n) verstookt worden om de
18grootste te vinden. Nadien wordt deze uit het array gehaald en wordt met
19floor(lg(n-1)) stappen de een naar grootste gevonden, dit bij elkaar
20opgetelt levert op ceil(lg n) + ceil(lg(n-1)) = 2 * ceil(lg(n-1))
21
22
23=== BEGIN Uitstapje toernooi methode ==
24A B C D E F G H
25\ / \ / \ / \ /
26 * * * *
27 \ / \ /
28 * *
29 \ /
30 -* -
31
32Om slim de hoogste bepalen zullen alle elementen bekeken moeten worden,
33waarbij dit via een boom structuur het snelste gedaan moet worden,
34waarbij in elke knoop de grootste van de 2 gekozen worden. De knop op
35de grootste diepte heeft dan uiteindelijk de grootste waarde.
36De een na grootste (ENG) heeft het tijdens dit process moeten afleggen
37tegen de grootste knoop. Als we het 'winnende' pad dus terugvolgen en
38uit alle verliezende knopen de grootste zoeken zullen we de ENG vinden.
39=== END Uitstapje toernooi methode ===
40
41
42b) Leg duidelijk ut waarom W(n) voldoet aan de volgende recurrente
43betrekking:
44W(n) = 3 n=3
45W(n) = 3 * W(n/3) + 4 n>3, n=3^k
46in het algoritme waarbij recursief de grootste en de ENG, uit de eerste
47n/3, de middelste en de laaste n/3 array-elementen. Daarna door de 6
48gevonden waardes handig met elkaar te vergelijken, de grootste en ENG
49uit het array. W(n) het aantal arravergelijkingen (in de worst case).
50
51In het basis geval is het simpel, als je drie waardes het A, B, C kan je
52met 3 vergelijkingen de hoogste en ENG bepalen. Door eerst A > B te
53doen, de grootste hiervan met C te vergelijken en deze als grootste
54voordragen. En daarna tussen beiden verliezen de grootste kiezen en deze
55als ENG voordragen.
56In de recursie stap kost het je 3 * W(n/3) stappen omdat het array in 3
57delen is verdeeld. Nadat je deze 6 waarden hebt gevonden kost het 4
58stappen om hierin de grooste en de ENG te vinden, door gebruik te maken
59van dit systeem. er zijn 2 vergelijkingen nodig om de grootste uit 3 te
60bepalen, door eerst 2 te vergelijken en de grootste met de overgebleven
61waarde 2 controleren. Aangezien dit zowel voor de 3 grootste als voor de
623 ENG gedaan moet worden zijn er 4 stappen nodig.
63
64
65c) Los de recurrente betrekking uit b. op door deze herhaald in zichzelf
66in te vullen en bewijs daarna mbv volledige inductie dat de aldus
67gevonden oplossing (uitgedrukt in n) inderdaad voldoet.
68
69hulpformule = sum(i=0,l-1,3^i) = 1/2 * (3^l -1)
70n=3^k
71
72W(n) = 3 * W(n/3) + 4
73W(n) = 3 * (3 * W(n/9) + 4) + 4 = 3^2 * W(n/9) + 4 + 4*3
74W(n) = 3 * 3 * (3 * W(n/27) + 4) + 4 + 4*3 = 3^3 * W(n/27) + 4 + 4*3 + 4*3^2
75W(n) = 3^k + 2 ( 3^(k-1) - 1)
76
77Bewijs volledige inductie:
78W(3) = 3^1 + 2 ( 3^(1-1) - 1) = 3 + 2 * (1 - 1) = 3
79W(n+3) = 3 * W(n) + 4 = 3 * (3^(k-1) + 2 (3^(k-2) - 1)) + 4 = 3^k + 2 (
80 3^(k-1) - 3) + 4 = 3^k + 2(3^(k-1) -1)
81
82
83d) Kun je alleen op grond van hetgeen je in a. bewezen hebt, concluderen
84dat deze methode niet optimaal is?
85
86Er is aangetoond de worst case ten minste 2 * ceil(lg(n-1)) stappen moet doen
87in het slechtste geval, het algotitme bij c. zit daar boven boven.
88Hierdoor kan gezegd worden dat dit algoritme niet optimaal is.
89
90De tweede methode bepaalt eerst recursief de grootste en de ENG waarde
91van de n - 3 elementen. Daarna wordt van deze waardes en de laatste 3
92elementen de grootste en ENG berekend.
93e) Laat zien dat deze laatste stap met 5 array-vergelijkingen kan worden
94gedaan en stel eer recurrente betrekking op voor het aantal
95vergelijkingen V(n) dat dit algoritme doet in het worst case geval.
96
97Er zijn A B C D E, waarbij A>B. de volgende vijf stappen zullen dat de
98hoogste en een naar hoogste naar boven halen.
991) C>D - Maak C de hoogste van het paar C,D -> stap 2
1002) C>E - Maak C de hoogste van het paar C,E -> stap 3
1013) D>E - Maak D de hoogste van het paar D,E -> stap 4
1024) A,C - Kijk of C de hoger is als de hoogste, zoja dat is C de hoogste
103 stap 5, zoniet A de hoogste en naar stap 6
1045) A,D - Kijk of D hoger is als A, zoja D is ENG, anders A is ENG
1056) B,C - Kijk of C hoger is als B, zoja C is ENG, anders B is ENG
106
107Recurrente betrekking let op, n = k * 3 + 2
108V(n) = 1 ,n=2
109V(n) = V(n-3) + 5 ,n>2
110
111
112f. Los de recurrente betrekking van e. op.
113V(n) = V(n-3) + 5
114V(n) = (V(n-6) + 5) + 5
115V(n) = ((V(n-9) + 5) + 5) + 5
116V(n) = ((n-2)/3) * 5 + 1
117
118
119g. Is deze tweede methode optimaal?
120
121Deze 2de methode is wederom niet optimaal, kijk bijvoorbeeld naar het
122n=11. Hierbij is cleil(2 * lg(11 -1)) = 7, tewijl de methode ((11 -
1232)/3) * 5 + 1 = 16 nodig heeft.
124
125
126
127
128
129
130
Note: See TracBrowser for help on using the repository browser.