Начнем с того, что алгоритм – это точная инструкция, однозначно определяющая вычислительный процесс. Разумеется, очень хорошо иметь возможность оценить ресурсы, затрачиваемые на выполнение этого алгоритма. Результатом данной оценки и является сложность, которая показывает, какое количество памяти и времени требуется для алгоритма. Давайте изобразим работу алгоритма наглядно: Проанализируем простенькую программку: a = [3,5,8,1,9,7]
n = 6
for i in a:
print(i) Обозначим время выполнения программы T, а N – за длину списка. Счетчик i последовательно будет равняться по порядку каждому значению из списка a и печатать их на экран, поэтому, нетрудно догадаться, что время выполнения программы будет прямо пропорционально количеству элементов (T~N). Но что же будет, если внутрь этого цикла поместить еще один? a = [3,5,8,1,9,7]
n = 6
for i in a:
for j in a:
print(i,j) Тут ситуация уже становится интереснее, потому что для каждого значения i мы заново просматриваем весь массив и подс