Dos matrices son equivalentes si una puede transformarse en la otra mediante una secuencia de intercambios de filas y columnas.
Me gustaría disponer de un algoritmo computacionalmente eficiente que pueda transformar una matriz en una matriz canónica de intercambio equivalente (de modo que todos los miembros de una clase de equivalencia den el mismo resultado).
Primero he ordenado las filas y luego las columnas, utilizando la siguiente función de comparación:
Una lista (fila o columna) $a$ se considera mayor que una lista $b$ si cuando se ordena, $a$ viene antes que $b$ lexicográficamente, con los empates rotos por el orden lexicográfico de (sin clasificar) $a$ y $b$ .
Por ejemplo:
$\begin{matrix} 1 & 0 & 3 \\ 0 & 4 & 2 \\ 2 & 0 & 4 \end{matrix}$
se convierte en
$\begin{matrix} 2 & 0 & 4 \\ 0 & 4 & 2 \\ 1 & 0 & 3 \end{matrix}$
después de ordenar las filas y, a continuación
$\begin{matrix} 4 & 0 & 2 \\ 2 & 4 & 0 \\ 3 & 0 & 1 \end{matrix}$
después de ordenar las columnas.
Esto es bastante eficiente, pero no he sido capaz de averiguar si es correcto.
EDIT: Resulta que esto no funciona.
$\begin{matrix} 2 & 1 & 0 \\ 1 & 0 & 2 \end{matrix}$
se transforma en
$\begin{matrix} 2 & 0 & 1 \\ 1 & 2 & 0 \end{matrix}$
pero
$\begin{matrix} 2 & 1 & 0 \\ 0 & 2 & 1 \end{matrix}$
se transforma en
$\begin{matrix} 1 & 2 & 0 \\ 2 & 0 & 1 \end{matrix}$
aunque sean equivalentes.
Sin embargo, volver a ordenar las filas lo soluciona. ¿Es suficiente? ¿Tal vez iterar hasta alcanzar un estado estable?