Анализ Big O используется, чтобы дать представление о том, как программа масштабируется при изменении пользовательского ввода.
Давайте начнем с основ:
def foo(user_input):
output = 5+5
return output
Приведенный выше пример показывает, что независимо от того, какМой пользовательский ввод, будь то 5 или 5 миллиардов, моя программа будет работать с постоянной «скоростью». Это O (1), где 1 представляет собой константу.
def foo(user_input):
for i in range(user_input):
print(i)
Теперь, что здесь происходит, это то, что время, необходимое для запуска нашей программы, определяется длиной ввода. Если у нас большой ввод, он занимает много времени, маленький ввод занимает мало времени. Корреляция такова, что время выполнения равно нашему user_input. Следовательно, большой O - это O (n), где n - длина пользовательского ввода.
filename = input("Please enter file name: ")
file = open(filename, "r")
number = int(file.readline())
for line in file.readlines():
new_number = int(line)
if number > new_number:
print ("Looks like", filename, "needs to be sorted")
break
number = new_number
else:
print ("Congratulations! The file", filename, "is nicely sorted!")
file.close()
Длина пользовательского ввода напрямую определяется количеством строк в файле. Если в файле n строк, он будет запущен n раз. Следовательно, большой O равен O (n).
Теперь вы можете спросить: «А как насчет оператора IF и печати? Он также добавляет время программе, даже если его наносекунды времени»
Все остальное, что вы делаете в цикле for, не изменяется при вводе пользователем. На самом деле, это постоянно. Так что это будет записано как O (n + 1). Но дело в том, что если n равно миллиону, миллион + 1 не имеет значения, так как это занимает практически то же время. Следовательно, мы игнорируем любые константы (включая мультипликативные константы, такие как O (3n)), чтобы привести к O (n).