Как правильно отмечали другие комментарии и ответы, причина разницы во времени выполнения, которую вы наблюдаете, связана с тем, как работают операционные системы.Но выполнение строгих мер - это сложный вопрос, поэтому позвольте мне подробнее остановиться на нем и дать вам подсказки, куда вам следует направить свои эксперименты.
Что ваша ОС делает за вашей спиной
Вы можете видеть ОС как проводника и программы как инструментальные проигрыватели, и представьте себе, что есть только очень много инструментов, которые могут играть одновременно.Поэтому дирижер должен каждый раз выбирать, кто должен играть, и быть уверенным, что в конце концов никто не расстроится!Таким же образом, ОС постоянно отвечает за выбор программ для выполнения, а именно за то, на какую программу выделять процессорное время.Количество программ (или, скорее, процессов), которые могут быть выполнены одновременно, обычно ограничено количеством ядер в вашем процессоре.
На практике способ, которым ОС выбирает, что выполнять, очень сложен.и захватывающий предмет, который опирается на эвристику, опирающуюся на эксперименты.(Подробнее здесь ).Что вам нужно понять, так это то, что вам вряд ли удастся изменить это поведение, и никто не сможет гарантировать одинаковое время выполнения между двумя вызовами.
Использование команды time
linux
Вызов Python time
, как вы делаете, измеряет физическое время, прошедшее между двумя вызовами, поэтому из-за того, что мы сказали, вы не только измеряете время, затрачиваемое на выполнение вашей программы.Если вы хотите лучше понять, какое время ОС фактически отводит вашей программе, вы можете использовать команду linux time
.Время user
даст вам фактическое время ЦП, выделенное для выполнения вашей программы.Проверьте эту тему для получения дополнительной информации.Но поймите, что это время также подвержено колебаниям!
Какую мудрость вы пытаетесь извлечь из своих измерений?
Наконец, вы должны спросить себя, действительно ли точное время соответствует вашему желанию,Вы заботитесь о ценности?или вы хотите продемонстрировать поведение?
Обычно то, что делается для измерения производительности, - это усреднение времени выполнения повторных вызовов.Таким образом, эффекты, относящиеся к бизнесу ОС, должны быть усреднены.(Вы можете видеть это как построение объективной оценки для случайного процесса).Из того, что я понимаю, вы пытаетесь показать разницу во времени выполнения для алгоритмов с различной сложностью.Таким образом, фактическое время выполнения не так важно, так как это относительный порядок.Вот почему усреднение нескольких вызовов уменьшит дисперсию наблюдения, и вы сможете делать более сильные заявления относительно относительного времени выполнения.