lunes, 15 de febrero de 2021

El arte de contar II: torres de Hanoi y recursión

La recursión es uno de los principios más importantes no sólo de las matenáticas sino, también, de la informática. Todos los lenguajes de programación modernos permiten la recursión, y la usan como una de sus características fundamentales.

La idea de la recusrión es uy sencilla: utilizar, para la solución de un problema, la solución de una versión más sencilla del mismo problema, hasta llegar así, reduciendo la dimensión del problema, a uno tan sencillo que se puede resolver sencillamente.

La manera mejor de entender la recusrión es a través de un ejemplo. Consideremos un juego muy conocido: el juego de las torres de Hanoi. En una table hay tres palos y en uno de ellos hay una serie de discos de diámetro progresivamente más grande, hasta formar una especie de pirámide:
El juego consiste en mover la pirámide del palo $1$ al $2$ sin poner nunca un disco más grande por encima de uno más pequeño.

Si la torre está formada por $n$ discos, llamaremos el problema $\mbox{Hanoi}(n)$. Imaginemos ahora que no sabemos como solucionar $\mbox{Hanoi}(n)$ pero sí sabemos como solucionar el problema más sencillo con $n-1$ discos: $\mbox{Hanoi}(n-1)$. Con esta solución, es fácil resolver $\mbox{Hanoi}(n)$. El algoritmo es el siguiente:
  1. Usa $\mbox{Hanoi}(n-1)$ para mover los $n-1$ discos más pequeños del palo $1$ al palo $3$.
  2. Mueve el disco más grande del palo $1$ al palo $2$.
  3. Usa $\mbox{Hanoi}(n-1)$ para mover los $n-1$ discos más pequeños del palo $3$ al palo $2$.
El algoritmo se representa esquemáticamente como en Figura 2.
En realidad no hemos resuelto mucho: no sabemos como resolver $\mbox{Hanoi}(n-1)$. Pero, bueno, si sabemos como resolver $\mbox{Hanoi}(n-2)$ podemos usar el mismo algoritmo para resolver $\mbox{Hanoi}(n-1)$. ¿Y cómo resolvemos $\mbox{Hanoi}(n-2)$? Bueno, si sabemos como resolver $\mbox{Hanoi}(n-3)$...

Seguimos así hasta llegar a $\mbox{Hanoi}(1)$, el problema con sólo un disco. Y si sólo hay un disco, el problema es sencillo: movemos el disco desde el palo donde está al palo donde lo queremos y ya está.

La idea que hemos usado para resolver el problema de las torres de Hanoi es muy general. En informática es una idea que hace muy fácil escribir programas, en matemática se relaciona con uno de los principios más importantes de las matemáticas de los números enteros, el principio de inducción. Consideremos primero el problema desde el punto de vista de un programador.

Para los programadores

Las características de los problemas recursivos hace muy fácil programar soluciones para problemas aparentemente muy complicado como la torre de Hanoi. En este caso, escribir un programa que nos diga, paso a paso como mover los discos sería, sin recursión, extremadamente complicado (los que tienen buenos conocimientos de programación pueden intentarlo: el programa se puede escribir, pero es muy complicado de escribir y muy difícil de intender). Por otro lado, escribir un programa recursivo es muy fácil.

Queremos escribir una función, que llamaremos hanoi($n$, $a$, $b$, $c$). La función, como vemos, recibe cuatro parámetros. El primer parámetro ($n$) es el número de discos que tenemos que mover, el segundo ($a$) es al palo en que están los discos, el tercero ($b$) es el palo en que queremos mover los discos, finalmente, el cuarto ($c$) es el tercer palo, que, si lo necesitamos, podemos usar como auxilio para mover los discos de $a$ a $b$. La función, escrita en un \dqt{psudo-código} bastante fácil de entender es la siguiente:

  hanoi(n, a, b, c)
    if n = 1 then
      print "mueve un disco de " a " a " b
    else
      hanoi(n-1, a, c, b)
      print "mueve un disco de " a " a " b
      hanoi(n-1, c, b, a)

