Los algoritmos de búsqueda inversa son una clase de algoritmos para generar todos los objetos de un tamaño dado, a partir de ciertas clases de objetos combinatorios . En muchos casos, estos métodos permiten generar los objetos en tiempo polinomial por objeto, utilizando solo la memoria suficiente para almacenar un número constante de objetos ( espacio polinomial ). (Generalmente, sin embargo, no se clasifican como algoritmos de tiempo polinomial, ya que el número de objetos que generan es exponencial). Funcionan organizando los objetos a generar en un árbol de expansión de su espacio de estados y, a continuación, realizando una búsqueda en profundidad en dicho árbol.
Los algoritmos de búsqueda inversa fueron introducidos por David Avis y Komei Fukuda en 1991 para problemas de generación de vértices de politopos convexos y celdas de arreglos de hiperplanos . [ 1 ] Avis y Fukuda los formalizaron de manera más amplia en 1996. [ 2 ]
Principios
Un algoritmo de búsqueda inversa genera los objetos combinatorios en un espacio de estados , un grafo implícito cuyos vértices son los objetos que se van a listar y cuyas aristas representan ciertos "movimientos locales" que conectan pares de objetos, normalmente mediante pequeños cambios en su estructura. Encuentra cada objeto utilizando una búsqueda en profundidad en un árbol de expansión con raíz de este espacio de estados, descrito por la siguiente información: [ 2 ]
- La raíz del árbol de expansión, uno de los objetos
- Una subrutina para generar el padre de cada objeto en el árbol, con la propiedad de que si se repite suficientes veces eventualmente llegará a la raíz.
- Una subrutina para listar todos los vecinos en el espacio de estados (no todos los cuales pueden ser vecinos en el árbol).
A partir de esta información, es posible encontrar los hijos de cualquier nodo dado en el árbol, invirtiendo los enlaces dados por la subrutina padre: son simplemente los vecinos cuyo padre es el nodo dado. Son estos enlaces invertidos a los nodos hijos los que busca el algoritmo. [ 2 ]
Una búsqueda clásica en profundidad de este árbol de expansión recorrería el árbol recursivamente, comenzando desde la raíz, en cada nodo listando todos los hijos y realizando una llamada recursiva para cada uno. A diferencia de una búsqueda en profundidad de un grafo con ciclos, no es necesario mantener el conjunto de nodos ya visitados para evitar visitas repetidas; tal repetición no es posible en un árbol. Sin embargo, este algoritmo recursivo aún puede requerir una gran cantidad de memoria para su pila de llamadas , en casos cuando el árbol es muy profundo. En cambio, la búsqueda inversa recorre el árbol de expansión en el mismo orden almacenando solo dos objetos: el objeto actual del recorrido y el objeto recorrido previamente. Inicialmente, el objeto actual se establece en la raíz del árbol y no hay ningún objeto anterior. A partir de esta información, es posible determinar el siguiente paso del recorrido mediante el siguiente análisis de casos: [ 2 ]
- Si no hay ningún objeto anterior, o si el objeto anterior es el padre del objeto actual, entonces esta es la primera vez que el recorrido llega al objeto actual, por lo que se muestra como resultado de la búsqueda. El siguiente objeto es su primer hijo o, si no tiene hijos, su padre.
- En todos los demás casos, el objeto anterior debe ser hijo del objeto actual. El algoritmo enumera los hijos (es decir, los vecinos en el espacio de estados del objeto actual que tienen al objeto actual como padre) uno a uno hasta llegar a este hijo anterior, y luego da un paso más en esta lista de hijos. Si se encuentra otro hijo de esta manera, este es el siguiente objeto. Si no hay un siguiente hijo y el objeto actual no es la raíz, el siguiente objeto es el padre del objeto actual. En el caso restante, cuando no hay un siguiente hijo y el objeto actual es la raíz, la búsqueda inversa finaliza.
Este algoritmo implica enumerar los vecinos de un objeto una vez por cada paso de la búsqueda. Sin embargo, si hayobjetos a listar, luego se realiza la búsquedapasos, por lo que el número de veces que genera vecinos de objetos está dentro de un factor de dos del número de veces que la búsqueda recursiva en profundidad haría lo mismo. [ 2 ]
Aplicaciones
Algunos ejemplos de problemas a los que se ha aplicado la búsqueda inversa incluyen los siguientes problemas de generación combinatoria:
- Vértices de politopos convexos simples
- Si unUn politopo convexo de dimensión se define como la intersección de semiplanos , entonces sus vértices pueden describirse como los puntos de intersección deo más hiperplanos que delimitan los semiplanos; es un politopo simple si ningún vértice es la intersección de más dede estos hiperplanos. El problema de enumeración de vértices es el problema de enumerar todos estos vértices. Las aristas del politopo conectan pares de vértices que tienen hyperplanes in common, so the vertices and edges form a state space in which each vertex has neighbors. The simplex algorithm from the theory of linear programming finds a vertex maximizing a given linear function of the coordinates, by walking from vertex to vertex, choosing at each step a vertex with a greater value of the function; there are several standard choices of "pivot rule" that specify more precisely which vertex to choose. Any such pivot rule can be interpreted as defining the parent function of a spanning tree of the polytope, whose root is the optimal vertex. Applying reverse search to this data generates all vertices of the polytope. A similar algorithm can also enumerate all bases of a linear program, without requiring that it defines a polytope that is simple.[2][3]
- Cells of hyperplane arrangements
- A hyperplane arrangement decomposes Euclidean space into cells, each described by a "sign vector" that describes whether its points belong to one of the hyperplanes (sign 0), are on one side of the hyperplane (sign +1), or are on the other side (sign −1). The cells form a connected state space under local moves that change a single sign by one unit, and it is possible to check that this operation produces a valid cell by solving a linear programming feasibility problem. A spanning tree can be constructed for any choice of root cell by defining a parent operator that makes the first possible change that would bring the sign vector closer to that of the root. Using reverse search for this state space and parent operator produces an algorithm for listing all cells in polynomial time per cell.[2][4]
- Point-set triangulations
- The triangulations of a planar point set are connected by "flip" moves that remove one diagonal from a triangulation and replace it by another. If the Delaunay triangulation is chosen as the root, then every triangulation can be flipped to the Delaunay triangulation by steps in which the triangulation of some subset of four points is replaced by its Delaunay triangulation.[5][6] Choosing the first Delaunay flip as the parent of each triangulation, and applying local search, produces an algorithm for listing all triangulations in polynomial time per triangulation.[2]
- Connected subgraphs
- Los subgrafos conexos y los subgrafos inducidos conexos de un grafo conexo dado forman un espacio de estados cuyos movimientos locales consisten en la adición o eliminación de una arista o un vértice del grafo, respectivamente. Un árbol generador de este espacio de estados se obtiene añadiendo la primera arista o vértice (en algún orden de las aristas o vértices) cuya adición produce otro subgrafo conexo; su raíz es el grafo completo. Al aplicar una búsqueda local a este espacio de estados y al operador padre, se obtiene un algoritmo para listar todos los subgrafos conexos en tiempo polinomial por subgrafo. [ 2 ]
Otras aplicaciones incluyen algoritmos para generar las siguientes estructuras:
- Poliominos , [ 7 ] prototiles de polidiamante , [ 8 ] y moléculas de hidrocarburos polihexagonales (matemáticas) . [ 9 ]
- Ordenaciones topológicas de grafos acíclicos dirigidos , utilizando un espacio de estados cuyos movimientos locales invierten el orden de dos elementos. [ 2 ]
- Árboles de expansión de grafos, árboles de expansión sin cruces de conjuntos de puntos planares y, más generalmente, bases de matroides , utilizando un espacio de estados que intercambia una arista por otra. [ 2 ]
- Recorridos de Euler en grafos. [ 10 ]
- Los conjuntos independientes máximos de grafos dispersos . [ 11 ]
- Grafos planares máximos [ 12 ] y grafos poliédricos . [ 13 ]
- Grafos mínimamente rígidos sin cruces en un conjunto de puntos dado. [ 14 ]
- Polígonos circundantes , polígonos que tienen algunos de un conjunto dado de puntos como vértices y rodean al resto, utilizando un espacio de estados que agrega o elimina un vértice del polígono. [ 15 ]
- Vértices o facetas de la suma de Minkowski de politopos convexos. [ 16 ] [ 17 ]
- Los vértices (multigrados) de ideales monomiales . [ 18 ]
Referencias
- ↑ Avis, David ; Fukuda, Komei (1992), "Un algoritmo de pivoteo para envolventes convexas y enumeración de vértices de arreglos y poliedros", Discrete & Computational Geometry , 8 (3): 295–313 , doi : 10.1007/BF02293050 , MR 1174359 ; preliminary version in Seventh Annual Symposium on Computational Geometry, 1991, doi:10.1145/109648.109659
- 1234567891011Avis, David; Fukuda, Komei (1996), "Reverse search for enumeration", Discrete Applied Mathematics, 65 (1–3): 21–46, doi:10.1016/0166-218X(95)00026-N, MR 1380066
- ↑Avis, David (2000), "A revised implementation of the reverse search vertex enumeration algorithm", in Kalai, Gil; Ziegler, Günter M. (eds.), Polytopes—combinatorics and computation: Including papers from the DMV-Seminar "Polytopes and Optimization" held in Oberwolfach, November 1997, DMV Seminar, vol. 29, Basel: Birkhäuser, pp. 177–198, MR 1785299
- ↑Sleumer, Nora H. (1999), "Output-sensitive cell enumeration in hyperplane arrangements", Nordic Journal of Computing, 6 (2): 137–147, MR 1709978
- ↑Lawson, C. L. (1972), Generation of a triangular grid with applications to contour plotting, Memo 299, Jet Propulsion Laboratory
- ↑Sibson, R. (1973), "Locally equiangular triangulations", The Computer Journal, 21 (3): 243–245, doi:10.1093/comjnl/21.3.243, MR 0507358
- ↑Liang, Xiaodong; Wang, Rui; Meng, Ji xiang (2017), "Code for polyomino and computer search of isospectral polyominoes", Journal of Combinatorial Optimization, 33 (1): 254–264, doi:10.1007/s10878-015-9953-z, MR 3595411, S2CID 254655722
- ↑ Horiyama, Takashi; Yamane, Shogo (2011), "Generación de polidiamantes para teselado p6 mediante búsqueda inversa", en Akiyama, Jin ; Jiang, Bo; Kano, Mikio; Tan, Xuehou (eds.), Geometría Computacional, Grafos y Aplicaciones - 9.ª Conferencia Internacional, CGGA 2010, Dalian, China, 3-6 de noviembre de 2010, Artículos Seleccionados Revisados , Lecture Notes in Computer Science, vol. 7033, Springer, pp. 96–107 , doi : 10.1007/978-3-642-24983-9_10 , ISBN 978-3-642-24982-2, MR 2927314
- ↑ Caporossi, Gilles; Hansen, Pierre (mayo de 1998), "Enumeración de hidrocarburos polihex a", Journal of Chemical Information and Computer Sciences , 38 (4): 610– 619, doi : 10.1021/ci970116n
- ↑ Kurita, Kazuhiro; Wasa, Kunihiro (2022), "Enumeración de tiempo amortizado constante de rutas eulerianas", Theoretical Computer Science , 923 : 1–12 , arXiv : 2101.10473 , doi : 10.1016/j.tcs.2022.04.048 , MR 4436557
- ↑ Eppstein, David (2009), "Todos los conjuntos independientes máximos y dominancia dinámica para grafos dispersos", ACM Transactions on Algorithms , 5 (4): A38:1–A38:14, arXiv : cs/0407036 , doi : 10.1145/1597036.1597042 , MR 2571901 , S2CID 2769046
- ↑ Avis, David (1996), "Generación de triangulaciones enraizadas sin repeticiones", Algorithmica , 16 (6): 618– 632, doi : 10.1007/s004539900067 , MR 1412663
- ↑ Deza, Antoine; Fukuda, Komei ; Rosta, Vera (1994), "Teorema de Wagner y enumeración combinatoria de 3-politopos", Actas de un simposio celebrado en el Instituto de Investigación de Ciencias Matemáticas, Universidad de Kioto, Kioto, 17-19 de mayo de 1993 , RIMS Kôkyûroku Bessatsu, vol. 872, pp. 30-34 , MR 1330480
- ^ Avis, David ; Katoh, Naoki; Ohsaki, Makoto; Streinu, Ileana ; Tanigawa, Shin-ichi (junio de 2007), "Enumeración de marcos mínimamente rígidos que no se cruzan" (PDF) , Gráficos y combinatoria , 23 (S1): 117– 134, doi : 10.1007/s00373-007-0709-0 , S2CID 10874512
- ^ Yamanaka, Katsuhisa; Avis, David ; Horiyama, Takashi; Okamoto, Yoshio; Uehara, Ryuhei; Yamauchi, Tanami (2021), "Enumeración algorítmica de polígonos circundantes" (PDF) , Matemáticas aplicadas discretas , 303 : 305– 313, doi : 10.1016/j.dam.2020.03.034 , MR 4310502
- ↑ Fukuda, Komei (2004), "De la construcción de zonotopos a la adición de Minkowski de politopos convexos", Journal of Symbolic Computation , 38 (4): 1261–1272 , doi : 10.1016/j.jsc.2003.08.007 , MR 2094220
- ↑ Weibel, Christophe (2010), "Implementación y paralelización de un algoritmo de búsqueda inversa para sumas de Minkowski", en Blelloch, Guy E .; Halperin, Dan (eds.), Actas del Duodécimo Taller sobre Ingeniería y Experimentos de Algoritmos, ALENEX 2010, Austin, Texas, EE. UU., 16 de enero de 2010 , Sociedad de Matemáticas Industriales y Aplicadas, pp. 34–42 , doi : 10.1137/1.9781611972900.4 , ISBN 978-0-89871-931-4
- ↑ Bayer, Dave ; Taylor, Amelia (2009), "Búsqueda inversa de ideales monomiales", Journal of Symbolic Computation , 44 (10): 1477–1486 , doi : 10.1016/j.jsc.2009.05.002 , MR 2543431
- Algoritmos de búsqueda
- Algoritmos combinatorios