Supongamos que hay al menos 1 página, pero no sabemos nada sobre cuán grande puede ser [matemática] N [/ matemática].
Haremos una especie de búsqueda binaria inversa como primer paso y luego haremos una búsqueda binaria como segundo paso.
Comience con [matemáticas] i = 1 [/ matemáticas]. Si la consulta [matemática] (i) [/ matemática] no se encuentra, la última página es la página 0 y puede detenerse.
De lo contrario, duplique repetidamente i y ejecute [math] query (i) [/ math] hasta que no lo encuentren.
- Cómo calcular el número de diagonales de un polígono cuando se le da el número de vértices
- Si los términos primero, segundo y octavo de GP son respectivamente n ^ -4, n ^ n y n ^ 52, entonces ¿cuál es el valor de n?
- El producto de dos números cuadrados perfectos consecutivos es 900. ¿Cuál es la suma de estos dos números? ¿Cuál es una manera fácil de encontrar la respuesta?
- ¿Cuántos vértices tiene una gráfica regular de grado 4 con 10 aristas?
- Un número natural N tiene factores. ¿Cuántos factores tiene 2N?
Ahora sabe que el último número de página debe estar entre [matemática] i / 2 [/ matemática] (resultado del paso anterior) y [matemática] i-1 [/ matemática]. Ahora puede ejecutar la búsqueda binaria para encontrar la última página.
Utilice [math] i / 2 [/ math] como límite inferior y [math] i-1 [/ math] como límite superior. Consulta la media aritmética de los límites. ¿Aún no se encuentra? Establezca el límite superior en la posición consultada menos 1. ¿Encontró en su lugar? Haga que la posición consultada sea el límite inferior. Repita hasta que el mínimo y el máximo se encuentren. Este es el número de la última página.
El número de pasos necesarios: [math] \ log_2 N [/ math] para encontrar el primer número de página fuera de rango, luego [math] \ left (\ log_2 N \ right) -1 [/ math] pasos para binario buscar. La complejidad del tiempo es, por lo tanto, [matemática] O (\ log N) [/ matemática].