Estou analisando alguns tempos de execução de diferentes for-loops e, à medida que estou adquirindo mais conhecimento, estou curioso para entender esse problema que ainda tenho que descobrir. Eu tenho este exercício chamado "Quantas estrelas são impressas":
for (int i = N; i > 1; i = i/2) System.out.println("*");
As respostas para escolher são
A: ~log N
B: ~N
C: ~N log N
D: ~0.5N^2
Então a resposta deve ser A e eu concordo com isso, mas do outro lado ... Digamos o N = 500
que seria Log N
então? Seria 2,7. E daí se dissermos isso N=500
em nosso exercício acima? Definitivamente, isso imprimiria mais han 2.7 estrelas? Como isso está relacionado?
Porque faz sentido dizer que, se o loop for fosse assim:
for (int i = 0; i < N; i++)
imprimiria N
estrelas.
Espero encontrar uma explicação para isso aqui, talvez eu esteja interpretando todas essas coisas erradas e pensando mal sobre isso. Desde já, obrigado.
fonte
i = i/2
a base é dois, porque o ciclo é repetido invertendo multiplicação por dois.Respostas:
Você ignorou as principais características da base do logaritmo .
Como
i
é dividido por 2 em cada iteração, o tempo de execução é logarítmico com a base 2. EO que você está olhando é
(logaritmo com base 10)
A propósito, a razão pela qual a base é frequentemente omitida nas discussões em tempo de execução (e sua calculadora provavelmente não possui um botão para o log 2 ) é que, devido aos mecanismos da matemática logarítmica, uma base diferente corresponde a um fator constante e, portanto, não é relevante quando você está ignorando fatores constantes de qualquer maneira. Pode ser calculado facilmente:
fonte
Além da resposta de Michael Borgwardt , o caractere til antes de cada resposta deve ser lido como "proporcional a". Portanto, se você dobrar N (digamos, de 500 para 1000), verá que o tempo de execução (ou, neste caso, o número de estrelas impressas) aumentaria por um fator que seria igual a (log1000 / log 500), que é independente de qual base você usa.
fonte
~
é uma abreviação de≅
.∝
símbolo não~
! A~
é usado para indicar relações de equivalência ou aproximados igualdades (consulte a página da Wikipedia sobre til ).