Полиномиальный и экспоненциальный времени
У меня есть вопрос о разнице между алгоритмами полиномиального времени, алгоритмами неполиномиального времени и алгоритмами экспоненциального времени, например, если алгоритм займет время 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
k^1000 is исключительно огромный, если 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 = некоторая константа)
вот модельный граф, представляющий большую сложность некоторых функций
ура :-)
кредиты графа http://bigocheatsheet.com/
O (n^2) - полиномиальное время. Многочлен равен f (n) = n^2. С другой стороны, за O(2^n) является экспоненциальное время, где подразумевается экспоненциальная функция ф(Н) = 2^н. Разница в том, является ли функция из N мест, где N в основе возведения в степень, или само по себе показатель.
любая экспоненциальная функция роста будет расти значительно быстрее (в долгосрочной перспективе), чем любая полиномиальная функция, поэтому различие имеет отношение к эффективности алгоритма, особенно для больших значений n.
полиномиальное время.
полином-это линейная комбинация терминов, которые выглядят как
Constant * x^k
Напротив, экспоненциальный означает что-то вродеk^x
, где в обоих случаях k-константа, а x-переменная.время выполнения экспоненциальных алгоритмов растет намного быстрее, чем у полиномиальных.
экспоненциальный (у вас есть экспоненциальная функция, если минимальная одна экспонента зависит от параметра):
- например, f (x) = константа ^ x
полинома (у вас есть полиномиальная функция, если ни один показатель не зависит от некоторых параметров функции):
- например, f (x) = x ^ constant
полиномиальное время O (n)^k означает, что количество операций пропорционально мощности k размера ввода
экспоненциальное время O (k)^n означает, что количество операций пропорционально экспоненте размера ввода
o (n sequre) - полинимальная временная сложность, а o (2^n) - экспоненциальная временная сложность если п=НП, когда лучшем случае , в худшем случае п=НП не равны, потому что при входе размера n растут так долго или ввода сайзер увеличить так больше его будет в худшем случае и обращение, поэтому сложность темпов роста и зависят от N размер ввода при входе это polynimal когда входной размер большой, а большие так что п=НП не равный это означает, темпы роста зависят от величины входного сигнала "Н". оптимизация, sat, clique и независимое множество также встречалось в экспоненциальном к полинимальному.