Сумма правила для Big-O с равными сложными функциями?

cs.stackexchange https://cs.stackexchange.com/questions/128942

  •  29-09-2020
  •  | 
  •  

Вопрос

Одно свойство Big-O-o-o-o- outs - Сумма правила Указывает, что когда у меня есть две функции $ f_1 $ и $ f_2 $ и их соответствующие функции сложности $ G_1 $ и $ G_2 $ , затем комбинированная сложность - $ f_1 + f_2= o (\ max (g_1, g_2)) $ .

Но что мы выбираем, если оба сложности - функции равны? Например, если $ f_1 (n) $ - это сортировка массива и $ _ F2 (M) $ Кроме того, то сложности являются $ O (n \ log (n)) $ и $ o (m \ log ( m)) $ . Применение правила будет $ O (\ max (n \ log (n), m \ log (m))) $ . Я думаю, что выбирая ни одного из них, даст действительную, но очень неразвичную оценку, поскольку вы бросили одну переменную. Кроме того, это не ясно, какой из них выбрать.

Это так, что вы не должны использовать правило, когда есть несколько переменных?

Это было полезно?

Решение

Это зависит от того, если некоторые переменные на зависимости от другого или если они приведены в качестве параметров в проблеме. Например, во многих проблемах, связанных с графиком, $ n $ может быть количество вершин, а $ m $ может быть количество ребер. В этом случае $ m $ может быть такой же большой, как $ O (n ^ 2) $ . Таким образом, в общем случае говорят, что если у нас есть алгоритм, чья первая фаза работает в $ o (n) $ и второй этап в разделе $ O (n + m) $ .

С точки зрения нескольких переменных, приведенных в качестве параметров, которые не обязательно связаны: Eaving Многократные переменные внутри окончательного уравнения стандартные, например, E.G. Я могу сказать, что умножение $ m \ times n $ matrix и a $ n \ turs p $ matrix Занимает $ O (MNP) $ - время с использованием умножения школьного книги, или решение проблемы knaSacack требует $ O (NT) $ < / Span / Time, где $ n $ - это количество элементов и $ T $ - это целевая сумма ,

В особых случаях, таких как плоские графики и другие редкие графики, мы знаем, что $ m= O (n) $ , поэтому мы можем безопасно заменить $ n $ вместо $ m $ в последнем времени эксплуатации для упрощения.

как отступление, это иллюстрирует, почему на редких графах (где $ m= o (n) $ ) Один предпочли бы использовать Dijktra в цикле для всех пары кратчайший путь (в отличие от алгоритма на основе переходного закрытия, как Флойд-Варшалл); Так как теперь Dijkstra работает в $ O (m \ log n)= o (n \ log n) $ , общая сложность для использования Dijkstra's в цикле становится <класс SPAR= «Математический контейнер»> $ O (n ^ 2 \ log n) $ , который лучше, чем Floyd-Warshall. Напротив, обратите внимание, что работает Dijkstra в $ m \ log n $ для общего случая, что означает на плотных графах, где $ m= o (n ^ 2) $ , он становится менее эффективным, чем Floyd-Warshall с точки зрения времени работы в худшем случае.

В других случаях могут быть переменные даже не полиномиально ограничены данным параметром --- взять пример knaxackack выше, где $ t $ может быть Экспоненциальный в $ n $ .

Другие советы

Нет общего ответа.Кстати, если вы хотите упростить упростить $ O (\ max (n \ log (n), m \ log (m))) $ , вы можете переписатьЭто как как $ o ((n + m) \ log (n + m)) $ .

Более того, если $ g_1 $ и $ G_2 $ - это equall и расширение функций, вы можете написать $ O (g_1 (n + m)) $ вместо $ O (\ max (g_1 (n), g_2 (m))) $ .

по определению $ O (G) $ должен всегда быть определена переменной и предельную точкой относительно рассматриваемой перемещения $ o $ . Например, в $ O (n ^ 3), n \ to \ \ infty $ Переменная $ n $ и предельную точку $ \ infty $ . В $ O (x ^ 3), x \ to 0 $ Переменная $ x $ и предельную точку $ 0 $ .

Так, когда мы пишем $ f= O (g) $ , то формально мы имеем в виду некоторую переменную и некоторую предельную точку. Например, $ f (n)= o (g (n)), n \ to \ infty $ - это точная запись. Примечание, что запись $ f (m)= o (g (m)), m \ \ \ infty $ означает точно такой же, как предыдущее предложение.

Когда мы говорим о недвижимости $ f_1 + f_2= o (\ max (g_1, g_2)) $ , то здесь также следует указывать некоторую переменную (s ) и некоторая лимитная точка. Такая точная запись должна быть что-то вроде $$ f_1 (n) + f_2 (n)= o (\ max (g_1, g__) (n)), n \ to \ \ infty $$ Или нам нужно больше разъяснений в отношении переменных, предполагая предельную точку $ \ Infty $ .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top