Сначала я немного скептически относился к тому, работает ли ваш алгоритм в O (n). Также следующая программа
import timeit, random
import matplotlib.pyplot as plt
code = """
def Algorithm(A):
ai = max(A) # find largest integer
i = A.index(ai)
A[i] = 0
aj = max(A) # finding second largest integer
A[i] = abs(ai - aj) # update A[i]
j = A.index(aj)
A[j] = 0 # replace the A[j] by 0
if aj == 0: # if second largest item equals
return ai # to zero return the largest integer
return Algorithm(A) # call Algorithm(A) with updated A
Algorithm(%s)
"""
x, y = [], []
lst = [random.randint(-1000, 10000)]
for i in range(1000):
lst.append(random.randint(-1000, 10000))
time = timeit.timeit(stmt=code % lst, number=10)
x.append(i)
y.append(time)
plt.plot(x, y)
plt.show()
измеряет время работы алгоритма для различных случайно сгенерированных списков (и отображает это впоследствии). Результат
явно поддерживает нелинейный рост. Сказано иначе, поскольку алгоритм имеет сложность O (n ^ 2), поэтому невозможно доказать, что он работает в пределах O (n).