|
|
@ -1,89 +1,120 @@ |
|
|
|
""" coding=utf-8 |
|
|
|
|
|
|
|
Analytical Skills - practicum 4: algoritmiek |
|
|
|
Analytical Skills |
|
|
|
Practicum 4: algoritmiek |
|
|
|
|
|
|
|
(c) 2019 Hogeschool Utrecht |
|
|
|
Tijmen Muller (tijmen.muller@hu.nl) |
|
|
|
|
|
|
|
|
|
|
|
Naam: |
|
|
|
Klas: |
|
|
|
Klas: |
|
|
|
Studentnummer: |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
Opdracht: beantwoord onderstaande vragen en werk onderstaande functies uit. Elke functie krijgt als argument een |
|
|
|
(mogelijk ongesorteerde) lijst *lst* met gehele getallen (int). |
|
|
|
|
|
|
|
Let op! Je mag voor deze opdracht geen extra modules importeren met 'import'. |
|
|
|
""" |
|
|
|
""" |
|
|
|
1. Sorteeralgoritme |
|
|
|
1. Sorteeralgoritme |
|
|
|
|
|
|
|
Hieronder staat de pseudocode van een sorteeralgoritme: |
|
|
|
1. Startend vanaf het begin van een lijst, vergelijk elk element met zijn volgende buur. |
|
|
|
2. Als het element groter is dan zijn volgende buur, verwissel ze van plaats. |
|
|
|
3. Doorloop zo de lijst tot het eind. |
|
|
|
4. Als er verwisselingen zijn geweest bij stap 2., ga naar stap 1. |
|
|
|
Hieronder staat de pseudocode van een sorteeralgoritme: |
|
|
|
1. Startend vanaf het begin van een lijst, vergelijk elk element met zijn volgende buur. |
|
|
|
2. Als het element groter is dan zijn volgende buur, verwissel ze van plaats. |
|
|
|
3. Doorloop zo de lijst tot het eind. |
|
|
|
4. Als er verwisselingen zijn geweest bij stap 2., ga naar stap 1. |
|
|
|
|
|
|
|
1a. Handmatig toepassen |
|
|
|
Gegeven is de lijst l = [ 4, 3, 1, 2 ]. Geef de waardes die de lijst aanneemt bij álle tussenstappen bij |
|
|
|
toepassing van bovenstaand sorteeralgoritme. |
|
|
|
1a. Handmatig toepassen |
|
|
|
Gegeven is de lijst l = [ 4, 3, 1, 2 ]. Geef de waardes die de lijst aanneemt bij álle tussenstappen bij |
|
|
|
toepassing van bovenstaand sorteeralgoritme. |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
1b. Implementatie |
|
|
|
Implementeer het sorteeralgoritme in Python in een functie genaamd my_sort(lst). Lever je code pas in als alle |
|
|
|
tests geen foutmeldingen meer geven. |
|
|
|
1b. Implementatie |
|
|
|
Implementeer het sorteeralgoritme in Python in een functie genaamd my_sort(lst). |
|
|
|
|
|
|
|
1c. Best en worst case |
|
|
|
- Stel je hebt een lijst met de waarden 1, 2 en 3. Bij welke volgorde van de waarden in de lijst is het |
|
|
|
sorteeralgoritme het snelste klaar (best-case scenario)? Hoeveel vergelijkingen (zoals beschreven in stap 1. |
|
|
|
van de pseudocode) zijn nodig geweest? |
|
|
|
|
|
|
|
1c. Best en worst case |
|
|
|
- Stel je hebt een lijst met de waarden 1, 2 en 3. Bij welke volgorde van de waarden in de lijst is het |
|
|
|
sorteeralgoritme het snelste klaar (best-case scenario)? Hoeveel vergelijkingen (zoals beschreven |
|
|
|
in stap 1. van de pseudocode) zijn nodig geweest? |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
- Bij welke volgorde van de waarden in de lijst is het sorteeralgoritme het minst snel klaar |
|
|
|
(worst-case scenario)? Hoeveel vergelijkingen zijn nodig geweest? |
|
|
|
|
|
|
|
[anwoord] |
|
|
|
|
|
|
|
- Stel je hebt een lijst met de waarden 1 tot en met 4. Wat is nu het best-case scenario? Hoeveel vergelijkingen |
|
|
|
zijn er nodig? |
|
|
|
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
- Bij welke volgorde van de waarden in de lijst is het sorteeralgoritme het minst snel klaar |
|
|
|
(worst-case scenario)? Hoeveel vergelijkingen zijn nodig geweest? |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
- Stel je hebt een lijst met de waarden 1 tot en met n (je weet nu dus niet precies hoeveel waarden er in de lijst |
|
|
|
zitten, het zijn er 'n'). Wat is nu het best-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
|
|
|
|
- Stel je hebt een lijst met de waarden 1 tot en met 4. Wat is nu het best-case scenario? |
|
|
|
Hoeveel vergelijkingen zijn er nodig? |
|
|
|
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
|
|
|
|
- Stel je hebt een lijst met de waarden 1 tot en met n (je weet nu dus niet precies hoeveel waarden er in de |
|
|
|
lijst zitten, het zijn er 'n'). Wat is nu het best-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig? |
|
|
|
|
|
|
|
[antwoord] |
|
|
|
|
|
|
|
2. Recursie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Recursie |
|
|
|
|
|
|
|
2a. Lineair zoeken |
|
|
|
Implementeer het lineair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd |
|
|
|
linear_search_recursive(lst, target). |
|
|
|
|
|
|
|
2a. Lineair zoeken |
|
|
|
Implementeer het lineair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd |
|
|
|
linear_search_recursive(lst, target). Lever je code pas in als alle tests geen foutmeldingen meer geven. |
|
|
|
|
|
|
|
2b. Binair zoeken |
|
|
|
Implementeer het binair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd |
|
|
|
binary_search_recursive(lst, target). Lever je code pas in als alle tests geen foutmeldingen meer geven. |
|
|
|
2b. Binair zoeken |
|
|
|
Implementeer het binair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd |
|
|
|
binary_search_recursive(lst, target). |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def my_sort(lst): |
|
|
|
""" Implementatie van het sorteeralgoritme die gegeven lijst lst sorteert """ |
|
|
|
pass |
|
|
|
""" |
|
|
|
Sorteert gegeven lijst lst volgens het algoritme zoals beschreven in de pseudocode bij 1. hierboven. |
|
|
|
De sortering vind 'in place' plaats, met andere woorden: de gegeven lijst lst wordt *zelf* gemuteerd. Er is |
|
|
|
geen return-waarde. |
|
|
|
""" |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def linear_search_recursive(lst, target): |
|
|
|
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van recursief lineair zoeken. """ |
|
|
|
""" |
|
|
|
Zoekt een element in gegeven lijst door middel van recursief lineair zoeken. |
|
|
|
|
|
|
|
Argumenten: |
|
|
|
lst -- de lijst waarin gezocht wordt (list) |
|
|
|
target -- het element dat gezocht wordt |
|
|
|
|
|
|
|
Retourneert of het element in de lijst voorkomt (bool) |
|
|
|
""" |
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
def binary_search_recursive(lst, target): |
|
|
|
""" Bepaalt of *target* voorkomt in lijst *lst* door middel van recursief binair zoeken. """ |
|
|
|
""" |
|
|
|
Zoekt een element in gegeven lijst door middel van recursief binair zoeken. |
|
|
|
|
|
|
|
Argumenten: |
|
|
|
lst -- de lijst waarin gezocht wordt (list) |
|
|
|
target -- het element dat gezocht wordt |
|
|
|
|
|
|
|
Retourneert of het element in de lijst voorkomt (bool) |
|
|
|
""" |
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
======================================================================================================================== |
|
|
|
"""==============================================[ HU TESTRAAMWERK ]==================================================== |
|
|
|
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen! |
|
|
|
Je kunt je code testen door deze file te runnen of met behulp van pytest. |
|
|
|
""" |
|
|
@ -94,7 +125,7 @@ def test_my_sort(): |
|
|
|
lst_test = random.sample(range(-99, 100), 6) |
|
|
|
lst_copy = lst_test.copy() |
|
|
|
my_sort(lst_test) |
|
|
|
assert lst_test == sorted(lst_copy), sa">"Fout: my_sort({}) geeft {} in plaats van {}".format(lst_copy, lst_test, sorted(lst_copy)) |
|
|
|
assert lst_test == sorted(lst_copy), n">f"Fout: my_sort({lst_copy}) geeft {lst_test} in plaats van {sorted(lst_copy)}" |
|
|
|
|
|
|
|
|
|
|
|
def test_linear_search_recursive(): |
|
|
@ -124,9 +155,7 @@ if __name__ == '__main__': |
|
|
|
test_binary_search_recursive() |
|
|
|
print("Je functie binary_search_recursive() werkt goed!") |
|
|
|
|
|
|
|
print("Gefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...") |
|
|
|
print("e">\nGefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...") |
|
|
|
|
|
|
|
except AssertionError as ae: |
|
|
|
print("\x1b[0;31m" + str(ae)) |
|
|
|
|
|
|
|
|