Articulo de referencia

Algoritmo de búsqueda inversa

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 ...

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 haynorte{\displaystyle N}objetos a listar, luego se realiza la búsqueda2norte1{\displaystyle 2N-1}pasos, 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 und{\displaystyle d}Un 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 ded{\displaystyle d}o más hiperplanos que delimitan los semiplanos; es un politopo simple si ningún vértice es la intersección de más ded{\displaystyle d}de 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 tienend1{\displaystyle d-1} hyperplanes in common, so the vertices and edges form a state space in which each vertex has d{\displaystyle d} 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:

Referencias

  1. 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
  2. 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
  3. 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
  4. Sleumer, Nora H. (1999), "Output-sensitive cell enumeration in hyperplane arrangements", Nordic Journal of Computing, 6 (2): 137–147, MR 1709978
  5. Lawson, C. L. (1972), Generation of a triangular grid with applications to contour plotting, Memo 299, Jet Propulsion Laboratory
  6. Sibson, R. (1973), "Locally equiangular triangulations", The Computer Journal, 21 (3): 243–245, doi:10.1093/comjnl/21.3.243, MR 0507358
  7. 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
  8. 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 
  9. Caporossi, Gilles; Hansen, Pierre (mayo de 1998), "Enumeración de hidrocarburos polihex ah=21{\displaystyle h=21}", Journal of Chemical Information and Computer Sciences , 38 (4): 610– 619, doi : 10.1021/ci970116n
  10. 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 
  11. 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  
  12. Avis, David (1996), "Generación de triangulaciones enraizadas sin repeticiones", Algorithmica , 16 (6): 618– 632, doi : 10.1007/s004539900067 , MR 1412663 
  13. 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   
  14. ^ 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 
  15. ^ 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 
  16. 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 
  17. 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
  18. 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 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Reverse-search_algorithm&oldid=1329657475 "