Esto es todo. Si $n=1$, sólo hay que mover un disco, por tanto imprimimos en pantalla que hay que mover un disco desde el palo fuente al palo destino. Si no, la función se llama a si misma para mover $n-1$ discos de la fuente al palo intermedio, mueve al disco más grande (que ahora ha quedado al descubierto) del palo fuente al palo destino, y luego vuelve a mover los $n-1$ discos que se había quitado del medio del palo auxiliario al palo destino. Y el programa funciona. Si ejecutamos la función hanoi(5, 1, 2, 3) (mueve una torre de cinco discos del palo 1 al palo 2 usando 3 como auxilio), conseguimos la respuesta siguiente:

mueve un disco de 1 a 2
mueve un disco de 1 a 3
mueve un disco de 2 a 3
mueve un disco de 1 a 2
mueve un disco de 3 a 1
mueve un disco de 3 a 2
mueve un disco de 1 a 2
mueve un disco de 1 a 3
mueve un disco de 2 a 3
mueve un disco de 2 a 1
mueve un disco de 3 a 1
mueve un disco de 2 a 3
mueve un disco de 1 a 2
mueve un disco de 1 a 3
mueve un disco de 2 a 3
mueve un disco de 1 a 2
mueve un disco de 3 a 1
mueve un disco de 3 a 2
mueve un disco de 1 a 2
mueve un disco de 3 a 1
mueve un disco de 2 a 3
mueve un disco de 2 a 1
mueve un disco de 3 a 1
mueve un disco de 3 a 2
mueve un disco de 1 a 2
mueve un disco de 1 a 3
mueve un disco de 2 a 3
mueve un disco de 1 a 2
mueve un disco de 3 a 1
mueve un disco de 3 a 2
mueve un disco de 1 a 2

Si alguien tiene la paciencia de probarlo, verá que, efectivamente, las instrucciones son correctas.

Para los matemáticos

Una cosa puede haber llamado la atención en el ejemplo precedente: hay muchos movimientos. Incluso para mover una torre de sólo cinco discos, son necesarios muchos movimientos. Es natural (para un matemático, por lo menos) preguntarse: Cuántos movimientos necesito para mover una torre de $n$ discos, donde $n$ puede ser cualquiera?

Para descubrirlo, llamemos $H(n)$ el número de movimientos necesarios para mover una torre de $n$ discos. Si sólo tenemos un disco, la cosa es fácil: simplemente movemos el disco de un palo al otro. Por tanto: \begin{equation} H(1) = 1 \end{equation} Para cualquier $n$ construimos una ecuación recursiva. Para mover una torre de $n$ discos del palo $1$ al palo $2$, tenemos que hacer tres operaciones:
  1. mover una torre de $n-1$ discos de $1$ a $3$; el número de movimientos necesarios es $H(n-1)$;
  2. mover el disco que queda de $1$ a $2$: un movimiento;
  3. mover una torre de $n-1$ discos de $3$ a $2$; el número de movimientos necesarios es $H(n-1)$.
Sumando todos los movimientos, esto nos da la ecuación recursiva \begin{equation} H(n) = 2\cdot H(n-1) + 1 \end{equation} Con estas dos ecuaciones, podemos calcular el número de movimientos necesario por cualquier $n$: \begin{equation} \begin{aligned} H(1) &= 1~~~\mbox{esto ya lo sabíamos} \\ H(2) &= 2H(1) + 1 = 2 + 1 = 3 \\ H(3) &= 2H(2) + 1 = 2\cdots 3 + 1 = 7 \\ H(4) &= 2H(3) + 1 = 2\cdots 7 + 1 = 15 \\ H(5) &= 2H(4) + 1 = 2\cdots 15 + 1 = 31 \vdots \end{aligned} \end{equation} Con este método podemos calcular el número de movimientos necesarios para cualquier número de discos. Es fácil continuar y darse cuenta, por ejemplo, que para mover una torre de $10$ discos son necesarios nada menos que $1023$ movimiento y para una torre de 20 discos un imposible $1.048.575$ movimientos.

