🧮 Computational Mathematics

Inicio · Parte 00 — Pensamiento matemático desde cero

001 — Números naturales y conteo

cero-absoluto clase 1 de 20 4 horas demostración counting

Contar es establecer una biyección entre un conjunto y un tramo inicial de los naturales.

Fórmulas

1 + 2 + ... + n = n(n+1)/2
|{1, 2, ..., n}| = n

Desarrollo

Contar parece trivial hasta que se intenta programar. Cuando decimos que un conjunto tiene 7 elementos, estamos afirmando que existe una correspondencia uno a uno entre ese conjunto y {1,2,3,4,5,6,7}. Esa definición —debida a la construcción de los naturales que formalizaron Peano y Dedekind a finales del siglo XIX— es la que permite contar cosas que no se pueden señalar con el dedo: las combinaciones posibles de una contraseña, los caminos en un grafo, los estados de un programa.

La suma de los primeros n naturales ilustra la diferencia entre contar y calcular. Sumar uno a uno cuesta n operaciones; la fórmula cerrada cuesta tres, independientemente de n. El argumento clásico —atribuido a Gauss siendo niño, aunque la anécdota es probablemente apócrifa— consiste en emparejar el primer término con el último, el segundo con el penúltimo, y observar que cada pareja suma n+1 y que hay n/2 parejas.

Esta distinción reaparece durante todo el programa. En la parte 04 se llamará «complejidad algorítmica»; en la parte 11, «coste de un método numérico». Aquí es simplemente la observación de que dos procedimientos correctos pueden diferir en cuántas operaciones necesitan, y que esa diferencia importa cuando n es grande.

Un detalle que el laboratorio comprueba: la fórmula cerrada y la suma iterativa dan exactamente el mismo entero. Con enteros de Python esto es cierto siempre. En la parte 01 veremos que con números en punto flotante la coincidencia deja de estar garantizada, y por qué.

Ejemplo trabajado

Sumar los enteros de 1 a 100.

Iterativo:  1 + 2 + 3 + ... + 100      → 100 sumas
Emparejado: (1+100) + (2+99) + ...     → 50 parejas de 101
            50 · 101 = 5050
Cerrado:    n(n+1)/2 = 100·101/2 = 5050 → 3 operaciones

Verificación cruzada: ambos caminos deben dar 5050. Si no coinciden, uno de los dos está mal implementado. Esa comprobación —dos caminos independientes al mismo resultado— es el patrón de verificación que se usará en todo el programa.

Qué calcula el laboratorio

Conteo, suma de Gauss y verificación cerrada frente a iterativa.

python classes/part-00-pensamiento-matematico-desde-cero/001-numeros-naturales-y-conteo/lab.py
compmath run 001

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "n": 100,
  "suma_iterativa": 5050,
  "suma_formula_cerrada": 5050,
  "coinciden": true,
  "operaciones_iterativas": 100,
  "operaciones_formula": 3
}

Errores comunes

Dónde se usa

Toda estimación de coste computacional empieza por un conteo. El número de comparaciones de un algoritmo de ordenación, el número de parejas en un producto cartesiano y el número de operaciones de una multiplicación de matrices son sumas de este tipo. En la parte 04 el conteo se vuelve combinatoria; en la 09, probabilidad.

Idea rectora de la parte

Un número sin unidad ni dominio es una cadena de dígitos, no una cantidad.

Error a evitar

Sumar porcentajes como si fueran cantidades absolutas.

Conexión con IA

Toda métrica de un modelo (accuracy, loss, learning rate) es una razón, un porcentaje o una escala. Interpretarlas mal es el primer error de un practicante de IA.

Bibliografía de la clase

Archivos de la clase