Os recursos que encontrei na complexidade do tempo não são claros sobre quando não há problema em ignorar termos em uma equação de complexidade do tempo, especificamente com exemplos não polinomiais.
É claro para mim que, dado algo da forma n 2 + n + 1, os dois últimos termos são insignificantes.
Especificamente, dadas duas categorizações, 2 n e n * (2 n ), o segundo está na mesma ordem que o primeiro? A multiplicação adicional n é importante? Normalmente, os recursos dizem apenas que x n é exponencial e cresce muito mais rápido ... depois siga em frente.
Eu posso entender por que isso não ocorreria, pois 2 n ultrapassará muito n, mas como eles não estão sendo somados, isso importaria muito quando comparadas as duas equações. Na verdade, a diferença entre elas sempre será um fator de n, o que parece importante para dizer o mínimo.
n! = o((n+1)!)
isto é, cresce estritamente mais lento assintoticamente.Respostas:
Você terá que ir para a definição formal do grande O (
O
) para responder a essa pergunta.A definição é que
f(x)
pertence aO(g(x))
se e somente se o limite existe, ou seja, não é infinito. Em resumo, isso significa que existe uma constante , de modo que o valor de nunca é maior que .limsupx → ∞ (f(x)/g(x))
M
f(x)/g(x)
M
No caso de sua pergunta, deixe e deixe . Então é o que ainda crescerá infinitamente. Portanto , não pertence a .
f(n) = n ⋅ 2n
g(n) = 2n
f(n)/g(n)
n
f(n)
O(g(n))
fonte
O(f(x)/g(x))
; A notificação big-O é uma abreviação de um conjunto de funções, não uma única função cujo valor você pode limitar. No entanto, acho que é verdade que você pode mostrar isso,f(x) = O(g(x))
selim(x->infinity) f(x)/g(x)
existir.lim sup
vez delim
.x
, não para todos os valores dex
.Uma maneira rápida de ver que
n⋅2ⁿ
é maior é fazer uma alteração de variável. Letm = 2ⁿ
. Entãon⋅2ⁿ = ( log₂m )⋅m
(usando o logaritmo de base 2 em ambos os lados dam = 2ⁿ
doaçãon = log₂m
), e você pode mostrar facilmente quem log₂m
cresce mais rápido quem
.fonte
lg
? Logaritmo na base 2?lg
é a notação ISO para um logaritmo de base 10, em vez do uso agnóstico de base mais comumente usado ao discutir tempos de execução assintóticos. Veja en.wikipedia.org/wiki/Logarithm#Particular_basesConcordo que
n⋅2ⁿ
não está presenteO(2ⁿ)
, mas achei que deveria ser mais explícito, pois o limite de uso superior nem sempre é válido.Pela definição formal de Big-O:
f(n)
está emO(g(n))
se existem constantesc > 0
en₀ ≥ 0
tais que, por tudon ≥ n₀
que temosf(n) ≤ c⋅g(n)
. É fácil mostrar que essas constantes não existem paraf(n) = n⋅2ⁿ
eg(n) = 2ⁿ
. No entanto, pode ser demonstrado queg(n)
está emO(f(n))
.Em outras palavras,
n⋅2ⁿ
é mais baixo delimitado por2ⁿ
. Isso é intuitivo. Embora ambos sejam exponenciais e, portanto, sejam igualmente improváveis de serem usados na maioria das circunstâncias práticas, não podemos dizer que eles são da mesma ordem, porque2ⁿ
necessariamente crescem mais lentamente quen⋅2ⁿ
.fonte
f(n) = 2*2^n
Eu acho que você quis dizern*2^n
?Eu não discuto com outras respostas que dizem que
n⋅2ⁿ
cresce mais rápido que2ⁿ
. Masn⋅2ⁿ
cresce ainda é apenas exponencial.Quando falamos de algoritmos, costumamos dizer que a complexidade do tempo cresce é exponencial. Então, nós consideramos ser
2ⁿ
,3ⁿ
,eⁿ
,2.000001ⁿ
, ou o nosson⋅2ⁿ
ser mesmo grupo de complexidade com exponencial cresce.Para dar um pouco de sentido matemático, consideramos uma função
f(x)
crescer (não mais rápido que) exponencialmente se existe uma constantec > 1
tão grande .f(x) = O(cx)
Pois
n⋅2ⁿ
a constantec
pode ser qualquer número maior que2
, vamos pegar3
. Então:n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ
e isso é menor do que1
para qualquern
.Então
2ⁿ
cresce mais devagar quen⋅2ⁿ
, o último, por sua vez, cresce mais devagar que2.000001ⁿ
. Mas todos os três crescem exponencialmente.fonte
Você perguntou "o segundo está na mesma ordem que o primeiro? A multiplicação adicional n é importante?" Estas são duas perguntas diferentes, com duas respostas diferentes.
n 2 ^ n cresce assintoticamente mais rápido que 2 ^ n. Essa é a pergunta respondida.
Mas você poderia perguntar "se o algoritmo A leva 2 ^ n nanossegundos e o algoritmo B leva n 2 ^ n nanossegundos, qual é o maior n onde eu posso encontrar uma solução em um segundo / minuto / hora / dia / mês / ano / ano? E as respostas são n = 29/35/41/46/51/54 vs. 25/30/36/40/45/49 Não há muita diferença na prática.
O tamanho do maior problema que pode ser resolvido no tempo T é O (ln T) nos dois casos.
fonte