Esto nos puede satisfafer, pero seguramente no satisface a un matemático. Lo que un matemático busca es una fórmula directa, algo no recursivo, algo que, por cada número $n$, nos dice, directamente y sin tantos rodeos, cuantos movimientos necesitamos. (No siempre los matemáticos lo consiguen, pero en este caso veremos que sí, que se puede conseguir).

Empecemos notando que los números que hemos conseguido tienen una particularidad: si los aumentamos de una unidad, conseguimos siempre potencias de $2$: $1+1=2=2^1$, $3+1=4=2^2$, y siguiendo $31+1=32=2^5$. Lo mismo vale para los otros valores que hemos mencionado: $1.023+1=1.024=2^{10}$ y $1.048.575+1=1.048.576=2^{20}$. No sólo: notamos que el exponente de $2$ siempre es igual al argumento de la función $H$. Así, por ejemplo \begin{equation} \begin{aligned} H(3) + 1 &= 7 + 1 = 8 = 2^3 \\ H(5) + 1 &= 31 + 1 = 32 = 2^5 \\ H(10) + 1 &= 1.023 + 1 = 1.024 = 2^{10} \end{aligned} \end{equation} Esto nos da una idea: es posible que hayamos encontrado la regla general, y que podamos escribir, por cada número $n$ \begin{equation} H(n) = 2^n - 1 \end{equation} Es posible (y, de hecho, es así). Pero un buen matemático no se conforma con ser posible: un buen matemático necesita demostrarlo. Para hacer esto, dejamos de un lado por el momento nuestra ecuación y nos ocupamos de un método de demostración muy útil, muy relacionado con la recursión, y que nos permitirá demostrar nuestra hipótesis: el método de inducción.

El método de inducción

El método de inducción es un instrumento potente y en aparencia sencillo, pero la lógica que está detrás de su aplicación es sorprendentemente sutil. Empecemos con su definición. Consideremos una propiedad $P$ que los números enteros pueden o no tener, y escribamos $P(n)$ para indicar que el número $n$ tiene la propiedad. $P$ puede representar muchas propiedades. Por ejemplo:
  1. $P(n)$ quiere decir "$n$ es un número primo";
  2. $P(n)$ quiere decir "$n$ es impar";
  3. $P(n)$ quiere decir $n>0$;
  4. $P(n)$ quiere decir "$2n$ es par;"
  5. $P(n)$ quiere decir "una torre de Hanoi con $n$ discos se puede mover en $2^n-1$ movimientos"
Algunas de estas propiedades son ciertas por todos números (todos números enteros son mayores de cero, y su doble es par), otras no (no todos los números son primos, ni todos son impares). Propiedades como $P$ también tienen propiedades. En particular, llamaremos una propiedad hereditaria si lo siguiente es ciertos: por cada número $n$, si $n$ tiene la propiedad, entonces $n+1$ también la tiene. En lógica esto se escribe: \begin{equation} \forall n. P(n) \Rightarrow P(n+1) \end{equation} (el símbolo $\forall$ singifica "para todos": con esto afirmamos que lo que sigue es cierto por todo $n$, el símbolo $\Rightarrow$ quiere decir "implica": afirma que si el predicado que precede el símbolo es cierto, el predicado que lo sigue también lo es). Es fácil ver, por ejemplo, que la propiedad 3 es hereditaria: si un número $n$ es mayor de cero y consideramos el número $n+1$ obtenido añadiendo una unidad a $n$, ese número también será mayor de cero. Por otro lado, la propiedad 2 no lo es: si $n$ es impar (por ejemplo, si $n=3$) entonces $n+1$ ($4$, en este caso) es par.

El principio de inducción nos dice lo siguiente:

Dada una propiedad $P$, si $P$ es válida en el caso de $n=1$, y $P$ es hereditaria, entonces $P$ es válida para todo número entero.

