P vs. NP - N-Queens

Diseñando Algoritmo Polinómico para el Problema de las Mil Reinas

En agosto del 2022, hacía 20 años desde el fallecimiento de unos de los más grandes de la informática. Hablo de Edsger Wybe Dijkstra, el cual por muchos es recordado por sus punzantes críticas (Ej. Go To Statement Considered Harmful) a la forma de diseñar y programar software, de la época. Hace unos años tuve el gusto de abordar una revisión histórica de sus trabajos, con la que pude apreciar y valorar todavía más su figura, así como la de otros importantes nombres como: Charles Antony Richard Hoare, David Lorge Parnas, Niklaus Wirth, Barbara Liskov, Stephen Zilles, Ole-Johan Dahl, Kristen Nygaard, Alan Kay… entre otros. Si hoy en día, diseñar software y programar puede ser visto como un ingenioso arte preciso es en gran medida gracias a las bases que todo ellos sentaron.

En mi libro, abordo un resumen de esa revisión histórica en la sección: 2.4 - La abstracción como puerta hacia P = NP (58-63 pág.) y argumento como pude apreciar que abstracción no solo inunda cada rincón de nuestra ciencia, sino que está detrás de los más importantes avances que hemos ido dando.

En honor a Edsger Wybe Dijkstra y a todos ellos en general, pensé que podría ser interesante dedicarles un algoritmo, aplicando mi metodología. Así que me propuse dedicar una semana para diseñar un nuevo algoritmo para el conocido problema de las mil reinas (N-Queens). Personalmente conocí este problema gracias al video de Eduardo Sáenz de Cabezón - El problema de las 1000 reinas. ¡Un millón de dólares en juego! en el cual me baso y uso para explicar algunas de las partes de la implementación que hago.

Ahora bien, recordemos que en EWD316: A Short Introduction to the Art of Programming (see more), Dijkstra aborda el diseño de un algoritmo que genera todas las configuraciones de las reinas para un tablero de 8*8. Sin embargo, siguiendo nuestra metodología lo que vamos a pretender es construir un conjunto que de forma abstracta contenga todas las configuraciones que sean válidas para un tablero de NxN, sin caer en los costes exponenciales asociados. En otras palabras, vamos a buscar y mostrar paso a paso durante una serie de videos como diseñamos un algoritmo teóricamente polinómico, haciendo uso de la abstracción como un recurso computacional más.

Referencias

Repositorios