Articulo de referencia

Rotación de cadena lexicográficamente mínima

En informática , la rotación de cadena lexicográficamente mínima ( LMSR ) o subcadena circular lexicográficamente mínima es el problema de encontrar la rotación de una cadena qu...

En informática , la rotación de cadena lexicográficamente mínima ( LMSR ) o subcadena circular lexicográficamente mínima es el problema de encontrar la rotación de una cadena que posee el orden lexicográfico más bajo de todas dichas rotaciones. Por ejemplo, la rotación lexicográficamente mínima de "bbaaccaadd" sería "aaccaaddbb". La LMSR se utiliza ampliamente en la comprobación de igualdad de grafos , polígonos, autómatas y estructuras químicas. [ 1 ]

Es posible que una cadena tenga múltiples LMSR, pero para la mayoría de las aplicaciones esto no importa ya que las rotaciones deben ser equivalentes. Encontrar la rotación lexicográficamente mínima es útil como una forma de normalizar cadenas. Si las cadenas representan estructuras potencialmente isomorfas como grafos , la normalización de esta manera permite una simple comprobación de igualdad. [ 2 ] Un truco de implementación común al tratar con cadenas circulares es concatenar la cadena consigo misma en lugar de tener que realizar aritmética modular en los índices de la cadena.

Algoritmos

El algoritmo ingenuo

El algoritmo ingenuo para encontrar la rotación lexicográficamente mínima de una cadena consiste en iterar a través de rotaciones sucesivas , registrando la rotación lexicográficamente mínima encontrada. Si la cadena tiene una longitud n , este algoritmo se ejecuta en tiempo O ( ) en el peor de los casos.

El algoritmo de Booth

Booth (1980) propuso un algoritmo eficiente. [ 3 ] El algoritmo utiliza una función de preprocesamiento modificada del algoritmo de búsqueda de cadenas de Knuth-Morris-Pratt . La función de fallo para la cadena se calcula de forma habitual, pero la cadena se rota durante el cálculo, por lo que algunos índices deben calcularse más de una vez al repetirse. Una vez que todos los índices de la función de fallo se han calculado correctamente sin que la cadena vuelva a rotar, se sabe que se ha encontrado la rotación lexicográfica mínima y se devuelve su índice inicial. La corrección del algoritmo es algo difícil de comprender, pero es fácil de implementar.

def least_rotation ( s : str ) -> int : """Algoritmo de rotación de cadenas lexicográficamente mínimo de Booth.""" n = len ( s ) f = [ - 1 ] * ( 2 * n ) k = 0 for j in range ( 1 , 2 * n ): i = f [ j - k - 1 ] while i != - 1 and s [ j % n ] != s [( k + i + 1 ) % n ]: if s [ j % n ] < s [( k + i + 1 ) % n ]: k = j - i - 1 i = f [ i ] if i == - 1 and s [ j % n ] != s [( k + i + 1 ) % n ]: if s [ j % n ] < s [( k + i + 1 ) % n ] ]: k = j f [ j - k ] = - 1 else : f [ j - k ] = i + 1 return k

Resulta interesante observar que al eliminar todas las líneas de código que modifican el valor de k se obtiene la función de preprocesamiento original de Knuth-Morris-Pratt, ya que k (que representa la rotación) permanecerá en cero. El algoritmo de Booth se ejecuta en O(norte){\displaystyle O(n)}tiempo , donde n es la longitud de la cadena. El algoritmo realiza como máximo3norte{\displaystyle 3n}comparaciones en el peor de los casos, y requiere memoria auxiliar de longitud n para almacenar la tabla de funciones de fallo.

Algoritmo de canonización rápida de Shiloach

Shiloach (1981) [ 4 ] propuso un algoritmo que mejoraba el resultado de Booth en términos de rendimiento. Se observó que si hay q rotaciones lexicográficamente mínimas equivalentes de una cadena de longitud n , entonces la cadena debe constar de q subcadenas iguales de longitud n.d=norte/q{\displaystyle d=n/q} . El algoritmo solo requierenorte+d/2{\displaystyle n+d/2}comparaciones y espacio constante en el peor de los casos.

El algoritmo se divide en dos fases. La primera fase consiste en un filtrado rápido que descarta los índices que obviamente no son puntos de partida para la rotación lexicográficamente mínima. La segunda fase, a partir de los índices restantes, encuentra el índice de inicio de la rotación lexicográficamente mínima.

Algoritmo de factorización de Lyndon de Duval

Duval (1983) [ 5 ] propuso un algoritmo eficiente que implica la factorización de la cadena en sus palabras Lyndon componentes , que se ejecuta en tiempo lineal con un requisito de memoria constante.

Variantes

Shiloach (1979) [ 6 ] propuso un algoritmo para comparar eficientemente dos cadenas circulares y determinar su igualdad sin necesidad de normalización. Una aplicación adicional derivada de este algoritmo es la generación rápida de ciertas estructuras químicas sin repeticiones.

Wang y Ying (2024) propusieron una variante para la computación cuántica . [ 1 ] Demuestran que el algoritmo cuántico supera a cualquier algoritmo aleatorio (clásico) tanto en el peor como en el caso promedio.

Véase también

Referencias

  1. 1 2 Wang, Q., Ying, M. (2024). "Algoritmo cuántico para la rotación de cadenas lexicográficamente mínima". Theory Comput Syst . 68 : 29–74 . arXiv : 2012.09376 . doi : 10.1007/s00224-023-10146-8 .{{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace )
  2. Kellogg S. Booth; Colbourn, Charles J. (1980). "Algoritmos de automorfismo de tiempo lineal para árboles, grafos de intervalos y grafos planares" . SIAM Journal on Computing . 10 (1). Society for Industrial and Applied Mathematics: 203–225 . doi : 10.1137/0210015 . ISSN 0097-5397 . 
  3. Kellogg S. Booth (1980). "Subcadenas circulares lexicográficamente mínimas". Information Processing Letters . 10 ( 4–5 ). Elsevier: 240–242 . doi : 10.1016/0020-0190(80)90149-0 . ISSN 0020-0190 . 
  4. Yossi Shiloach (1981). "Canonización rápida de cadenas circulares". Journal of Algorithms . 2 (2). Elsevier: 107– 121. doi : 10.1016/0196-6774(81)90013-4 . ISSN 0196-6774 . 
  5. Jean Pierre Duval (1983). "Factorización de palabras sobre un alfabeto ordenado". Journal of Algorithms . 8 (8). Elsevier: 363– 381. doi : 10.1016/0196-6774(83)90017-2 . ISSN 0196-6774 . 
  6. Yossi Shiloach (1979). "Un algoritmo rápido de comprobación de equivalencia para listas circulares". Information Processing Letters . 8 (5). Elsevier: 236– 238. doi : 10.1016/0020-0190(79)90114-5 . ISSN 0020-0190 . 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Lexicographically_minimal_string_rotation&oldid=1341843564 "