La intuición confirma el principio. Digamos, por ejemplo, que queremos demostrar que la propiedad es válida en el caso $n=5$. Procedemos así:
  • $P$ es cierto en el caso de $n=1$, es decir, $P(1)$;
  • Si $P(1)$ es cierto, entonces $P(2)$ es cierto;
  • Si $P(2)$ es cierto, entonces $P(3)$ es cierto;
  • Si $P(3)$ es cierto, entonces $P(4)$ es cierto;
  • Si $P(4)$ es cierto, entonces $P(5)$ es cierto;
Por tanto, si $P$ respeta los requisitos del principio de inducción, $P(5)$ es cierto. De la misma manera podemos (idealmente) aplicar el principio para demostrar que $P(n)$ es cierto sea cual sea $n$*.

Este principio nos proporciona una manera muy útil para demostrar teoremas. Tenemos una propiedad $P$ que queremos demostrar (por ejemplo, quereoms demostrar que el doble de cada número $n$ es par). Para demostrarla tenemos que demostrar que cumple las hipótesis del principio de inducción, es decir, tenemos que demostrar que:
  1. La propiedad es cierta en el caso $n=1$ (esto se llama el "caso base")
  2. Si asumimos que la propiedad es cierta en el caso $n$ (es decir: asumimos por hipótesis que $P(n)$ es cierto), entonces la propiedad es cierta en el caso $n+1$ (es decir: si $P(n)$ s cierto, entonces $P(n+1)$ también es cierto, esto es el "caso de inducción").
Si conseguimos demostrar estas dos cosas, entonces hemos demostrado que la propiedad $P$ es cierta por cada número. Considereos un ejemplo: queremos demostrar que, por cada $n$, $2n+1$ es impar. Tenemos los dos casos:
  1. Caso base: $n=1$. En este caso $2n+1=3$, y sabemos que $3$ es impar.
  2. Inducción: suponemos que la propuedad es cierta para $n$, es decir, supongamos que $2n+1$ es impar. Tenemos que demostrar que $2(n+1)+1$ es impar. Procedemos como sigue: \begin{equation} 2(n+1)+1 = 2n + 2 + 1 = 2n+1 + 2 \end{equation} Ahora, sabemos que $2n+1$ es impar, por tanto en esa ecuación tenemos un número impar (lo llamamos $m$) a que le añadimos $2$. Dado que $m$ es impar, su succesor, $m+1$ es par y por tanto su succesor $m+1+1=m+2$ es impar.

De vuelta a Hanoi

Tenemos ahora los instrumentos para demostrar que nuestra solución del número de movimientos necesarios para mover una torre es correcta. Sólo tenemos que reformular nuestro descubrimiento como una propiedad de los números enteros. La propiedad es la siguiente:

El número $n$ tiene la propiedad de Hanoi ($H(n)$) si es posible mover una torre de Hanoi de $n$ discos usando $H(n)=2^n-1$ movimientos.

Recordamos que $H(n)$ es el resultado de la ecuación recursiva \begin{equation} H(n) = 2\cdot H(n-1) + 1 \end{equation} que asumimos válida. Empecemos la demostración con los dos pasos
  1. Paso base $n=1$. Sabemos que podemos mover una torre de un solo disco con un solo movimientos. Dado que $H(1)=2^1-1=1$, la propiedad se cumple en el caso de $n=1$.
  2. Paso de inducción. Supongamos ahora que la propiedad sea cierta para $n$, es decir, que $H(n)=2^n-1$. Queremos demostrar que $H(n+1)=2^{n+1}-1$. Para esto, aplicamos la recursión: \begin{equation} \begin{array}{rcll} H(n+1) & = & 2H(n) + 1 & \mbox{ecuación recursiva} \\ & = & 2(2^n-1) + 1 & \mbox{hypótesis inductiva} \\ & = & 2\cdots2^n - 2 + 1 & \\ & = & 2^{n+1} - 1 \end{array} \end{equation} La igualdad crucial es la segunda: podemos remplazar $H(n)$ con $2^n-1$ porque el método de inducción nos permite asumir que la propiedad es cierta para $n$, es decir, asumimos ya como demostrado que $H(n)=2^n-1$ y usamos este hecho para demostrar que $H(n+1)=2^{n+1}-1$. El resto es álgebra.


