Обозначение Big O представляет собой единичное среднее значение для измерения вариации производительности, поэтому не подвержено относительной стоимости вычислительных примитивов.
В двух словах:
обозначение Big O является относительным типом измерения без единиц измерения (в отличие от абсолютного измерения). Он может измерять только изменение производительности, но не абсолютную производительность, для которой константы имеют большое значение. Преимущество состоит в том, что это делает его в значительной степени независимым от реализации, позволяя более простой анализ, который может игнорировать относительные затраты на элементарные операции, если эти затраты имеют положительные фиксированные верхние и нижние границы. Но следствием этого является то, что постоянные факторы не имеют смысла . Тем не менее, даже по своему прямому назначению анализ асимптотической сложности может быть поставлен под сомнение на других основаниях и должен рассматриваться с осторожностью. Например, необработанный размер ввода может быть неправильным параметром для рассмотрения.
Первое замечание: ваш вопрос не совсем точно сформулирован. Когда вы пренебрегаете константой в 3 n , действительно происходит «трехкратное изменение», но оба изменяются с одинаковой скоростью, и вы не можете утверждать, что «[одна] вещь меняется в 3 раза быстрее, чем другая».33n
Хорошая причина игнорировать константу в обозначениях Ландау в том, что у нас нет единицы, на которую мы можем положиться. Когда кто-то заявляет, что А живет вдвое дальше от вас, чем Б, это имеет значение независимо от какой-либо единицы. Мы можем договориться об этом, даже если вы измеряете расстояния в дюймах, а я делаю это в световых годах. Но измерение абсолютного расстояния требует указания единиц измерения, а его числовая формулировка зависит от выбранной единицы измерения.
Фактическое время, затрачиваемое алгоритмом, зависит от времени выполнения элементарных операций, которое сильно зависит от машины. Вы можете посчитать количество элементарных операций, но нет никаких оснований полагать, что все они занимают одно и то же время, и всегда можно объединить несколько операций в одну или наоборот декомпозировать операцию на более мелкие, так что число операций на самом деле не имеет смысла, если вы не согласны с эталонной виртуальной машиной. Быть независимым от ссылки является преимуществом.
Другое мнение о преимуществе этого подхода состоит в том, что в анализе вам важен только подсчет количества элементарных операций, если их стоимость имеет верхнюю границу и положительную нижнюю границу. Вам не нужно беспокоиться об индивидуальной стоимости.
Однако цена за это преимущество заключается в том, что оценка вычислительной стоимости дается с неопределенной единицей, а время вычисления, например, может составлять наносекунды или тысячелетия - мы даже не пытаемся это знать. Другими словами, постоянные коэффициенты не имеют смысла, так как изменение единиц неотделимо от изменения постоянного фактора , и ссылочные единицы не используются.
Как отметил Патрик87 , этого достаточно, чтобы понять, как алгоритм масштабируется относительно размера входных данных, но он не даст абсолютного показателя производительности, если не полагаться на эталонный блок. Использование общей эталонной абстрактной машины может быть сделано, когда кто-то действительно хочет сравнить производительность отдельных алгоритмов, но сложнее убедиться, что сравнение не смещено деталями реализации. В асимптотической сложности этого риска избегают, потому что вы сравниваете алгоритм с самим собой.
O(n6)алгоритм, используемый для ML, который имеет экспоненциальную сложность в худшем случае. Но это, похоже, не беспокоит пользователей ML и не мешает написанию очень больших программ на ML. Здесь важна не только константа. На самом деле, асимптотический анализ связывает меру стоимости вычислений с некоторой мерой сложности входных данных. Но необработанный размер не может быть правильной мерой.
Сложность подобна разрешимости, теоретически она может быть плохой, но это может быть неактуально для большей части пространства данных ... иногда. Анализ асимптотической сложности - это хороший и хорошо разработанный инструмент со своими преимуществами и ограничениями, как и все инструменты. С объяснением константы или без нее, которая может быть бессмысленной, необходимо использовать суждение.