Полиномиальный и экспоненциальный времени

У меня есть вопрос о разнице между алгоритмами полиномиального времени, алгоритмами неполиномиального времени и алгоритмами экспоненциального времени, например, если алгоритм займет время O(n^2), то в какой категории он будет?

7 ответов


зацените

http://en.wikipedia.org/wiki/Big_oh#Orders_of_common_functions

экспоненциальный хуже, чем полином.

O (n^2) попадает в квадратичную категорию, которая является типом полинома (частный случай экспоненты равен 2) и лучше экспоненты.

экспоненциальный составляет много хуже, чем полином. Посмотрите, как растут функции

n    = 10    |     100   |      1000

n^2  = 100   |   10000   |   1000000 

k^n  = k^10  |   k^100   |    k^1000

к^1000-это исключительно огромный, если k не меньше, чем что-то вроде 1.1. Что-то вроде того, что каждая частица во Вселенной должна делать 100 миллиардов миллиардов миллиардов миллиардов операций в секунду в течение триллионов миллиардов миллиардов лет, чтобы это сделать.

Я не рассчитал его, но он такой большой.


Ниже приведены некоторые общие функции Big-O при анализе алгоритмов.

  • O (1) - постоянная времени
  • O (log (n)) - логарифмическое время
  • O ((log (n))c) - polylogarithmic времени
  • O (n) - линейного времени
  • O (n2) - квадратичное время
  • O (nc) - полином время
  • O (cn) - экспоненциальное время

(n = размер входного сигнала, c = некоторая константа)

вот модельный граф, представляющий сложность Big-O некоторых функций

graph model

ура :-)

графические кредиты http://bigocheatsheet.com/


O (n^2) - полиномиальное время. Полином равен f (n) = n^2. С другой стороны, O(2^n) - экспоненциальное время, где экспоненциальная функция подразумевается f(n) = 2^n. Разница заключается в том, помещает ли функция n n в основание экспоненции или в саму экспоненту.

любая экспоненциальная функция роста будет расти значительно быстрее (в долгосрочной перспективе), чем любая полиномиальная функция, поэтому различие имеет отношение к эффективности алгоритма, особенно для больших значений n.


полиномиальное время.

полином-это линейная комбинация терминов, которые выглядят как Constant * x^k Напротив, экспоненциальный означает что-то вроде k^x, где в обоих случаях k-константа, а x-переменная.

время выполнения экспоненциальных алгоритмов растет намного быстрее, чем у полиномиальных.


экспоненциальный (у вас есть экспоненциальная функция, если минимальный показатель зависит от параметра):

  • например. f (x) = константа ^ x

полинома (у вас есть полиномиальная функция, если ни один показатель не зависит от некоторых параметров функции):

  • например. f (x) = x ^ константа

полиномиальное время O (n)^k означает, что количество операций пропорционально мощности k размера ввода

экспоненциальное время O (k)^n означает, что количество операций пропорционально показателю размера ввода


o (n sequre) - полинимальная временная сложность, а o (2^n) - экспоненциальная временная сложность если п=НП, когда лучшем случае , в худшем случае п=НП не равны, потому что при входе размера n растут так долго или ввода сайзер увеличить так больше его будет в худшем случае и обращение, поэтому сложность темпов роста и зависят от N размер ввода при входе это polynimal когда входной размер большой, а большие так что п=НП не равный это означает, темпы роста зависят от величины входного сигнала "Н". оптимизация, sat, клика и independ множество также встретились в экспоненциальном к полинимал.