Se le da una matriz de longitud . Cada elemento de la matriz pertenece a una de las clasesSe supone que debe reorganizar la matriz utilizando un número mínimo de operaciones de intercambio para que todos los elementos de la misma clase estén siempre agrupados, es decir, que formen una submatriz contigua.
Por ejemplo:
Quedan otros tres arreglos válidos.K
¿Cómo se llama este problema en la literatura? ¿Hay un algoritmo eficiente para ello?
terminology
reference-request
sorting
arrays
Marko Bukal
fuente
fuente
Respuestas:
Nota: es una prueba de dureza, y creo que hay algoritmos prácticos como la programación de enteros, etc.
Dada una instancia de BIN_PACKING donde desea empaquetar los números en bins de tamaño , y se garantiza que , entonces podríamos diseñar una instancia de su problema de la siguiente manera:n 1 , ... , n K L m 1 , ... , m L ∑ n i = ∑ m j = NK n1,…,nK L m1,…,mL ∑ni=∑mj=N
Ahora, una observación clave es que no tiene sentido mantener al menos una clase en una ranura sin mover y mover otras (porque no cambiará el tamaño de un 'bin'). Por lo que el embalaje bin original está disponible si y sólo si el número mínimo de permutas no es mayor que . Dado que se sabe que BIN-PACKING es NP-completo , su problema es NP-hard.(N+1)2 N
fuente
También sospecho que esto es NP-hard, pero en ausencia de una idea para una prueba, aquí hay un par de límites inferiores rápidamente computables que podrían ser útiles para verificar la optimización de una solución heurística, o podar una búsqueda de bifurcación .
Deje que la clase contenga elementos. En cualquier solución válida, la clase debe comenzar en alguna posición . Por lo tanto, podemos calcular un límite inferior sobre el costo de "arreglar" la clase probando todas las posibles posiciones iniciales , contando el número de elementos que no son en el bloque longitud- que comienza en la posición (cada una de estas posiciones requerirá un intercambio), y tomando el mínimo. Este se puede calcular para cualquier en usando un enfoque de ventana deslizante, paran i i j L i i j i n i j L i i O ( n ) O ( K n )i ni i j Li i j i ni j Li i O(n) O(Kn) tiempo en general. Dos límites inferiores generales son entonces:
En su ejemplo, estos límites dan 1 (0.5 puede redondearse en el último caso), que por supuesto es flojo.
fuente