Complexidade temporal de um algoritmo: é importante declarar a base do logaritmo?


Respostas:


63

Depende de onde está o logaritmo. Se é apenas um fator, não faz diferença, porque big-O ou θ permite que você se multiplique por qualquer constante.

Se você usar O(2registro⁡n) , a base é importante. Na base 2 você teria apenas O(n) , na base 10 é sobre O(n0,3010) .


5
Eu acho que isso só vai aparecer com algo como . Não vejo razão para expressar um número como2clogbn emvez denpara o que quer que seja (exceto talvez como um estágio intermediário de um cálculo). 2registro⁡n2cregistrob⁡nn
— David Richerby

7
+1 para "fatores constantes são importantes em expoentes"
— trognanders

50

Como a notação assintótica é alheia a fatores constantes, e quaisquer dois logaritmos diferem por um fator constante, a base não faz diferença: registrouma⁡n=Θ(registrob⁡n) para todos uma,b>1 . Portanto, não há necessidade de especificar a base de um logaritmo ao usar notação assintótica.


13
Eu prefiro ver vez de =∈=
— Nayuki

16
Temo a notação utilizações comuns . =
— Yuval Filmus

4
@YuvalFilmus A notação padrão é enganosa, completamente diferente da norma em qualquer outro lugar e faz com que a complexidade algorítmica pareça completamente estranha de coisas bastante semelhantes a ela. "É a notação padrão" nunca deve ser um motivo para favorecer uma solução ruim em detrimento de uma solução melhor e igualmente clara. (De qualquer maneira, o significado do símbolo é claro do contexto.)
— wizzwizz4

7
@ wizzwizz4 A prática comum é um excelente motivo. Promove uma comunicação eficiente. Essa é a razão pela qual todos atendemos às peculiaridades da ortografia em inglês.
— Yuval Filmus

3
Às vezes só tem muita coisa lá para ser mais claro do log um n = Θ ( log b n ) . n↦registrouma⁡n∈Θ(n↦registrob⁡n)registrouma⁡n=Θ(registrob⁡n)
— JiK

15

Como registrox⁡y=1registroy⁡x eregistrox⁡y=registroz⁡yregistroz⁡x , de modo registrouma⁡nregistrob⁡n=registron⁡bregistron⁡uma=registrouma⁡b. Comoregistrouma⁡bé constante positiva (para todosuma,b>1), entãoregistrouma⁡n=Θ(registrob⁡n).


8

Na maioria dos casos, é seguro descartar a base do logaritmo porque, como outras respostas apontaram, a fórmula de mudança de base para logaritmos significa que todos os logaritmos são múltiplos constantes um do outro.

Existem alguns casos em que isso não é seguro. Por exemplo, @ gnasher729 indicou que se você tiver um logaritmo em um expoente, a base logarítmica é realmente significativa.

Queria apontar outro caso em que a base do logaritmo é significativa, e é nesses casos que a base do logaritmo depende diretamente de um parâmetro especificado como entrada para o problema. Por exemplo, o algoritmo de classificação radix funciona escrevendo números em alguma base b , decompondo os números de entrada em seus dígitos da base b e usando a classificação de contagem para classificar esses números, um dígito por vez. O trabalho realizado por rodada é então Θ(n+b) e há aproximadamente registrob⁡você rodadas (onde você é o número máximo de entradas máximo), portanto, o tempo de execução total é O((n+b)registrob⁡você) . Para qualquer número inteiro fixob isso simplifica paraO(nregistro⁡você) . No entanto, o que acontece seb não for uma constante? Uma técnica inteligente é escolherb=n ; nesse caso, o tempo de execução simplifica paraO(n+registron⁡você) . Desderegistron⁡você =registro⁡vocêregistro⁡n , a expressão geral simplifica paraO(nregistro⁡vocêregistro⁡n). Observe que, nesse caso, a base do logaritmo é realmente significativa porque não é uma constante em relação ao tamanho da entrada. Existem outros algoritmos que têm tempos de execução semelhantes (uma análise antiga de florestas desarticuladas terminou com um termo deregistrom/2+2algum lugar, por exemplo); nesse caso, largar a base de logs interferiria na análise de tempo de execução.

Outro caso em que a base de log é importante é aquele em que há algum parâmetro externo para o algoritmo que controla a base logarítmica. Um ótimo exemplo disso é a árvore B, que requer algum parâmetro externo b . A altura de uma árvore B da ordem b é Θ(registrob⁡n) , onde a base do logaritmo é significativa, pois b não é uma constante.

Para resumir, no caso de você ter um logaritmo com uma base constante, geralmente você pode (sujeito a exceções como o que @ gnasher729 apontou) soltar a base do logaritmo. Mas quando a base do logaritmo depende de algum parâmetro do algoritmo, geralmente não é seguro fazê-lo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.