[2] | 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 |
|
---|