def rek_resitev(i, vrednosti): ''' vrne maksimalno vrednost vsote, ki jo lahko dobimo iz tabele vrednosti[:i] če v vsoti ne smemo imeti sosednjih elementov ''' if i == 1: # imamo le eno vrednost return vrednosti[0] if i == 2: # imamo dve vrednosti return max(vrednosti[0], vrednosti[1]) brez = rek_resitev(i - 1, vrednosti) # i-tega ne vzamemo z = rek_resitev(i - 2, vrednosti) + vrednosti[i - 1] # i-tega vzamemo return max(brez, z) def opt_vsota(stevila): '''Vrne maksimalno vsoto, če ne smemo vzeti sosednjih elementov''' return rek_resitev(len(stevila), stevila) import timeit, random import matplotlib.pyplot as plt num = [] cas = [] for i in range(20, 35): tab = [random.randint(1, 100) for _ in range(i)] num.append(i) meri = timeit.timeit('opt_vsota(tab)', globals = globals(), number = 5) cas.append(meri) print(i, meri) plt.plot(num, cas) plt.show()