♱ El pseudo código es un instrumento que los programadores usan a menudo para describir un problema. Se trata de una notación simplificada que evita todos los detalles necesarios para que un programa efectivamente funcione y que pone el foco en sus aspectos esenciales.

♯ Recordamos aquí que un número es primo si sólo se puede dividir por el número mismo y por $1$. Los números $2$, $3$, $5$, $7$, $11$, etc. son primos (por convención, el número $1$ no se considera primo), mientras, por ejemplo, $6$ y $9$ no lo son (el primero se puede dividir por $2$ y $3$, el segundo por $3$). Uno de los descubrimientos más sorprendente de los matemáticos griegos es que existe una infinidad de números primos: dado un número cualquiera, existe un número primo más grande que este número.

* Para los más lógicos: cuando he dicho que es obvio que la propiedad de inducción garantiza que $P$ es cierto para todos los números enteros, en realidad he engañado. Hay muchas sutilezas lógicas detrás del principio de inducción en que en ese momento no voy a entrar.

Esencialmente, lo que he demostrado con mi argumento intuitivo es que, dado cualquier número finito $n$, puedo demostrar que $P(n)$ es cierto. Pero esto es muy distinto que afirmar que $P$ es cierto en el caso de la infinidad de números enteros.

Una solución a este problema lógico es la de los llamados axiomas de Peano, que describen propiedades tan básicas de los números enteros que se asumen sin demostrar (propiedades como "cero es un número"). Uno de los axiomas de Peano es precisamente el principio de inducción. En este caso, los problemas lógicos desvanecen: simplemente definimos los números enteros como esos números para que vale el principio de inducción.

sábado, 6 de febrero de 2021

El arte de contar I: jugando a poker con las matrículas de coches

Una de las actividades fundamentales de las matemáticas es contar. Contar puede parecer banal, pero puede ser una de las cosas más complicada de las matemáticas. Hay varias técnicas útiles para contar cosas complicadas. Aquí veremos una: el análisis combinatorio.

Utilizaremos un juego que jugaba de niño con mi familia en los largos recorridos en coche (estoy hablando de un tiempo en que no podíamos simplemente estar cada uno por su cuenta jugando con el móvil sin ni siquiera reconocer que los otros estaban allí). Lo que hacíamos para distraernos era jugar a poker con las matrículas de los coches. Un coche tiene cuatro números en la matrícula (en España, en otros países este número varia), y a turno observábamos la matrícula de los coches que llegaban asignándonos puntos según las combinaciones permitidas del poker. La pregunta a que quiero contestar aquí es: ¿cuántas combinaciones de cuatro cifras hay que proporcionan puntos?

Con cuatro cifras se pueden crear 10.000 números (desde $0000$ hasta $9999$). Olvidemos por el momento las escalas, e intentemos contar cuantas otras combinaciones hay. Cada combinación del poker que da punto (excepto las escalas) tiene por lo menos dos números iguales (par, tris, full house, etc.), por tanto para contarlas podemos trabajar de una manera indirecta: ¿cuántas combinaciones no dan puntos? Si calculamos este número y lo restamos de $10.000$ conseguimos las combinaciones que buscamos.

Empecemos a construir un número de cuatro cifras sin repeticiones. Consideremos la primera cifra: en este lugar podemos poner cualquier número de 0 a 9, es decir, para la primera cifra tenemos $10$ posibilidades ($0, 1, 2, \ldots, 9$)

Una vez que hemos decidido una primera cifra (es decir, que hemos elegido una de las $10$ posibilidades), ¿cuántas posibilidades tenemos para la segunda cifra? Pues, queremos crear números sin repeticiones por tanto si la primera cifra era, por ejemplo, un $2$, para la segunda tenemos $9$ posibilidades (cualquier cifra menos el $2$). Este razonamiento lo podemos repetir por cada una de las $10$ posibilidades de elección de la primera cifra. Por tanto para tener un número de dos cifras sin repeticiones tenemos \begin{equation} 10 \times 9 = 90 \end{equation} posibilidades. Que es así es fácil comprobarlo: tenemos todas las $100$ posibles combinaciones de dos cifras excepto $10$ combinaciones ($00, 11, \ldots, 99$), lo que nos da $90$.

