Estoy buscando algunos punteros aquí, ya que no sé por dónde empezar a investigar este.¿Ordenar una matriz 2D binaria?
que tienen una matriz 2D con 0 o 1 de cada célula, tales como:
1 2 3 4
A 0 1 1 0
B 1 1 1 0
C 0 1 0 0
D 1 1 0 0
y me gustaría a solucionar el problema por lo que es como "triangular superior" como sea posible, de este modo:
4 3 1 2
B 0 1 1 1
A 0 1 0 1
D 0 0 1 1
C 0 0 0 1
Las filas y columnas deben permanecer intactas, es decir, los elementos no se pueden mover individualmente y solo se pueden intercambiar "enteros".
entiendo que probablemente habrá casos patológicos en una matriz tiene varios posibles resultados ordenados (es decir, misma forma, pero difieren en la identidad de las filas/columnas "originales".)
Por lo tanto, puede alguien sugiero dónde podría encontrar algunos puntos de partida para esto? Una biblioteca/algoritmo existente sería genial, ¡pero me conformaré con saber el nombre del problema que trato de resolver!
Dudo que sea un problema de álgebra lineal como tal, y tal vez haya algún tipo de técnica de procesamiento de imágenes que sea aplicable.
Cualquier otra idea aparte, mi conjetura inicial es sólo para escribir un simple tipo de inserción en las filas, a continuación, las columnas y que iterar hasta que se estabilice (y espero que la detección de los casos patológicos no es demasiado difícil.)
Más detalles: Más información sobre lo que estoy tratando de hacer puede ayudar a aclarar. Cada fila representa un competidor, cada columna representa un desafío. Cada 1 o 0 representa "éxito" para el competidor en un desafío particular.
Al ordenar la matriz para que todos los 1s estén en la esquina superior derecha, espero proporcionar una clasificación de la dificultad intrínseca de cada desafío y una clasificación de los competidores (que tendrá en cuenta la dificultad de los desafíos que tenido éxito en, no sólo el número de aciertos)
Nota sobre la respuesta aceptada:. he aceptado recocido simulado como "la respuesta", con la salvedad de que esta pregunta no tiene una respuesta correcta. Parece un buen enfoque, aunque no he logrado encontrar una función de puntuación que funcione para mi problema.
preguntas: (1) Tenga en cuenta que no hay nada que puede hacer con una matriz de todos los 1s: ¿estás bien con eso? (2) Una vez que no hay ceros debajo de la diagonal, ¿te importa dónde están los 1s por encima de la diagonal? (3) ¿Es suficiente minimizar el número de 1s por debajo de la diagonal? ¿Qué tal si simplemente minimizas el número de filas que tienen (al menos) un 1 debajo de la diagonal? – ShreevatsaR
Respuesta 1) Sí, no se van a producir ceros o todos, y si lo hicieran, por definición se considerarían equivalentes, por lo que clasificarlos en alguna otra permutación no sería un problema. – Tom
Respuesta 2 + 3) Sí, quiero que el 1 esté lo más cerca posible de la parte superior de cada columna, es decir, la mayor cantidad posible del 1 en la esquina superior derecha. Tenga en cuenta que puede haber 1s debajo de la diagonal y 0s arriba, no es estrictamente una matriz triangular. – Tom