2012-09-11 14 views
5

Ésta es una pregunta de la entrevista:Encontrar un algoritmo eficiente para una operación de matriz

Para una matriz, se define una operación que cuando añadimos 1 a una entrada, todas las entradas de los alrededores (arriba, abajo, izquierda, derecha) también será agregado por 1. Dada una matriz positiva, encuentre un algoritmo para determinar si la matriz puede construirse a partir de una matriz cero usando tal operación.

¿Qué es un algoritmo eficiente para resolver la pregunta?

En lo que actualmente puedo pensar es en utilizar la función de retroceso para probar todas las combinaciones posibles, sin embargo, esto definitivamente no es eficiente. La pregunta es similar al juego Lights Off, pero aquí no es 0/1, lo que lo hace más complicado.

Gracias.

Editar:

Por ejemplo:

3 3 can be constructed from 0 0 -> 1 1 -> 2 2 -> 3 3 
1 2       0 0 1 0 1 1 1 2 
+0

¿Qué sucede si toco la primera o la última col/fila: ¿Envoltura o corte? –

+0

@EugenRieck Corta – Rannnn

+0

Su ejemplo es imposible: 1/1/1/1 no se puede crear desde una matriz cero ... –

Respuesta

1

álgebra lineal?

Cell i,j is touched x<sub>ij</sub> times. 

n variables y ecuaciones. Resolver. O(n^6) por el método gaussiano, pueden existir otros métodos más rápidos.

Además, la matriz es especial, por lo que es posible que sea más rápida.

+1

Un enfoque que utiliza más de la estructura del problema sería utilizar una FFT de 2-d y el teorema de convolución; lo que tienes es una convolución de una matriz desconocida y un patrón con 9 1 en un cuadrado. Podría tener problemas para obtener respuestas que no sean enteros, pero si se produce un empujón, puede usarlo con bifurcación y encuadernación. – mcdowella

0

encontré algunas cosas (para la matriz 2x2), me gustaría compartirlas primero
-sum de todos los elementos en la matriz debería ser divisible por 3 (entonces solo es posible).
-tenemos para expresar una matriz dada en permitido forma operación pasos

3 3 -> 2* 1 1 + 1* 1 1 
1 2  0 1   1 0 

habría algunos casos en los que esto no se puede hacer, por ejemplo,

5 3 ->2* 1 0 + 2* 1 1  = 4 2 
2 4  1 1   0 1  2 4 

5 3 - 4 2  = 1 1 (this is not allowed operation) 
2 4  2 4  0 0 
+0

Incorrecto: la matriz 3x3 '0 1 0/1 1 1/0 1 0' es alcanzable (realice la operación una sola vez, al elemento central), pero la suma de todos los elementos no es divisible por 3. – jrouquie

+0

Además, la 2x2 matrice '2 4/4 2' es alcanzable (toque dos esquinas opuestas dos veces), pero no hay elementos adyacentes con diferencia ≤ 1. – jrouquie

+0

@jrouquie:" gracias por menos ", debería haber mencionado casos 2x2 específicamente. ¿Puede usted proporcione un caso de prueba en 2x2 donde la suma no es divisible por 3 y aún así la matriz se puede reducir. "Elementos adyacentes con diferencia ≤ 1" estaban equivocados. – k53sc

Cuestiones relacionadas