[2] | 1 | Rick van der Zwet, Universiteit Leiden
|
---|
| 2 | StudentID: 0433373
|
---|
| 3 | Version: $Id: opdracht-1.txt 561 2008-04-12 13:55:24Z rick $
|
---|
| 4 | Complexiteit 2008 --- opdracht 1
|
---|
| 5 |
|
---|
| 6 | a. Ga na hoe het algoritme werkt voor het array 5,6,1,2,3,4. Laat zien
|
---|
| 7 | hoe het array eruit ziet _elke_ keer nadat regel (10) is uitgevoerd.
|
---|
| 8 | N.B: Buurt 0 is de beginstand
|
---|
| 9 |
|
---|
| 10 | B: Array - Indexgetal
|
---|
| 11 | 0: 5.6.1.2.3.4 - 6
|
---|
| 12 | 1: 5.6.1.4.3.2 - 6
|
---|
| 13 | 2: 5.2.1.4.3.6 - 6
|
---|
| 14 | 3: 5.2.1.4.3.6 - 6
|
---|
| 15 | 4: 5.2.3.4.1.6 - 5
|
---|
| 16 | 5: 1.2.3.4.5.6 - 5
|
---|
| 17 | 6: 1.2.3.4.5.6 - 5
|
---|
| 18 | 7: 1.2.3.4.5.6 - 4
|
---|
| 19 | 8: 1.2.3.4.5.6 - 3
|
---|
| 20 | 9: 1.2.3.4.5.6 - 2
|
---|
| 21 |
|
---|
| 22 |
|
---|
| 23 |
|
---|
| 24 | b. Toon aan dat vergelijken van array-elementen in regel (7) een goede
|
---|
| 25 | basisoperatie is ,als n >= 0, in orde van grootte.
|
---|
| 26 |
|
---|
| 27 | #08 <= #07
|
---|
| 28 | #09 == #07
|
---|
| 29 | #06 == #07 + 1
|
---|
| 30 | #05 <= #06
|
---|
| 31 | #10 <= #06
|
---|
| 32 | #11 == #10
|
---|
| 33 | #12 <= #11
|
---|
| 34 | #04 == #05 + 1
|
---|
| 35 | #03 <= #04
|
---|
| 36 | #13 <= #04
|
---|
| 37 | #12 == #13 + 1
|
---|
| 38 | #01 == 1
|
---|
| 39 |
|
---|
| 40 |
|
---|
| 41 |
|
---|
| 42 | c. Regel (10) kan maximaal 2n - 2 keer worden uitgevoerd. Leg uit
|
---|
| 43 | waarom. Gebruik dit resultaat om een redelijke bovengrens te bepalen
|
---|
| 44 | voor het aantal vergelijkingen tussen array elementen (regel (7)).
|
---|
| 45 |
|
---|
| 46 | Voor het goede resultaat zal eerst de worst case bepaald moeten worden
|
---|
| 47 | als gekeken wordt naar regel (10). Hierbij is het verwisselingen dat toe
|
---|
| 48 | moet passen als alle getallen verkeerd staan n - 1 (het laatste getal
|
---|
| 49 | staat automatisch goed). Verder moet er nog n - 1 gewisseld worden,
|
---|
| 50 | hierbij gaat het echter om de 'controle' wissel en zal deze wissel
|
---|
| 51 | wezelijk dus niets veranderen het rijtje. Bij elkaar opgeteld is 2n - 2
|
---|
| 52 | dus de eindscore.
|
---|
| 53 |
|
---|
| 54 | Om dit resultaat naar het aantal array vergelijkingen te vertalen is het
|
---|
| 55 | slechte geval het meest aantrekkelijk. Hierbij worden in de 'eerste'
|
---|
| 56 | index getal (n) de verwisselingen gedaan, dit levert dan telkens n - 1
|
---|
| 57 | verwisselingen op, subtotaal n^2 - n De controle verwisselingen kosten telkens 1 minder en
|
---|
| 58 | leveren zo de reeks (n - 1) + (n - 2) + ... + (n - (n -1)) + (n - n) =
|
---|
| 59 | 0.5n^2 - 0.5n
|
---|
| 60 | Dit gesommeerd levert op 1.5n^2 - 1.5n
|
---|
| 61 |
|
---|
| 62 |
|
---|
| 63 |
|
---|
| 64 | d. Best case, met in het antwoord aantal vergelijkingen
|
---|
| 65 |
|
---|
| 66 | De best case is een oplopend gesorteerd rijtje, alle getallen staan al
|
---|
| 67 | op de goede plek, welke enkele de controle vergelijkingen nodig heeft.
|
---|
| 68 | Dit is 0.5n^2 - 0.5n (zie c.). Tijdens n = 1 worden er 0 vergelijkingen
|
---|
| 69 | uitgevoerd.
|
---|
| 70 |
|
---|
| 71 |
|
---|
| 72 |
|
---|
| 73 | e. Worst case, met in het antwoord aantal vergelijkingen
|
---|
| 74 |
|
---|
| 75 | De worst case is een rijtje waarbij in de grootste index alle
|
---|
| 76 | verwisselen gedaan moeten worden (en dus allen verkeerd staan). Zoeen
|
---|
| 77 | rijtje heeft bijvoorbeeld de vorm 6.0.1.2.3.4.5. Aantal vergelijkingen
|
---|
| 78 | dat gedaan moet worden is 1.5n^2 - 1.5n (zie e)
|
---|
| 79 |
|
---|
| 80 |
|
---|
| 81 |
|
---|
| 82 |
|
---|
| 83 |
|
---|
| 84 |
|
---|
| 85 |
|
---|
| 86 |
|
---|