Como se presentó anteriormente en esta página, la conjetura de Collatz es uno de los problemas matemáticos más simples de entender en su planteamiento, pero que aún no ha visto su resolución debido a su complejidad para demostrar su veracidad o falsedad. Incluso, el famoso matemático Paul Erdős dijo que «las matemáticas no están listas para este problema» y que «la conjetura de Collatz es probablemente intratable y parece haber sido diseñada para atormentar a los matemáticos». En este artículo, no trataremos sobre la imposibilidad o no de demostrar esta conjetura, sino que la utilizaremos como un ejemplo para mostrar algunos fundamentos de la programación, en específico, los ciclos «while» y los condicionales «if».
Como dice la conjetura, elijo un número natural (no consideraremos al 0 como natural). Si es par, lo divido por 2, y si es impar, lo multiplico por 3 y le sumo 1. Podemos ver que la acción que se realice dependerá de la paridad del número, y estas acciones/verificaciones se iteran sucesivamente hasta llegar al número 1, tal como propone la conjetura. Aquí es donde observamos que existe un ciclo, una iteración de acciones, y cada acción se realizará dependiendo de si se cumple una condición u otra. De esta forma, podemos ver que los fundamentos básicos de la programación, como los ciclos y condicionales, están presentes en la definición de esta conjetura.
La programación es una herramienta que nos permite definir algoritmos o instrucciones para que una computadora resuelva un problema mediante una entrada, entregando una salida o respuesta a la entrada indicada. En este sentido, podríamos decir que la definición de la conjetura de Collatz es un algoritmo «programado», ya que siguiendo esos pasos, una persona puede resolverlo. Sin embargo, para que una computadora lo entienda, debemos transformar la idea de algoritmo en un código en un lenguaje de programación. Este lenguaje permite al programador describir su algoritmo de manera precisa y entendible, y luego se traduce en lenguaje máquina, es decir, le ordena al computador hacer exactamente lo descrito en el código, entregando así el resultado.
Usaremos el lenguaje Python debido a su alta legibilidad y facilidad de uso. Para el ciclo que describe hacer una acción «hasta que el número sea 1», utilizaremos un bucle «while», que en español significa «mientras». De esta manera, el computador realizará acciones «mientras el número sea distinto de 1», ya que al llegar a 1 se acaba el algoritmo. Dentro de cada iteración, revisaremos si el número es par o no, usando «if», que en español quiere decir «si lógico». Tendremos, por lo tanto, dos casos: «si el número es par, haré un proceso», y de ser otro caso, es decir, un «else», que justamente significa lo anterior, «de ser otro caso, haré el otro proceso». Por la estructura del «while», este comprueba que el número sea 1 después de ver los casos condicionales; por lo que si llega a uno luego de una condición, se repite el ciclo y, al ser 1, no cumple la condición del «while» de «mientras el número sea distinto de 1» establecida anteriormente, y el proceso termina. Añadiremos un contador para saber cuántas iteraciones se realizaron, definiendo un número igual a 0 y sumando 1 por cada acción dentro del ciclo.
Aquí está el código en Python que implementa la conjetura de Collatz con el contador:
Este código muestra cómo piensa un programador y su relación con los lenguajes de programación. La programación es una herramienta que permite concretizar una idea o una forma de resolver un problema; es nuestra línea de comunicación del pensamiento abstracto-formal a la máquina, que solo recibe instrucciones en unos y ceros. Es así como podemos diseñar soluciones informáticas a problemas más grandes, como crear un programa con interfaz de usuario, realizar investigaciones estadísticas que requieran procesamiento intensivo, entre otros desafíos.
Atte. Patricio Figueroa G – Estudiante de ICI