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.

147 lines
5.6 KiB

  1. """
  2. Analytical Skills - opgave zoeken
  3. (c) 2019 Hogeschool Utrecht
  4. Tijmen Muller (tijmen.muller@hu.nl)
  5. """
  6. import random
  7. from math import floor
  8. def linear_search(lst, target):
  9. """ Bepaalt of *target* voorkomt in lijst *lst* door middel van lineair zoeken. """
  10. return False
  11. def linear_search_index(lst, target):
  12. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. lineair zoeken. """
  13. index = 0
  14. return -1
  15. def linear_search_index_steps(lst, target):
  16. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. lineair zoeken, en het aantal benodigde stappen. """
  17. index = 0
  18. steps = 0
  19. return -1, steps
  20. def binary_search(lst, target):
  21. """ Bepaalt of *target* voorkomt in lijst *lst* door middel van binair zoeken. """
  22. # stap 1
  23. mini = 0
  24. # stap 6
  25. while False: # hoelang ga je door met zoeken?
  26. # stap 2
  27. # stap 3
  28. return True
  29. # stap 4
  30. # stap 5
  31. return False
  32. def binary_search_index(lst, target):
  33. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken. """
  34. return -1
  35. def binary_search_index_steps(lst, target):
  36. """ Geeft de positie (m.a.w. index) van *target* in lijst *lst* d.m.v. binair zoeken, en het aantal benodigde stappen. """
  37. steps = 0
  38. return (-1, steps)
  39. """
  40. ========================================================================================================================
  41. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  42. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  43. """
  44. def test_linear_search():
  45. for i in range(10):
  46. lst_test = random.sample(range(20), 10)
  47. target = random.randrange(20)
  48. assert linear_search(lst_test, target) == (target in lst_test), "\x1b[0;31mFout: linear_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search(lst_test, target), target in lst_test)
  49. def test_linear_search_index():
  50. for i in range(10):
  51. lst_test = random.sample(range(20), 10)
  52. target = random.choice(lst_test)
  53. assert linear_search_index(lst_test, target) == lst_test.index(target), "\x1b[0;31mFout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index(lst_test, target), lst_test.index(target))
  54. lst_test = [0, 1, 2]
  55. assert linear_search_index(lst_test, 3) == -1, "\x1b[0;31mFout: linear_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, linear_search_index(lst_test, 3), -1)
  56. def test_linear_search_index_steps():
  57. for i in range(10):
  58. lst_test = random.sample(range(20), 10)
  59. target = random.choice(lst_test)
  60. assert linear_search_index_steps(lst_test, target)[0] == lst_test.index(target), "\x1b[0;31mFout: linear_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, linear_search_index_steps(lst_test, target)[0], lst_test.index(target))
  61. def test_binary_search():
  62. for i in range(10):
  63. lst_test = sorted(random.sample(range(20), 10))
  64. target = random.randrange(20)
  65. assert binary_search(lst_test, target) == (target in lst_test), "\x1b[0;31mFout: binary_search({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search(lst_test, target), target in lst_test)
  66. def test_binary_search_index():
  67. for i in range(10):
  68. lst_test = sorted(random.sample(range(20), 10))
  69. target = random.choice(lst_test)
  70. assert binary_search_index(lst_test, target) == lst_test.index(target), "\x1b[0;31mFout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index(lst_test, target), lst_test.index(target))
  71. lst_test = [0, 1, 2]
  72. assert binary_search_index(lst_test, 3) == -1, "\x1b[0;31mFout: binary_search_index({}, {}) geeft {} in plaats van {}".format(lst_test, 3, binary_search_index(lst_test, 3), -1)
  73. def test_binary_search_index_steps():
  74. for i in range(10):
  75. lst_test = sorted(random.sample(range(20), 10))
  76. target = random.choice(lst_test)
  77. assert binary_search_index_steps(lst_test, target)[0] == lst_test.index(target), "\x1b[0;31mFout: binary_search_index_steps({}, {}) geeft {} in plaats van {}".format(lst_test, target, binary_search_index_steps(lst_test, target)[0], lst_test.index(target))
  78. if __name__ == '__main__':
  79. try:
  80. test_linear_search()
  81. print("\x1b[0;32mJe functie linear_search() werkt goed!")
  82. test_linear_search_index()
  83. print("\x1b[0;32mJe functie linear_search_index() werkt goed!")
  84. test_binary_search()
  85. print("\x1b[0;32mJe functie test_binary_search() werkt goed!")
  86. test_binary_search_index()
  87. print("\x1b[0;32mJe functie test_binary_search_index() werkt goed!")
  88. test_linear_search_index_steps()
  89. print("\x1b[0;32mJe functie test_linear_search_index_steps() werkt goed!")
  90. test_binary_search_index_steps()
  91. print("\x1b[0;32mJe functie test_binary_search_index_steps() werkt goed!")
  92. size = int(input("\x1b[0;30mGeef een grootte voor de lijst: "))
  93. lst_test = list(range(size))
  94. print("Ik ga zoeken in:", lst_test)
  95. tgt = int(input("Geef een getal: "))
  96. (idx, cnt) = linear_search_index_steps(lst_test, tgt)
  97. print("Het lineair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.")
  98. (idx, cnt) = binary_search_index_steps(lst_test, tgt)
  99. print("Het binair zoekalgoritme vond '" + str(tgt) + "' op positie '" + str(idx) + "' na " + str(cnt) + " stappen.")
  100. except AssertionError as ae:
  101. print(ae)