Ahora la tercera cifra: por cada una de las combinaciones que tenemos de dos cifras, podemos elegir la tercera cifra en $8$ maneras diferentes (todas excepto las que ya hemos elegido para la primera y la segunda cifra). Esto vale por cada una de las combinaciones, por tanto los números de tres cifras sin repeticiones son \begin{equation} 10 \times 9 \times 8 = 720 \end{equation} Ahora la mecánica es clara: para la cuarta cifra podemos elegir $7$ posibilidades diferentes, es decir los números de cuatro cifras con todas las cifras diferentes son \begin{equation} 10 \times 9 \times 8 \times 7 = 5.040 \end{equation} Estos son los números con todas las cifras diferentes, es decir, los que no dan puntos. Los números que dan puntos (otra vez: sin contar las escalas) son \begin{equation} 10.000 - 5.040 = 4.960 \end{equation}


Nos quedan por considerar las escalas. Hay siete escalas posibles: $0123, 1234, \ldots, 6789$ pero, claramente, no es necesario que las cifras estén ordenadas, es decir, un número como $2314$ sigue siendo una escala.

Consideremos una de esas escala, por ejemplo la escala $0123$. Haremos unas consideraciones parecidas a las de la primera parte pero, esta vez, con las posiciones de las cifras. ¿Dónde está el $0$? Hay cuatro posiciones posibles. Por cada una de estas $4$ posiciones, quedan $3$ posiciones posibles donde poner el $1$, por cada posición del $0$ y del $1$, quedan $2$ posiciones para el $2$ y, una vez que hemos puesto el $0$, el $1$ y el $2$, sólo nos queda una posición donde poner el $3$. El número total de números que contienen la escala $0123$ es por tanto \begin{equation} 4 \times 3 \times 2 \times 1 = 24 \end{equation} Estos son los números que contienen la escala $0123$. Dado que tenemos siete escalas diferentes (y ningún puede contener dos escalas a la vez), el número de posibilidades para una escala es $24\times{7}=168$.

Sumando los resultados obtenidos conseguimos el número total de combinaciones que nos dan punto en el poker de matrículas de coches: \begin{equation} 4.960 + 168 = 5128 \end{equation} Un poco más de la mitad. Si queréis jugar a cara o cruz (donde "cara" quiere decir que se ha visto un número que da puntos y "cruz" que se ha visto uno que no los da), os compensa apostar "cara". La ventaja es pequeña, pero existe.


Contar así puede parecer un poco complicado, pero tiene una gran ventaja: se puede extender. Digamos que vivimos en un país que tiene $6$ cifras en las matrículas. ¿Cuántas combinaciones ganadoras existen? (En este caso consideraremos como ganadoras también el "pentapoker"---cinco números iguales---y el "esapoker"---seis números iguales). Pues, sólo tenemos que extender nuestras consideraciones previas a seis cifras. Si no consideramos las escalas tenemos \begin{equation} 10 \times 9 \times 8 \times 7 \times 6 \times 5 = 151.200 \end{equation} combinaciones (tenemos ahora seis factores, uno por cada una de las seis cifras) no ganadoras y $1.000.000-151.200=848.800$ ganadoras. Las posibilidades para una escala son ahora \begin{equation} 6 \times 5 \times 4 \times 3 \times 2 \times 1 = 720 \end{equation} Esta vez tenemos sólo $5$ escalas posibles (de $012345$ hasta $456789$), por tanto las escalas serán $720\times{5}=3600$ y el número total de combinaciones ganadoras es \begin{equation} 848.800 + 720 = 849.520 \end{equation} Notamos como a medidas que aumenta el número de cifras el número de combinaciones ganadoras aumenta pero, claramente, si tenemos más de 10 cifras ninguna escala es posible.

