You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
5.5 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. """ coding=utf-8
  2. Analytical Skills
  3. Practicum 4: algoritmiek
  4. (c) 2019 Hogeschool Utrecht
  5. Tijmen Muller (tijmen.muller@hu.nl)
  6. Naam:
  7. Klas:
  8. Studentnummer:
  9. Opdracht: beantwoord onderstaande vragen en werk onderstaande functies uit.
  10. Je kunt je functies testen met het gegeven raamwerk door het bestand uit te voeren (of met behulp
  11. van pytest, als je weet hoe dat werkt). Lever je werk in op Canvas als alle tests slagen.
  12. Let op! Je mag voor deze opdracht geen extra modules importeren met 'import'.
  13. """
  14. """
  15. 1. Sorteeralgoritme
  16. Hieronder staat de pseudocode van een sorteeralgoritme:
  17. 1. Startend vanaf het begin van een lijst, vergelijk elk element met zijn volgende buur.
  18. 2. Als het element groter is dan zijn volgende buur, verwissel ze van plaats.
  19. 3. Doorloop zo de lijst tot het eind.
  20. 4. Als er verwisselingen zijn geweest bij stap 2., ga naar stap 1.
  21. 1a. Handmatig toepassen
  22. Gegeven is de lijst l = [ 4, 3, 1, 2 ]. Geef de waardes die de lijst aanneemt bij álle tussenstappen bij
  23. toepassing van bovenstaand sorteeralgoritme.
  24. [antwoord]
  25. 1b. Implementatie
  26. Implementeer het sorteeralgoritme in Python in een functie genaamd my_sort(lst).
  27. 1c. Best en worst case
  28. - Stel je hebt een lijst met de waarden 1, 2 en 3. Bij welke volgorde van de waarden in de lijst is het
  29. sorteeralgoritme het snelste klaar (best-case scenario)? Hoeveel vergelijkingen (zoals beschreven
  30. in stap 1. van de pseudocode) zijn nodig geweest?
  31. [antwoord]
  32. - Bij welke volgorde van de waarden in de lijst is het sorteeralgoritme het minst snel klaar
  33. (worst-case scenario)? Hoeveel vergelijkingen zijn nodig geweest?
  34. [antwoord]
  35. - Stel je hebt een lijst met de waarden 1 tot en met 4. Wat is nu het best-case scenario?
  36. Hoeveel vergelijkingen zijn er nodig?
  37. En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig?
  38. [antwoord]
  39. - Stel je hebt een lijst met de waarden 1 tot en met n (je weet nu dus niet precies hoeveel waarden er in de
  40. lijst zitten, het zijn er 'n'). Wat is nu het best-case scenario? Hoeveel vergelijkingen zijn er nodig?
  41. En wat is nu het worst-case scenario? Hoeveel vergelijkingen zijn er nodig?
  42. [antwoord]
  43. 2. Recursie
  44. 2a. Lineair zoeken
  45. Implementeer het lineair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd
  46. linear_search_recursive(lst, target).
  47. 2b. Binair zoeken
  48. Implementeer het binair zoekalgoritme in Python op een *recursieve* manier. Maak hiervoor de functie genaamd
  49. binary_search_recursive(lst, target).
  50. """
  51. def my_sort(lst):
  52. """
  53. Sorteert gegeven lijst lst volgens het algoritme zoals beschreven in de pseudocode bij 1. hierboven.
  54. De sortering vind 'in place' plaats, met andere woorden: de gegeven lijst lst wordt *zelf* gemuteerd. Er is
  55. geen return-waarde.
  56. """
  57. return None
  58. def linear_search_recursive(lst, target):
  59. """
  60. Zoekt een element in gegeven lijst door middel van recursief lineair zoeken.
  61. Argumenten:
  62. lst -- de lijst waarin gezocht wordt (list)
  63. target -- het element dat gezocht wordt
  64. Retourneert of het element in de lijst voorkomt (bool)
  65. """
  66. return False
  67. def binary_search_recursive(lst, target):
  68. """
  69. Zoekt een element in gegeven lijst door middel van recursief binair zoeken.
  70. Argumenten:
  71. lst -- de lijst waarin gezocht wordt (list)
  72. target -- het element dat gezocht wordt
  73. Retourneert of het element in de lijst voorkomt (bool)
  74. """
  75. return False
  76. """==============================================[ HU TESTRAAMWERK ]====================================================
  77. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  78. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  79. """
  80. import random
  81. def test_my_sort():
  82. lst_test = random.sample(range(-99, 100), 6)
  83. lst_copy = lst_test.copy()
  84. my_sort(lst_test)
  85. assert lst_test == sorted(lst_copy), f"Fout: my_sort({lst_copy}) geeft {lst_test} in plaats van {sorted(lst_copy)}"
  86. def test_linear_search_recursive():
  87. for i in range(10):
  88. lst_test = random.sample(range(20), 6)
  89. target = random.randrange(20)
  90. outcome = linear_search_recursive(lst_test, target)
  91. assert outcome == (target in lst_test), \
  92. f"Fout: linear_search_recursive({lst_test}, {target}) geeft {outcome} in plaats van {target in lst_test}"
  93. def test_binary_search_recursive():
  94. for i in range(10):
  95. lst_test = sorted(random.sample(range(20), 6))
  96. target = random.randrange(20)
  97. outcome = binary_search_recursive(lst_test, target)
  98. assert outcome == (target in lst_test), \
  99. f"Fout: binary_search_recursive({lst_test}, {target}) geeft {outcome} in plaats van {target in lst_test}"
  100. if __name__ == '__main__':
  101. try:
  102. print("\x1b[0;32m")
  103. test_my_sort()
  104. print("Je functie my_sort() werkt goed!")
  105. test_linear_search_recursive()
  106. print("Je functie linear_search_recursive() werkt goed!")
  107. test_binary_search_recursive()
  108. print("Je functie binary_search_recursive() werkt goed!")
  109. print("\nGefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...")
  110. except AssertionError as ae:
  111. print("\x1b[0;31m")
  112. print(ae)