Como existe apenas uma constante entre as bases dos logaritmos, não é correto escrever , em oposição a , ou qualquer que seja o base pode ser?
algorithms
time-complexity
Alex5207
fonte
fonte
Respostas:
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ê usarO ( 2registron) , a base é importante. Na base 2 você teria apenas O ( n ) , na base 10 é sobre O ( n0,3010) .
fonte
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:registrouman = Θ ( logbn ) para todos a , b > 1 . Portanto, não há necessidade de especificar a base de um logaritmo ao usar notação assintótica.
fonte
Comoregistroxy= 1registroyx eregistroxy= logzyregistrozx , de modo registroumanregistrobn= lognbregistronuma= logumab . Comoregistroumab é constante positiva (para todosa , b > 1 ), entãoregistrouman = Θ ( logbn ) .
fonte
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 baseb , 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 registrobvocê rodadas (onde você é o número máximo de entradas máximo), portanto, o tempo de execução total é O ( ( n + b ) logbvocê) . Para qualquer número inteiro fixob isso simplifica paraO ( n logvocê) . 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 + lognvocê) . Desderegistronvocê =registrovocêregistron , a expressão geral simplifica paraO ( n logvocêregistron) . 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 + 2 algum 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 externob . A altura de uma árvore B da ordem b é Θ ( logbn ) , 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.
fonte