Estoy analizando algunos tiempos de ejecución de diferentes bucles for, y a medida que obtengo más conocimiento, tengo curiosidad por comprender este problema que todavía tengo que descubrir. Tengo este ejercicio llamado "Cuántas estrellas están impresas":
for (int i = N; i > 1; i = i/2) System.out.println("*");
Las respuestas para elegir es
A: ~log N
B: ~N
C: ~N log N
D: ~0.5N^2
Entonces la respuesta debería ser A y estoy de acuerdo con eso, pero por otro lado ... Digamos N = 500
qué sería Log N
entonces. Sería 2.7. Entonces, ¿qué pasa si decimos eso N=500
en nuestro ejercicio anterior? ¿Eso definitivamente imprimiría más estrellas han 2.7? ¿Cómo se relaciona eso?
Porque tiene sentido decir que si el ciclo for tuviera este aspecto:
for (int i = 0; i < N; i++)
imprimiría N
estrellas.
Espero encontrar una explicación para esto aquí, tal vez estoy interpretando mal todas estas cosas y pensando mal. Gracias por adelantado.
fuente
i = i/2
la base es dos, porque el bucle está revirtiendo multiplicación repetida por dos.Respuestas:
Has pasado por alto la característica clave de la base de logaritmo .
Como
i
se divide entre 2 en cada iteración, el tiempo de ejecución es logarítmico con la base 2. YLo que estás viendo es
(logaritmo con base 10)
Por cierto, la razón por la cual la base a menudo se omite en las discusiones en tiempo de ejecución (y su calculadora probablemente no tiene un botón para el registro 2 ) es que debido a los mecanismos de las matemáticas logarítmicas, una base diferente corresponde a un factor constante y, por lo tanto, no es relevante cuando ignoras factores constantes de todos modos. Se puede calcular fácilmente:
fuente
Además de la respuesta de Michael Borgwardt , el carácter de tilde delante de cada respuesta debe leerse como "proporcional a". Entonces, si dobló N (digamos, de 500 a 1000), vería que el tiempo de ejecución (o, en este caso, el número de estrellas impresas) aumentaría en un factor que sería igual a (log1000 / log 500), que es independiente de la base que usa.
fuente
~
es una abreviatura de≅
.∝
símbolo no~
! Se~
utiliza para indicar relaciones de equivalencia o igualdades aproximadas (consulte la página de wikipedia sobre tilde ).