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