N = 100 может быть недостаточно большим, чтобы можно было предположить, что алгоритм уже достиг своего асимптотического поведения с точки зрения использования ЦП, поэтому использование большого выражения O для экстраполяции использования ЦП для больших наборов данных может привести к ошибочным результатам.
Хотя вы можете попытаться определить, находитесь ли вы уже в асимптотической зоне, измерить загрузку ЦП для наборов данных других размеров (например, 50, 80, 120 и т. Д.) И посмотреть, как они помещаются на * 1003. * кривая, являющаяся константой C, подлежащей определению.
Если подгонка «достаточно хороша» после некоторого заданного N, вы можете использовать ту же кривую для прогнозирования использования ЦП для больших наборов данных.
В любом случае эти прогнозы следует рассматривать как нижний предел времени ЦП, необходимого для вычисления некоторого набора данных, поскольку на практике другие вычислительные ресурсы, такие как память, кэши или ввод-вывод, могут стать узким местом при использовании ЦП.
Обновление : в ответ на сообщение Vapuru и его комментарии:
Для типичного алгоритма O (N ^ 3) количество операций, выполняемых конкретной реализацией, составляет t = a + b * N + c * N^2 + d * N^3
(могут быть и другие компоненты, например log N
, но, как вы увидите, это на самом деле не имеет значения ). Таким образом, для двух заданных наборов данных размером N1
и N2
можно рассчитать t1
и t2
соответственно.
Для данной задачи ОП t2 / t1 = 2
, поэтому (a + b * N2 + c * N2^2 + d * N2^3) / (a + b * N1 + c * N1^2 + d * N1^3) = 2
, а для N1
и N2
достаточно большой, чтобы выражение можно было аппроксимировать как (d * N2^3)/(d * N1^3) = 2
, которое можно еще более упростить до (N2/N1)^3 = 2
и т. Д. N2 = N1 * 2^(1/3)
.
Это означает, что для больших наборов данных удвоение времени обработки (или удвоение скорости обработки и сохранение неизменного времени) позволяет приблизительно увеличить размер набора данных в 2^(1/3)
, то есть 1.26
или %.
На практике другие факторы, помимо скорости процессора, могут влиять на производительность, поэтому на самом деле это следует читать как N2/N1 < 1.26
.