Hace poco me pidieron que resolviera un problema en una entrevista de programación que implicaba cuadros de palabras y al reflexionar un poco más me di cuenta de que se podía reformular como una pregunta de álgebra lineal. Como mi solución tiene una complejidad de tiempo en el peor de los casos de O(n!)O(n!) si nn es la anchura de AA Por curiosidad personal, estoy tratando de encontrar una solución mejor, medida por la complejidad de tiempo en el peor de los casos.
Dado un nn por nn matriz cuadrada AA sobre los reales con n≥2n≥2 ¿hay un nn por nn matriz de permutación XX Satisfaciendo a XA=(XA)T?XA=(XA)T?
Desde (XA)T=ATXT(XA)T=ATXT y XX es una matriz de permutación, tenemos XT=X−1XT=X−1 Por lo tanto, esto equivale a preguntar si hay soluciones para XAX=ATXAX=AT que son matrices de permutación. Ingenuamente, esperaba que hubiera una solución única, pero las técnicas numéricas indican fuertemente una gran variedad de soluciones, incluso cuando existe una permutación satisfactoria.
Por desgracia, no parece que las soluciones formen un subespacio lineal. Por ejemplo, si XX es una solución, entonces (aX)A(aX)=a2AT(aX)A(aX)=a2AT para cualquier aa , por lo que la mayoría de los múltiplos de XX no son soluciones para la mayoría de las matrices AA . Existen problemas similares para las sumas de las soluciones. Teniendo esto en cuenta, no sé muy bien qué método se puede utilizar para enumerar las soluciones. Si no forman un subespacio lineal, no podemos simplemente enumerar una base.
Cualquier solución parcial, teorema, indicación en la dirección correcta o problemas relacionados sería de gran ayuda. No estoy familiarizado con lo que parece ser un no lineal ecuación matricial (si esa es la terminología correcta).
Actualización Esto parece ser un caso especial de algo llamado ecuación algebraica de Riccati como se indica en otra pregunta . Las técnicas que he encontrado hasta ahora hacen hincapié en uno de los dos enfoques:
- Algoritmos para encontrar cualquier solución a partir de una conjetura inicial dada.
- Algoritmos para encontrar la única solución estabilizadora, si es que existe.
Dada la base teórica de control de estos enfoques, suelen suponer que ATAT es simétrica. En mi caso, si ATAT fueran simétricos podría simplemente tomar XX que sea la identidad y se haga, y esa suposición simplifica demasiado el problema. Además, esas soluciones no parecen tener una forma limpia de enumerar todas las soluciones, lo que impide comprobar si alguna resulta ser una matriz de permutación. ¿Alguien tiene más consejos desde el punto de vista de la ecuación de Riccati?
Me gustaría añadir que, estrictamente hablando, se puede responder a la pregunta en tiempo finito simplemente enumerando todas las matrices de permutación del tamaño adecuado y comprobando si satisfacen XA=(XA)TXA=(XA)T . Por alguna razón que me cuesta describir, creo que esto no capta el espíritu de la pregunta.
Actualización @GCab señala que AA necesitaría una estructura muy peculiar para XX para ser una matriz de permutación. Así es, y AA tendría que ser simétrica en alguna permutación de filas o columnas. Esto nos da algunas ideas. Si XX es cualquier matriz de permutación, entonces (XAX)ij=Aji=(AT)ij(XAX)ij=Aji=(AT)ij para cualquier ii , jj para que Xij=1Xij=1 y esto no se cumple cuando Xij=0Xij=0 . En otras palabras, los elementos de AA vienen en pares, excepto posiblemente la diagonal principal de XAXA . De este modo, se pueden descartar muchas permutaciones posibles, ya que cualquier elemento que aparezca una sola vez en ATAT debe dar la ubicación de un 11 en XX .
Hay muchos otros trucos combinatorios de este tipo que pueden mejorar mucho el tiempo medio de ejecución. Del mismo modo, se puede observar que para una permutación XX para que exista como solución, debe existir una biyección ff entre las filas y columnas de AA para que si rr es una fila de AA entonces el recuento de cada elemento de rr es el mismo que su cuenta en f(r)f(r) . Esta heurística tiene el potencial de clasificar fácilmente una elección de AA como no tener una solución satisfactoria, pero todavía podría tomar una enorme cantidad de tiempo para confirmar que un determinado AA tiene una satisfactoria XX .
1 votos
Sólo una idea, pero (AX)2=AAT(AX)2=AAT . Si puedes calcular las raíces cuadradas de AATAAT se puede reducir la ecuación a AX=√AATAX=√AAT . Una forma de obtener la raíz cuadrada de AATAAT es ponerlo en la forma normal de Jordan como (MD1/2M−1)2=MDM−1(MD1/2M−1)2=MDM−1 .
1 votos
@abnry Me gusta esto. Da todas las soluciones posibles (como máximo 2n2n para los casos no degenerados) de forma limpia y comprensible y además admite una complejidad temporal subfactorial en el peor de los casos. Si quieres escribir esto como respuesta, lo aceptaré.