miércoles, 3 de febrero de 2021

Paseos aleatorios: por qué los pelos siempre acaban en los rincones

Los americanos sostienen que en la vida hay dos cosas inevitables: la muerte y los impuestos. Se le ha olvidado una: los pelos en el suelo de casa. No sé como están los demás, pero el suelo de mi casa está diseminado de pelos (sobre todo desde que me he dejado el pelo muy largo). Parece increíble que todavía no me he vuelto calvo, pero, a pesar de que el espejo me dice que todavía tengo todo mi pelo, el suelo es de otra opinión.

Además, una aplicación elemental de la ley de Murphy al pelo en el suelo nos garantiza que este se colocará en los lugares donde más difícil es llegar para barrerlo: pegado a las paredes y, con particular predilección, en los rincones. Pero esta vez el pobre Murphy es inocente: la culpa del pelo en los rincones es de las matemáticas. Veamos por qué.

Empecemos con hacer los que mejor saben hacer los matemáticos: simplificar el problema. Se trata de un paso muy importante en matemáticas y en física: intentamos eliminar del problema todas las características secundaria hasta llegar a un problema más sencillo de resolver que pero mantiene la esencia del problema original. Se trata de un proceso de abstracción: ignoramos lo inesencial y extraemos del problema original sólo los aspectos fundamentales (abstracción deriva del latín abstraho---sacar fuera). El proceso es peligroso: intentando simplificar el problema podemos acabar eliminando aspectos que, lejos de ser secundarios, se revelan esenciales. Por esto la ciencia hace experimentos: una vez que hemos desarrollado una teoría mediante abstracción, es necesario ponerla a prueba comparandola con el problema original. En nuestro caso: la teoría que vamos a desarrollar, por simplificada que sea, debe explicarnos por qué el pelo termina siempre en los rincones. La teoría que vamos a utilizar es muy conocida en matemáticas y en física como teoría de los paseos aleatorios. Los paseos aleatorios tiene una larga y honrada tradición. El primer ejemplo, y el más conocido, es el llamado Movimiento Browniano, en honor del botánico Robert Brown, quien, en 1837 observó el movimiento de minúsculas partículas suspendidas en líquidos, movimientos que resultó ser un ejemplo de paseo aleatorio. Una de las contribuciones más destacada es la de Albert Einstein que, en 1905 desarrolló una teoría que explica matemáticamente los resultados que aquí vamos a conseguir con simulacione.


Paseos Aleatorios

Simplifiquemos, pues, el problema. Empezaremos con ocuparnos sólo de un pelo. Es obvio que, si conseguimos describir el comportamiento de un pelo, podemos aplicar el mismo razonamiento a todos los pelos que tenemos en el suelo y explicar por qué se acumulan. En segundo lugar, consideraremos un problema en una sola dimensión. Es decir, consideraremos que el pelo sólo se mueve en una dirección, en los dos sentidos. Si conseguimos explicar por qué en este caso los pelos se acumulan en un punto determinado, no será difícil extender la solución al caso de dos dimensiones, simplemente considerando una dimensión a la vez (con cuidado, como veremos a continuación). Tenemos por tanto esta situación:
La posición del pelo se describe con un solo número: la distancia $x$ (con signo) desde el punto inicial, que consideraremos como nuestro punto $x=0$. Si en un determinado momento $x>0$, el pelo se ha movido hacia la derecha, si $x<0$ se ha movido hacia la izquierda.

¿Por qué se mueve el pelo? Lo que mueve el pelo en nuestro suelo son las pequeñas corrientes de aire provocada por las causas más heterogéneas, desde una ventana que se abre, hasta la corriente provocada por una puerta que se cierra o por nosotros mismos pasando por ahi. Se trata de pequeños movimientos de aire esencialmente aleatorios e impredicibles. Por esto haremos un modelo del movimiento de nuestro pelo basado en los que los matemáticos llamámos paseos aleatorios

