38. Aplicaciones matemáticas en algoritmos

Los algoritmos usan matemática para contar, comparar, medir, decidir, buscar, ordenar y estimar. Aunque el código parezca lógico, casi siempre hay una estructura matemática detrás.

38.1 Introducción

Un algoritmo es una secuencia ordenada de pasos para resolver un problema. La matemática aparece cuando definimos condiciones, repetimos acciones, calculamos posiciones o evaluamos resultados.

No todos los algoritmos necesitan fórmulas complicadas. Muchas veces basta con usar operaciones básicas, divisibilidad, promedios, porcentajes, comparaciones y funciones simples.

En este tema veremos ejemplos concretos de matemática aplicada a algoritmos con JavaScript.

38.2 Contar elementos

Contar es una de las operaciones matemáticas más frecuentes. Un algoritmo puede contar productos, usuarios, intentos, errores, palabras o resultados que cumplen una condición.

const edades = [15, 22, 18, 31, 12, 40];
let mayoresDeEdad = 0;

for (const edad of edades) {
  if (edad >= 18) {
    mayoresDeEdad++;
  }
}

console.log(mayoresDeEdad);

38.3 Acumular valores

Muchos algoritmos suman valores para obtener totales. Esta idea aparece en carritos de compra, estadísticas, reportes y cálculos financieros.

const precios = [1200, 850, 430, 2100];
let total = 0;

for (const precio of precios) {
  total += precio;
}

console.log(total);

38.4 Calcular promedios

El promedio resume un conjunto de datos en un solo valor. Es útil para notas, tiempos, ventas, mediciones y métricas de uso.

promedio = suma de valores / cantidad de valores
const tiempos = [12, 15, 11, 18, 14];
let suma = 0;

for (const tiempo of tiempos) {
  suma += tiempo;
}

const promedio = suma / tiempos.length;

console.log(promedio);

38.5 Encontrar mínimos y máximos

Buscar el menor o el mayor valor requiere comparar. Este patrón aparece en precios, temperaturas, puntajes y distancias.

const puntajes = [340, 120, 560, 410, 290];
let maximo = puntajes[0];

for (const puntaje of puntajes) {
  if (puntaje > maximo) {
    maximo = puntaje;
  }
}

console.log(maximo);

38.6 Usar el módulo para ciclos

El operador módulo permite trabajar con restos. Es útil para alternar turnos, detectar pares, repetir patrones y circular por índices.

for (let turno = 0; turno < 6; turno++) {
  const jugador = turno % 2;
  console.log("Turno " + turno + ": jugador " + jugador);
}

38.7 Detectar números pares

La divisibilidad aparece en muchos algoritmos. Un número es par si el resto de dividirlo por 2 es cero.

const numeros = [3, 8, 11, 14, 20];

for (const numero of numeros) {
  if (numero % 2 === 0) {
    console.log(numero);
  }
}

38.8 Búsqueda lineal

Una búsqueda lineal revisa los elementos uno por uno hasta encontrar el valor buscado o llegar al final.

const codigos = [105, 208, 319, 421];
const buscado = 319;
let encontrado = false;

for (const codigo of codigos) {
  if (codigo === buscado) {
    encontrado = true;
  }
}

console.log(encontrado);

38.9 Búsqueda binaria

La búsqueda binaria usa la mitad de un intervalo para decidir dónde seguir buscando. Requiere que los datos estén ordenados.

const datos = [4, 9, 15, 23, 31, 42, 58];
const buscado = 31;
let izquierda = 0;
let derecha = datos.length - 1;
let posicion = -1;

while (izquierda <= derecha) {
  const medio = Math.floor((izquierda + derecha) / 2);

  if (datos[medio] === buscado) {
    posicion = medio;
    break;
  }

  if (datos[medio] < buscado) {
    izquierda = medio + 1;
  } else {
    derecha = medio - 1;
  }
}

console.log(posicion);

38.10 Ordenar valores

Ordenar significa reorganizar valores según una regla. JavaScript permite indicar la comparación matemática que define el orden.

const numeros = [18, 4, 72, 9, 31];

numeros.sort((a, b) => a - b);

console.log(numeros);

38.11 Medir distancia entre valores

La diferencia absoluta permite medir qué tan lejos están dos valores sin importar cuál es mayor.

const temperaturaEsperada = 22;
const temperaturaActual = 18.5;

const diferencia = Math.abs(temperaturaEsperada - temperaturaActual);

console.log(diferencia);

38.12 Normalizar valores

Normalizar convierte un valor a una escala común. Por ejemplo, pasar un puntaje de 0 a 100 a un valor entre 0 y 1.

normalizado = (valor - mínimo) / (máximo - mínimo)
const puntaje = 75;
const minimo = 0;
const maximo = 100;

const normalizado = (puntaje - minimo) / (maximo - minimo);

console.log(normalizado);

38.13 Estimar cantidad de operaciones

La matemática ayuda a estimar cuánto trabajo hace un algoritmo. Si un bucle recorre 100 elementos, realiza aproximadamente 100 pasos principales.

const cantidadElementos = 100;
let operaciones = 0;

for (let i = 0; i < cantidadElementos; i++) {
  operaciones++;
}

console.log(operaciones);

38.14 Crecimiento de algoritmos

Algunos algoritmos crecen de forma lineal y otros de forma cuadrática. Esta diferencia importa cuando aumenta la cantidad de datos.

const n = 5;
let operaciones = 0;

for (let i = 0; i < n; i++) {
  for (let j = 0; j < n; j++) {
    operaciones++;
  }
}

console.log(operaciones);

38.15 Errores comunes

  • No inicializar correctamente acumuladores, mínimos o máximos.
  • Usar una búsqueda binaria con datos desordenados.
  • Confundir el índice de un arreglo con el valor guardado en ese índice.
  • Olvidar que el módulo devuelve un resto, no una división exacta.
  • No considerar qué ocurre con listas vacías.
const valores = [];

if (valores.length === 0) {
  console.log("No se puede calcular el promedio");
} else {
  const total = valores.reduce((suma, valor) => suma + valor, 0);
  console.log(total / valores.length);
}

38.16 Qué debes recordar de este tema

  • Los algoritmos usan matemática para contar, comparar, buscar y ordenar.
  • Los acumuladores permiten calcular totales y promedios.
  • El módulo ayuda a trabajar con ciclos, patrones y divisibilidad.
  • La búsqueda binaria usa divisiones sucesivas del intervalo.
  • La estimación de operaciones ayuda a entender el rendimiento.
  • Los casos vacíos y los límites deben tratarse explícitamente.

38.17 Conclusión

La matemática básica aparece constantemente en los algoritmos. Comprender conteos, comparaciones, restos, promedios y crecimiento permite escribir soluciones más claras y detectar errores con mayor rapidez.

En el próximo tema veremos aplicaciones matemáticas en videojuegos y simulaciones.