40. Aplicaciones de los logaritmos

Los logaritmos ayudan a analizar crecimientos rápidos, comprimir rangos enormes, estimar pasos multiplicativos y comprender algoritmos eficientes como la búsqueda binaria.

40.1 Introducción

Los logaritmos no son solo una herramienta algebraica. En programación aparecen cuando trabajamos con escalas grandes, crecimiento exponencial, algoritmos que dividen problemas y mediciones basadas en órdenes de magnitud.

En este tema veremos aplicaciones prácticas donde el logaritmo permite convertir un problema difícil de manejar en una escala más cómoda.

40.2 Recordatorio

Un logaritmo responde a la pregunta: ¿a qué exponente hay que elevar una base para obtener un valor?

log₂(1024) = 10 porque 2¹⁰ = 1024

Esta interpretación es especialmente útil cuando los valores crecen por multiplicaciones repetidas.

40.3 Escalas logarítmicas

Una escala logarítmica comprime valores muy grandes. En lugar de representar el valor directamente, representa su logaritmo.

Valor log₁₀(valor)
10 1
100 2
1000 3
1000000 6

40.4 Normalizar valores grandes

Podemos usar logaritmos para transformar valores muy grandes en una escala más manejable para gráficos o interfaces.

function escalaLog10(valor) {
  if (valor <= 0) {
    return null;
  }

  return Math.log10(valor);
}

console.log(escalaLog10(10));
console.log(escalaLog10(1000));
console.log(escalaLog10(1000000));

40.5 Órdenes de magnitud

El logaritmo decimal permite estimar el orden de magnitud de un número. Esto indica aproximadamente cuántas cifras o potencias de diez contiene.

function ordenDeMagnitud(valor) {
  if (valor <= 0) {
    return null;
  }

  return Math.floor(Math.log10(valor));
}

console.log(ordenDeMagnitud(50));
console.log(ordenDeMagnitud(5000));
console.log(ordenDeMagnitud(2000000));

40.6 Búsqueda binaria

La búsqueda binaria reduce el espacio de búsqueda a la mitad en cada paso. Por eso su cantidad de pasos crece de forma logarítmica.

pasos aproximados = log₂(n)

Si hay 1024 elementos, se necesitan alrededor de 10 divisiones por la mitad.

40.7 Estimar pasos de búsqueda

function pasosBusquedaBinaria(cantidad) {
  if (cantidad <= 0) {
    return 0;
  }

  return Math.ceil(Math.log2(cantidad));
}

console.log(pasosBusquedaBinaria(10));
console.log(pasosBusquedaBinaria(1024));
console.log(pasosBusquedaBinaria(1000000));

40.8 Complejidad O(log n)

Un algoritmo de complejidad O(log n) aumenta lentamente su cantidad de pasos cuando crece el tamaño de entrada.

n log₂(n)
1,024 10
1,048,576 20
1,073,741,824 30

Por eso los algoritmos logarítmicos suelen ser muy eficientes.

40.9 Simular divisiones por mitad

Podemos simular cuántas veces se puede dividir una cantidad por dos hasta llegar a uno.

function divisionesHastaUno(cantidad) {
  let pasos = 0;
  let actual = cantidad;

  while (actual > 1) {
    actual = Math.ceil(actual / 2);
    pasos++;
  }

  return pasos;
}

console.log(divisionesHastaUno(1024));
console.log(divisionesHastaUno(1000000));

40.10 Decibeles

Los decibeles usan una escala logarítmica para representar relaciones de intensidad. Esto permite manejar rangos muy grandes de sonido o señal.

dB = 10 · log₁₀(intensidad / referencia)
function decibeles(intensidad, referencia) {
  if (intensidad <= 0 || referencia <= 0) {
    return null;
  }

  return 10 * Math.log10(intensidad / referencia);
}

console.log(decibeles(100, 1));
console.log(decibeles(1000, 1));

40.11 Analizar crecimiento exponencial

Si una cantidad crece por un factor fijo, el logaritmo permite calcular cuántos períodos hacen falta para alcanzar una meta.

function periodosParaMeta(inicial, factor, meta) {
  if (inicial <= 0 || factor <= 1 || meta <= inicial) {
    return 0;
  }

  return Math.ceil(Math.log(meta / inicial) / Math.log(factor));
}

console.log(periodosParaMeta(1000, 1.2, 10000));

40.12 Escalar puntajes

En algunos sistemas, un puntaje puede crecer muchísimo. Una escala logarítmica permite mostrar diferencias grandes sin que los valores altos dominen toda la interfaz.

function puntajeEscalado(puntaje) {
  if (puntaje <= 0) {
    return 0;
  }

  return Math.round(100 * Math.log10(puntaje + 1));
}

console.log(puntajeEscalado(10));
console.log(puntajeEscalado(1000));
console.log(puntajeEscalado(100000));

40.13 Visualización de datos

Cuando los datos abarcan varios órdenes de magnitud, una escala lineal puede ocultar valores pequeños. Una transformación logarítmica ayuda a comparar mejor.

datos: 10, 100, 1000, 1000000 log₁₀: 1, 2, 3, 6

40.14 Aplicaciones resumidas

Aplicación Uso del logaritmo
Búsqueda binaria Estimar divisiones sucesivas por dos
Complejidad algorítmica Entender crecimiento lento de pasos
Escalas grandes Comprimir rangos enormes
Decibeles Representar relaciones de intensidad
Crecimiento exponencial Calcular períodos necesarios para una meta

40.15 Errores comunes

  • Aplicar logaritmos a valores cero o negativos.
  • Confundir escala logarítmica con escala lineal.
  • Olvidar qué base se está usando.
  • Usar logaritmos para ocultar diferencias importantes sin explicarlas.
  • Interpretar O(log n) como si fuera constante.

40.16 Qué debes recordar de este tema

  • Los logaritmos sirven para analizar procesos multiplicativos.
  • Permiten comprimir rangos muy grandes.
  • La búsqueda binaria tiene comportamiento logarítmico.
  • O(log n) crece lentamente cuando aumenta n.
  • Las escalas logarítmicas son útiles para órdenes de magnitud.
  • Siempre hay que validar que la entrada del logaritmo sea positiva.

40.17 Conclusión

Los logaritmos son una herramienta práctica para programación porque permiten pensar en escalas, crecimiento, eficiencia y rangos enormes de valores. Son especialmente útiles cuando el problema involucra multiplicaciones repetidas o divisiones sucesivas.

En el próximo tema comenzaremos con funciones trigonométricas.