Вы можете думать о Big O для этих примеров в терминах того, как N приближается к бесконечности.
Таким образом, вы правы в своем сценарии, что num_3> num_1 * num_2, но по мере того, как эти три числа становятся большеи больше, это больше не будет иметь место.
Если алгоритм1 равен O (N), а алгоритм2 равен O (N ^ 2), это НЕ означает, что алгоритм1 ВСЕГДА лучше алгоритма2, это просто означает, что естьнекоторое пороговое значение для N (обычно называемое N0), где после этой точки алгоритм1 будет работать лучше, чем алгоритм 2.
Случайный пример - сортировка вставки - O (N ^ 2), где MergeSort - O (N * log (N)), но для очень малых значений N сортировка вставки может на самом деле оказаться быстрее.Как только N становится достаточно большим, MergeSort всегда быстрее.Java-версия функции Arrays.sort
на самом деле имеет оператор if
, который использует сортировку вставкой для очень малых значений N и модифицированную быструю сортировку или сортировку слиянием для чего-либо большего, чем определенный размер (магическое число около N = 7).
Код Java (в Java 6) для Arrays.sort
для массива int
выглядит следующим образом:
private static void sort1(int x[], int off, int len) {
// Insertion sort on smallest arrays
if (len < 7) {
//insertion sort
}
//modified quick sort
}
В конце дня запись Big Oмеханизм сортировки, который помогает вам быстро анализировать и сравнивать алгоритмы способом, который не зависит от аппаратного обеспечения компьютера и не требует от вас написания, тестирования и времени выполнения ваших различных алгоритмов.Это упрощенное обозначение, поэтому оно никогда не будет точным, и, как показывает только что приведенный пример, оно очень зависит от размера и диапазона ваших данных.
Основным предупреждением для обозначения Big O для алгоритма является то, что вы часто можете вносить улучшения в алгоритм, если вы можете делать предположения о ваших данных.