Нет единого определения того, что такое «более быстрый алгоритм». Не существует руководящего органа, который решает, является ли алгоритм более быстрым, чем другой.
Чтобы указать, почему это так, я хотел бы предложить два разных сценария, которые демонстрируют эту мутную концепцию.
Первый пример - это алгоритм, который ищет связанный список неупорядоченных данных. Если я могу сделать ту же самую операцию с массивом, у меня не останется никаких изменений в большой О производительности. Оба поиска O (n). Если я просто посмотрю на большие значения О, я могу сказать, что я вообще не улучшился. Однако известно, что в большинстве случаев поиск в массиве выполняется быстрее, чем при просмотре связанного списка, поэтому можно решить, что это сделало алгоритм «быстрее», даже если большое значение «О» не изменилось.
Если я могу использовать традиционный пример программирования робота для приготовления бутерброда из PBJ, я могу показать, что я имею в виду, другим способом. Рассмотрим только тот момент, когда открывают банку с арахисовым маслом.
Pick up the jar
Grab the lid
Unscrew the lid
Против
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Put the jar back down
Pick up the jar
Grab the lid
Unscrew the lid
Даже в самых академических теоретических условиях, которые я могу придумать, вы поймете, что люди признают, что первый алгоритм быстрее второго, даже несмотря на то, что результаты больших обозначений Oh одинаковы.
Напротив, мы можем рассмотреть алгоритм, который нарушает шифрование RSA. На данный момент считается, что этот процесс, вероятно, O (2 ^ n), где n - количество битов. Рассмотрим новый алгоритм, который работает на n ^ 100 быстрее. Это означает, что мой новый процесс выполняется в O (2 ^ n / n ^ 100). Однако в мире криптографии полиномиальное ускорение по экспоненциальному алгоритму традиционно вообще не рассматривается как теоретическое ускорение. При проверке безопасности предполагается, что злоумышленник может обнаружить одно из этих ускорений и что оно не будет иметь никакого эффекта.
Таким образом, в одном случае мы можем изменить O (n) на O (n) и вызвать его быстрее. При других обстоятельствах мы можем изменить O (2 ^ n) на O (2 ^ n / n ^ 100) и утверждать, что никакого существенного ускорения не было вообще. Вот почему я говорю, что нет единого определения для «более быстрого алгоритма». Это всегда зависит от контекста.