Esta es la idea. El paseante (yo, por ejemplo) se encuentra inicialmente en la posición $x=0$ y decide hacer un paso hacia la derecha o hacia la izquierda digamos cada $10$ segundos. Para decidir la dirección, lanzo una moneda: si sale cara hago un paso hacia la izquierda, si sale cruz hago un paso hacia la derecha. La primera pregunta que nos surge es obvia: tras haber dado $t$ pasos, ¿dónde estaré? No podemos dar una respuesta exacta a esta pregunta, dado que la respuesta depende de la secuencia específica de caras y de cruces que han salido cuando he lanzado la moneda, pero podemos dar una respuesta estadística. Si repito el paseo muchas veces (digamos, $1000$ veces), ¿cuantas de estas veces acabaré en una posición dada? La respuesta depende de la longitud del paseo. En la Figura 1 vemos la probabilidad de acabar en una posición dada por varios valores the la longitud del paseo.
La primera cosa que nos llama la atención es que tenemos máxima probabilidad de acabar en la posición de donde hemos salido: el pico de la función siempre está en $x=0$: cuando hacemos un paseo aleatorio, lo más probable es que no lleguemos a ningún lado. Por otro lado, la probabilidad de acabar en posiciones que no son la inicial cambia con la longitud del paseo. Con paseos más largo, el "pico" es más bajo, y las "alas" son más amplia. Esto quiere decir que, si paseamos muchos, tenemos una probabilidad un poco mejor de acabar más lejos de donde hemos salido.

En cualquier caso, si alguien tuviera la idea de usar paseos aleatorios para moverse por la ciudad, mejor que cambie de plan. El problema de los paseos aleatorios es que no nos llevan muy lejos. Si nos movemos en una dirección determinada a velocidad constante, la distancia a que llegamos es proporcional al tiempo en que andamos (es decir: si caminamos el doble del tiempo, llegamos el doble de lejos de nuestro punto de partida). En un diagrama que tiene en abscisas el tiempo y en ordenadas la distancia desde la salida, esta es una línea recta. En la Figura 2, esta es la línea azul, mientras que la línea roja es la distancia máxima a que llegamos con un paseo aleatorio.
Está claro que con el paseo aleatorio no llegamos tan lejos como con un paseo determinado. De hecho, la curva del paseo aleatorio se parece bastante a la curva negra, que es una curva del tipo $d=\sqrt{t}$. Esto quiere decir que si nos movemos con un paseo aleatorio, para llegar al doble de la distancia desde el punto de partida tendremo que caminar un tiempo cuatro veces mayor.


El pelo en los rincones

El pelo en el suelo de que nos estamos ocupando ejecuta un paseo aleatorio bajo el empuje irregular de las pequeñas corrientes de aire. Pero se trata de un paseo especial, de un paseo "vinculado". Si el pelo llega por azar a una pared, no puede ir más allá. Además, cuanto más cerca el pelo esté de la pared, tanto menos probable es que las corrientes les lleguen del lado de la pared, es decir, a medida que se acerca a la pared, se hace más probable que las corrientes aleatorias lo empujen hacia la pared. Podemos ver la evolución de ese paseo en la Figura 3
Al principio (curvas rojas y azul), el paseo no se distingue demasiado de uno normal: en muchos casos el pelo todavía no ha tenido tiempo de llegar a la pared. Hay unos pequeños bultos en la línea azul que indican que, en ciertos experimento, el pelo sí ha llegado a las paredes. En la línea verde, tras 500 lanzamientos de moneda, se nota algo de irregularidad, pero el pelo empieza a estar con más probabilidad en las paredes. Finalmente, en la línea negra, vemos que la probabilidad más grande de encontrar el pelo es en las paredes.

Lo que hemos hecho aquí es un experimento en una dimensión, pero podemos fácilmente imaginar dos paseos aleatorios, independientes en las dos dimensiones del suelo de nuestros pisos: habrá corrientes de aire en las dos dimensiones y en cada dimensión las características del paseo empujarán el pelo hacia la pared. Por tanto el pelo acabará terminando, y no por su culpa, en el único lugar en que hay una pared en ambas dimensiones: en el rincón.