Я думаю, что для многих алгоритмов вполне разумно вычислить кривую, которая хорошо соответствует данным, а затем использовать выражение для этой кривой как рабочую сложность. Чтобы это работало хорошо, вы можете отказаться от «малых» размеров ввода для своего алгоритма и сосредоточиться на более крупных, чтобы минимизировать влияние неасимптотических c накладных расходов.
Например, мы можем сказать это скорее всего, растет быстрее, чем quadrati c, поскольку решение констант для f (30) и последующее вычисление того, что мы ожидали для f (20), дает слишком большое число, подразумевая, что наша функция асимптотически растет намного быстрее, чем квадратично . Если мы предположим экспоненциальную функцию и решим константы в f (30), мы получим ожидаемое значение для f (20), которое намного ближе к фактическому числу (хотя и немного ниже, поэтому наша функция может расти немного медленнее. чем A * 2 ^ n ... но мы могли бы, вероятно, ввести новый коэффициент B, чтобы найти A * 2 ^ (Bn) и приблизиться).
Это недопустимый или принятый способ вычисления теоретической асимптотики c временная сложность функции, график которой вы смотрите, но я думаю, что можно сказать, основываясь на этом графике, что ваша асимптотическая c сложность, вероятно, экспоненциальна с базой около 2.
На самом деле это похоже, что ваша функция поочередно удваивает значения и утроивает их. Если это действительно так, то можно ожидать, что каждые два приращения n будут давать шестикратное увеличение; квадрат root из 6 составляет около 2,45, поэтому ваша функция действительно может быть экспоненциальной, например A * 2,45 ^ n, или, по крайней мере, это может дать лучшее соответствие, чем использование базы 2.