Un sorprendente número de problemas tiene reducciones bastante naturales a la programación lineal (LP). Consulte el Capítulo 7 de [1] para ver ejemplos como flujos de red, emparejamiento bipartito, juegos de suma cero, rutas más cortas, una forma de regresión lineal e incluso evaluación de circuitos.
Dado que la evaluación del circuito se reduce a la programación lineal, cualquier problema en debe tener una formulación de programación lineal. Por lo tanto, tenemos un "nuevo" algoritmo de clasificación, mediante reducción a un programa lineal. Entonces, mis preguntas son
- ¿Cuál es el programa lineal que clasificará una matriz de números reales?
- ¿Cuál es el tiempo de ejecución del algoritmo de clasificación de reducir a LP y resolver?
- Algoritmos de S. Dasgupta, C. Papadimitriou y U. Vazirani (2006)
Respuestas:
La siguiente respuesta es básicamente equivalente a la que ya conoce, pero puede parecer un poco menos "mágica". Por otro lado, es más técnico, pero creo que la técnica general "escribir su problema como una optimización en matrices de permutación e invocar a Birkhoff-von Neumann" es excelente.
Para una permutación de { 1 , ... , n } defina la matriz de permutación P σ como la matriz 0-1 de modo que P i j = 1 si j = σ ( i ) y P i j = 0 de lo contrario. Esta es simplemente la matriz que permuta las coordenadas de un vector x de acuerdo con σ : si y = P σ x entonces y i = x σσ {1,…,n} Pσ Pij=1 j=σ(i) Pij=0 x σ y=Pσx yi=xσ(i) . Denotaré como σ ( x ) de ahora en adelante.y=Pσx σ(x)
Una definición más: una matriz no negativa M es doblemente estocástica si cada una de sus filas y cada una de sus columnas suma 1.n×n M
Y un hecho que es muy importante en la optimización combinatoria: el teorema de Birkhoff-von Neumann:
Observe que una matriz doblemente estocástica está definida por las desigualdades
∀ j : n ∑ i = 1 M i j = 1 ∀ i , j : M i j ≥ 0
Todas estas desigualdades tomadas juntas determinan un politopo , y el teorema de Birkhoff-von Neumann establece que los puntos extremos (vértices) de este politopo son todas matrices de permutación. Por programación lineal básica, sabemos que esto implica que cualquier programa lineal que tenga las desigualdades anteriores como sus restricciones (y ninguna otra restricción) tendrá una matriz de permutación como una solución óptima.P
Entonces, dada una entrada para ser ordenada, solo tenemos que llegar a un objetivo lineal f a ( M ) para el cual:a=(a1,…,an) fa(M)
Y listo, tienes un programa lineal para ordenar. Parece una tontería clasificar, pero este es de hecho un método poderoso en la optimización.
fuente