<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>2306-0522</journal-id>
<journal-title><![CDATA[Revista Investigación y Tecnología]]></journal-title>
<abbrev-journal-title><![CDATA[Rev Inv Tec]]></abbrev-journal-title>
<issn>2306-0522</issn>
<publisher>
<publisher-name><![CDATA[Universida Mayor de San Andrés]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S2306-05222014000100003</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Algoritmo heurístico para el problema de la cobertura exacta]]></article-title>
<article-title xml:lang="en"><![CDATA[Heuristic algorithm for exact cover problem]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Torrico]]></surname>
<given-names><![CDATA[Lucio]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Mayor de San Andrés Facultad de Ciencias Puras y Naturales Carrera de Informática]]></institution>
<addr-line><![CDATA[La Paz ]]></addr-line>
<country>Bolivia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>00</month>
<year>2014</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>00</month>
<year>2014</year>
</pub-date>
<volume>3</volume>
<numero>1</numero>
<fpage>5</fpage>
<lpage>10</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.br/scielo.php?script=sci_arttext&amp;pid=S2306-05222014000100003&amp;lng=en&amp;nrm=iso&amp;tlng=en"></self-uri><self-uri xlink:href="http://www.scielo.br/scielo.php?script=sci_abstract&amp;pid=S2306-05222014000100003&amp;lng=en&amp;nrm=iso&amp;tlng=en"></self-uri><self-uri xlink:href="http://www.scielo.br/scielo.php?script=sci_pdf&amp;pid=S2306-05222014000100003&amp;lng=en&amp;nrm=iso&amp;tlng=en"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En general las soluciones exactas para el exact cover problem se obtienen a través de algoritmos intratables pues el problema es NP. El famoso algoritmo de Knuth (DLX) es uno de ellos. Se presenta un algoritmo heurístico que implementa la idea de tomar los subconjuntos por pares, aplicando una métrica de factibilidad basada en el número de subconjuntos con los que (no) colisionan los subconjuntos de la pareja, y la distancia de Hamming entre ellos. Al tomar parejas reducimos el tiempo de cálculo, y la elección de los pares más factibles, según la métrica, halla más rápidamente -en promedio- una solución si esta existe. La métrica puede utilizarse también para abandonar la búsqueda, después de cierto límite de factibilidad, conjeturando la no existencia de solución. El mismo parece comportarse bastante bien para los experimentos realizados.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[In general, exact solutions for the exact cover problem are obtained through intractable algorithms because the problem is NP. The famous Knuth's algorithm (DLX) is one ofthem. We present a heuristic algorithm that implements a the idea of taking subsets by pairs, applying a feasibility metric based on the number of subsets that (not)collide with the chosen pair, and the Hamming distance between them. By taking pairs we reduce the computation time, and the choice of the most feasible pairs, according to the metric, finda solution fáster (on average) , ifit exists. The metric can also be used to abandon the search after a certain feasibility limit, guessing the non existence of solution. His algorithm seems toperform quite wellfor experiments.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[algoritmo heurístico]]></kwd>
<kwd lng="es"><![CDATA[cobertura exacta]]></kwd>
<kwd lng="es"><![CDATA[DLX]]></kwd>
<kwd lng="en"><![CDATA[heuristic algorithm]]></kwd>
<kwd lng="en"><![CDATA[exact cover]]></kwd>
<kwd lng="en"><![CDATA[DLX]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="right"><font size="2" face="Verdana"><b>ART&Iacute;CULOS</b></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font face="Verdana" size="2"><b><font size="4">Algoritmo heurístico para el problema de la cobertura exacta</font></b></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font face="Verdana" size="3"><i><b>Heuristic algorithm for exact cover problem</b></i></font></p>     <p align="center">&nbsp;</p>     <p align="center">&nbsp;</p>     <p align="center"><font face="Verdana" size="2"><strong>Lucio Torrico</strong>     <br>   Instituto de Investigaciones en Informática    <br>   Carrera de Informática    ]]></body>
<body><![CDATA[<br>   Facultad de Ciencias Puras y Naturales    <br>   Universidad Mayor de San Andrés    <br>   La Paz - Bolivia     <br> Autor de correspondencia: <a href="mailto:luciotorrico@gmail.com">luciotorrico@gmail.com</a>    <br> <b>Presentado: </b>La Paz, 9 de octubre de 2015 | <b>Aceptado: </b>La Paz, 27 de noviembre de 2015</font></p>     <p align="center">&nbsp;</p>     <p align="justify">&nbsp;</p> <hr align="JUSTIFY">     <p align="justify"><font face="Verdana" size="2"><b>Resumen</b></font></p>     <p align="justify"><font face="Verdana" size="2">En general las soluciones exactas para el <i>exact cover problem </i>se obtienen a través de algoritmos intratables pues el problema es NP. El famoso algoritmo de <i>Knuth (DLX) </i>es uno de ellos. Se presenta un algoritmo heurístico que implementa la idea de tomar los subconjuntos por pares, aplicando una métrica de factibilidad basada en el número de subconjuntos con los que (no) colisionan los subconjuntos de la pareja, y la distancia de <i>Hamming </i>entre ellos.</font></p>     <p align="justify"><font face="Verdana" size="2">Al tomar parejas reducimos el tiempo de cálculo, y la elección de los pares más factibles, según la métrica, halla más rápidamente -en promedio- una solución si esta existe. La métrica puede utilizarse también para abandonar la búsqueda, después de cierto límite de factibilidad, conjeturando la no existencia de solución. El mismo parece comportarse bastante bien para los experimentos realizados.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2"><b>Palabras clave: </b>algoritmo heurístico; cobertura exacta; DLX.</font></p> <hr align="JUSTIFY">     <p align="justify"><font face="Verdana" size="2"><b><i>Abstract</i></b></font></p>     <p align="justify"><font face="Verdana" size="2"><i>In general, exact solutions for the exact cover problem are obtained through intractable algorithms because the problem is NP. The famous Knuth's algorithm (DLX) is one ofthem. We present a heuristic algorithm that implements a the idea of taking subsets by pairs, applying a feasibility metric based on the number of subsets that (not)collide with the chosen pair, and the Hamming distance between them.</i></font></p>     <p align="justify"><font face="Verdana" size="2"><i>By taking pairs we reduce the computation time, and the choice of the most feasible pairs, according to the metric, finda solution fáster (on average) , ifit exists. The metric can also be used to abandon the search after a certain feasibility limit, guessing the non existence of solution. His algorithm seems toperform quite wellfor experiments.</i></font></p>     <p align="justify"><font face="Verdana" size="2"><i><b>Keywords:</b> heuristic algorithm; exact cover; DLX.</i></font></p> <hr align="JUSTIFY">     <p align="justify">&nbsp;</p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Introducción</b></font></p>     <p align="justify"><font face="Verdana" size="2">El problema de la cobertura exacta es conocido en la algorítmica por ser NP Garey M., Johnson D., 1979), (Skiena S., 2008).</font></p>     <p align="justify"><font face="Verdana" size="2">Hay formas de cálculo poco convencionales para solucionar este problema pero sólo las mencionamos debido a que van por otra dirección.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">La computación: molecular por ADN, con dispositivos de luz, adiabática, etc. (Oltean M., Muntean O., 2008), (Chang Wl., Guo M.,2003),(Choi V.,2011).</font></p>     <p align="justify"><font face="Verdana" size="2">Un algoritmo heurístico tiende a hallar (no siempre) una solución factible a través de una idea que asegura un comportamiento razonable en tiempo.</font></p>     <p align="justify"><font face="Verdana" size="2">Presentamos el problema, un par de algoritmos conocidos y una nueva propuesta junto a su desempeño.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Métodos</b></font></p>     <p align="justify"><font face="Verdana" size="2">Se ha considerado los siguientes aspectos a considerar:</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>El problema</b></font></p>     <p align="justify"><font face="Verdana" size="2">Dados los conjuntos de objetos <i><b>S<sub>1</sub>, S<sub>2</sub>,...,S<sub>n</sub></b>. </i>Por ejemplo:</font></p>     <p align="center"><font size="2" face="Verdana"><img src="/img/revistas/rit/v3n1/a03_figura01.gif" width="107" height="108"></font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">Podemos formar un universo <i>U, </i>uniendo todos esos conjuntos.</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura02.gif" width="174" height="23"></p>     <p align="justify"><font face="Verdana" size="2">En el ejemplo: <i><b>U={O<sub>1</sub>, O<sub>2</sub>, O<sub>3</sub>, O<sub>4</sub>}</b></i></font> <font face="Verdana" size="2">O bien podemos partir de un universo <i><b>U</b> </i>y</font> <font face="Verdana" size="2">de   un   conjunto   <i><b>{S<sub>1</sub>, S<sub>2</sub>,...,S<sub>n</sub>}</b> </i>de</font> <font face="Verdana" size="2">subconjuntos de  U (cuya unión  es  el</font> <font face="Verdana" size="2">universo).</font></p>     <p align="justify"><font face="Verdana" size="2">Es claro que podemos trabajar sólo con los</font> <font face="Verdana" size="2">subíndices. En el ejemplo: <i><b>U={1, 2, 3, 4}</b></i></font></p>     <p align="center"><font face="Verdana" size="2"><b>S<sub>1</sub>={1}</b></font><b>    <br>     <font face="Verdana" size="2">S<sub>2</sub>={2,3}</font>    <br>     <font face="Verdana" size="2">S<sub>3</sub>={3,4}</font>    <br>     <font face="Verdana" size="2">S<sub>4</sub>={2,4}</font>    <br> <font face="Verdana" size="2">S<sub>5</sub>={4}</font></b><font face="Verdana" size="2"></font></p>     <p align="justify"><font face="Verdana" size="2">Un recubrimiento exacto S', es una subcolección <i><b>S' = {S<sub>i1</sub>,...,S<sub>im</sub> }</b> </i>tal que cada elemento de <i><b>U</b> </i>está contenido en exactamente un elemento de S' (Kreher D., StinsonD., 1999).</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">En el ejemplo <i><b>S<sub>1</sub>, S<sub>2</sub></b> </i>no es solución pues <img src="/img/revistas/rit/v3n1/a03_figura03.gif" width="90" height="17"></font></p>     <p align="justify"><font face="Verdana" size="2">En el ejemplo <i><b>S<sub>1</sub>, S<sub>2</sub></b>, <b>S<sub>3</sub>, S<sub>4</sub></b> </i>no es solución pues aunque su unión es <i><b>U</b>, <b>S<sub>2</sub>, S<sub>3</sub></b> </i>no son disjuntos. En cambio<i><b>S<sub>1</sub>, S<sub>2</sub></b></i><i><b>, S<sub>5 </sub></b></i>sí soluciona el problema.</font></p>     <p align="justify"><font face="Verdana" size="2">Un enunciado formal es: Dado el universo <i><b>U</b> </i>y un conjunto<i><b> {S<sub>1</sub>, S<sub>2</sub>,...,S<sub>n</sub>}</b> </i>de subconjuntos de <i><b>U</b> </i>(cuya unión es el universo), hallar un grupo de subconjuntos <i><b>S<sub>i1</sub>, S<sub>i2</sub>,...,S<sub>ik</sub></b> tal </i>que:</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura04.gif" width="246" height="80"></p>     <p align="justify"><font face="Verdana" size="2">Skiena utiliza el nombre de <i>Set Packing </i>para un problema análogo [2].</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Algoritmos conocidos</b></font></p>     <p align="justify"><font face="Verdana" size="2">Un algoritmo exacto por fuerza bruta puede diseñarse, seleccionando los subconjuntos tomados de <i><b>a 1 </b></i>, de <b>a 2</b>, de <i><b>a 3</b>, </i>..., de <i><b>a n</b><b> </b>.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Verificando disyunción. Esta idea es claramente intratable.</font></p>     <p align="justify"><font face="Verdana" size="2">Una versión ingeniosa y algo más rápida (aunque aún intratable) es el llamado algoritmo <i>DLXde </i>Knuth (Knuth D., 2000).</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">Un algoritmo heurístico es el <i>greedy:</i></font></p>     <p align="justify"><font face="Verdana" size="2"><b>Repetir</b></font></p>     <p align="justify"><font face="Verdana" size="2">Seleccionar el subconjunto más pequeño Eliminar todos los subconjuntos que colisionan con él (los no disjuntos) <b>Hasta </b>que no hayan subconjuntos</font></p>     <p align="justify"><font face="Verdana" size="2">Este algoritmo ofrece una aproximación a la solución: la unión de sus subconjuntos, se aproxima -por debajo- a <i><b>U</b>, </i>aunque no es <i><b>U</b> </i>en todos los casos.</font></p>     <p align="justify"><font face="Verdana" size="2">Siempre que sean aplicables, podemos emplear las llamadas reglas de reducción [9]: Eliminación de subconjuntos vacíos o idénticos, detección de insolubles columnas de ceros, de columnas con un único <i>1 </i>-y de ahí subconjuntos imprescindibles-, por tanto eliminación de subconjuntos no disjuntos; subsunción de columnas -y de ahí filas estériles-.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>El algoritmo propuesto</b></font></p>     <p align="justify"><font face="Verdana" size="2">En principio adoptaremos la representación del problema a través una matriz binaria M, donde los subconjuntos candidatos son las filas y cada columna es un elemento del universo.</font></p>     <p align="justify"><font face="Verdana" size="2">También supondremos que se hace un preprocesamiento aplicando las reducciones mencionadas antes (estas reducciones podrían aplicarse incluso cuando se obtiene un problema más pequeño fruto de eliminar los subconjuntos de a pares).</font></p>     <p align="justify"><font face="Verdana" size="2">La idea es pensar una matriz de distancias <i>denxn </i>donde:</font></p>     ]]></body>
<body><![CDATA[<p align="center"><font face="Verdana" size="2"><i><b>D(i,j)=0   si S<sub>i</sub> </b></i><b>&cap; <i>S<sub>j</sub> = {}</i></b><i> </i>(no disyunción o</font> <font face="Verdana" size="2">colisión)    <br> </font><font face="Verdana" size="2"><i><b>D(i,j)=0</b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</i>(no disyunción consigo</font> <font face="Verdana" size="2">mismo)</font>    <br> <font face="Verdana" size="2"><i><b>D(i,j) = d(S<sub>i</sub>, S<sub>j</sub>) e.o.c</b> (d </i>es la distancia de</font> <font face="Verdana" size="2">Hamming)</font></p>     <p align="justify"><font face="Verdana" size="2">Para cada columna (o fila), es decir, para cada subconjunto <i><b>S<sub>j</sub></b>.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Contabilizamos el número de subconjuntos con los que no colisiona: <i><b>nc<sub>j</sub></b>.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Contabilizamos el número de subconjuntos con los que si colisiona: <i><b>sc<sub>j</sub></b>.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Hallamos la diferencia: <i><b>c<sub>j</sub></b> = <b>nc<sub>j</sub></b> - <b>sc<sub>j</sub></b>.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Para cada par de subconjuntos <i><b>S<sub>j</sub></b>, <b>S<sub>k</sub></b> </i>disjuntos: Obtenemos un índice de factibilidad o bondad del par así:</font></p>     <p align="center"><font face="Verdana" size="2"><i><b>F<sub>i,k</sub> = c<sub>j</sub> + c<sub>k</sub> + D(i,k)</b><b></b></i></font></p>     <p align="justify"><font face="Verdana" size="2">Adoptaremos aquí el heurístico de <i>Knuth: </i>Tomar en cuenta la columna con el menor número de <i>1 </i>'s (si hay varias cualquiera).</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">De todos los pares, seleccionamos los que tengan un subconjunto con un <i>1 </i>en la columna elegida.</font></p>     <p align="justify"><font face="Verdana" size="2">En una lista, ordenamos estos índices de mayor a menor y los consideramos como alternativa de solución en dicho orden decreciente.</font></p>     <p align="justify"><font face="Verdana" size="2">Para cada par, eliminamos los subconjuntos, las colisiones, las columnas involucradas, etc. En caso de no solución, hacemos <i>backtracking, </i>hasta un límite de factibilidad prefijado (puede ser muy bajo para tomar en cuenta todos los pares de la lista).</font></p>     <p align="justify"><font face="Verdana" size="2">Para cada par elegido de la lista, luego de eliminarlos junto a sus colisiones y columnas involucradas, estamos frente a un nuevo problema más pequeño: aquí podemos usar recurrentemente la idea de índices de factibilidad.</font></p>     <p align="justify"><font face="Verdana" size="2">Ejemplo:</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura05.gif" width="199" height="187"></p>     <p align="justify"><font face="Verdana" size="2">Reducción: La columna 1 es subconjunto de la 6: eliminamos la sexta columna.</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura06.gif" width="185" height="193"></p>     <p align="justify"><font face="Verdana" size="2">Construimos la matriz <i><b>D</b>:</i></font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura07.gif" width="289" height="191"></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">Contabilizamos:</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura08.gif" width="281" height="100"></p>     <p align="justify"><font face="Verdana" size="2">índice de factibilidad por pares disjuntos:</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura09.gif" width="98" height="186"></p>     <p align="justify"><font face="Verdana" size="2">La columna con el menor número de <i><b>1's</b></i>   es la primera. Seleccionamos los pares que tengan un subconjunto con un <i><b>1</b> </i>en la columna elegida.</font></p>     <p align="center"><img src="/img/revistas/rit/v3n1/a03_figura10.gif" width="95" height="118"></p>     <p align="justify"><font face="Verdana" size="2">Esta es la lista de pares de subconjuntos ordenada por índice de factibilidad.</font></p>     <p align="justify"><font face="Verdana" size="2">Procedemos     a     utilizar     cada par</font> <font face="Verdana" size="2">(eliminación, <i>backtracking   </i>si   no hay</font> <font face="Verdana" size="2">solución, etc.) hasta un índice de factibilidad prefijado entre <i><b>1 </b></i><b>y <i>-2.</i></b></font></p>     <p align="justify"><font face="Verdana" size="2"><i><b>S<sub>1</sub>, S<sub>2</sub></b>. </i>Es claro que obtendremos una solución con este par.</font></p>     <p align="justify">&nbsp;</p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="3"><b>Data set</b></font></p>     <p align="justify"><font face="Verdana" size="2">Se han construido subconjuntos de prueba colocando <b>1's</b> y <b>'0's</b> aleatoriamente; con diversos valores para <i>n.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Utilizamos además algunos <i>data-set </i>de la librería <i>OR-LIBRARY </i>(Beasley 1, 2012) pero adaptados a la representación aquí tratada.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Desempeño</b></font></p>     <p align="justify"><font face="Verdana" size="2">Las pruebas se hicieron en <i>scripts </i>de <i>Matlab (m-file).</i></font></p>     <p align="justify"><font face="Verdana" size="2">La prueba de disyunción de subconjuntos representados como filas binarias puede hacerse así:</font></p>     <p align="center"><font face="Verdana" size="2"><b><i>not(ismember(1, and(U, M(j,:))))</i></b><i></i></font></p>     <p align="justify"><font face="Verdana" size="2">El cálculo de la distancia de <i>Hamming </i>es trivial.</font></p>     <p align="justify"><font face="Verdana" size="2">Nótese que la métrica puede servir para abandonar la búsqueda, después de cierto límite de factibilidad, conjeturando la no existencia de solución.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="Verdana" size="2">Con eso en mente, el tiempo que demora el algoritmo es mejor en factores constantes al <i>DLX; </i>nos aproxima heurísticamente a selecciones más óptimas de (pares de) subconjuntos y ofrece una posibilidad argumentada de <i>abort.</i></font></p>     <p align="justify"><font face="Verdana" size="2">Las respuestas son exactas para los ejemplos cortos y parecen corresponder con la realidad en ejemplos más grandes (no se han encontrado <i>seis </i>de datos para testeo generalmente aceptados).</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Conclusiones</b></font></p>     <p align="justify"><font face="Verdana" size="2">Basados en el planteamiento del problema de cobertura exacta <i>unicost </i>(subconjuntos sin costo/valor) y considerando las reglas de reducción y el algoritmo <i>DLX, </i>se ha ofrecido un algoritmo <i>backtracking </i>que permite, a través de un heurístico en forma</font></p>     <p align="justify"><font face="Verdana" size="2">de métrica de factibilidad por pares, hacer una selección más argumentada y más prometedora de los subconjuntos a incluir en la solución.</font></p>     <p align="justify"><font face="Verdana" size="2">Además ofrece un mecanismo para detener la búsqueda cuando la factibilidad de los subconjuntos ya es baja, conjeturando una no solución.</font></p>     <p align="justify"><font face="Verdana" size="2">El algoritmo parece comportarse bien para los experimentos realizados.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="Verdana" size="3"><b>Referencias</b></font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="Verdana" size="2">Garey M., Johnson D. (1979). &quot;Computers and intractability: A Guide to the Theory of NP-Completeness&quot;. W.H Freeman and company.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300001&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Skiena S. (2008). &quot;The Algorithm Design Manual&quot;. Segunda Edición. Springer.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300002&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Knuth D. (2000). &quot;Dancing links&quot;. Millenial Perspectives in Computer Science.       Disponible       en <a href="http://arxiv.org/pdf/cs/0011047vl" target="_blank">http://arxiv.org/pdf/cs/0011047vl</a></font><font face="Verdana" size="2" color="#0000E4"><i>. </i></font><font size="2" face="Verdana">Visitado el 30/3/2014</font>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300003&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Beasley J. (2012). &quot;Or-library&quot;. Disponible en:</font> <a href="http://people.brunel.ac.uk/~mastjib/ieb/info.html" target="_blank"><font face="Verdana" size="2"><font size="2" face="Verdana">http://people.brunel.ac.uk/~mastjib/ieb/info.html</font></A></a><font face="Verdana" size="2">. Visitado el 30/3/2014</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300004&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --><!-- ref --><p align="justify"><font face="Verdana" size="2">Oltean M., Muntean O. (2008). &quot;Exact Cover with light&quot;    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300005&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Chang Wl., Guo M. (2003). &quot;Solving the set cover problem and the problem of exact cover by 3-sets in the Adleman-Lipton model&quot;    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300006&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Choi V. (2011). &quot;Different adiabatic quantum optimization algorithms for the NP-complete exact cover and 3SAT problems&quot;    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300007&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Kreher     D.,      Stinson     D.      (1999). &quot;Combinatorial Algorithms : Generation, Enumeration and Search&quot;. CRC Press.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300008&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <!-- ref --><p align="justify"><font face="Verdana" size="2">Syslo M., Deo N., Kowalik J. (1983). &quot;Discrete Optimization Algorithms with Pascal Programs&quot;. Prentice Hall.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scieloOrg/php/reflinks.php?refpid=S2306-0522201400010000300009&pid=S2306-05222014000100003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');"></a>&#160;]<!-- end-ref --></font></p>     <p align="justify">&nbsp;</p>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Garey]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Johnson]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Computers and intractability: A Guide to the Theory of NP-Completeness]]></source>
<year>1979</year>
<publisher-name><![CDATA[W.H Freeman and company]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Skiena]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[The Algorithm Design Manual]]></source>
<year>2008</year>
<edition>Segunda</edition>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Knuth]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Dancing links". Millenial Perspectives in Computer Science]]></source>
<year>2000</year>
</nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Beasley]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Or-library]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Oltean]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Muntean]]></surname>
<given-names><![CDATA[O]]></given-names>
</name>
</person-group>
<source><![CDATA[Exact Cover with light]]></source>
<year>2008</year>
</nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Chang]]></surname>
<given-names><![CDATA[Wl]]></given-names>
</name>
<name>
<surname><![CDATA[Guo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[Solving the set cover problem and the problem of exact cover by 3-sets in the Adleman-Lipton model]]></source>
<year>2003</year>
</nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Choi]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
</person-group>
<source><![CDATA[Different adiabatic quantum optimization algorithms for the NP-complete exact cover and 3SAT problems]]></source>
<year>2011</year>
</nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kreher]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[Stinson]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[Combinatorial Algorithms: Generation, Enumeration and Search]]></source>
<year>1999</year>
<publisher-name><![CDATA[CRC Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Syslo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Deo]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Kowalik]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<source><![CDATA[Discrete Optimization Algorithms with Pascal Programs]]></source>
<year>1983</year>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
