Cómo encontrar una matriz cuadrada binaria (los elementos son solo 0 o 1) si se da la suma de filas y columnas

Entonces, quiere encontrar una matriz [math] n \ times n [/ math] A que tenga el elemento [math] a_ {ij} [/ math] que satisfaga las siguientes condiciones:

[matemáticas] a_ {ij} \ in \ {0,1 \} [/ matemáticas]

[matemáticas] \ sum_i a_ {ij} = b_j [/ matemáticas]

[matemáticas] \ sum_j a_ {ij} = c_i [/ ​​matemáticas]

cuando se dan [math] b [/ math] y [math] c [/ math]. ¡Interesante pregunta! Una aplicación del mundo real podría ser determinar quién sigue a quién por el total de seguidores / seguidores para cada usuario de quora.

Desafortunadamente, no hay una solución única para este problema . Por ejemplo, para una matriz [math] 2 \ times2 [/ math], suponga que el vector de suma de filas b es (1,1) yc también es (1,1). Entonces tendremos 2 soluciones:

[matemáticas] \ begin {pmatrix} 0 & 1 \\ 1 & 0 \ end {pmatrix}, \ begin {pmatrix} 1 & 0 \\ 0 & 1 \ end {pmatrix} [/ math]

Miremos de otra manera, en términos de información.

La matriz A tiene [matemática] n ^ 2 [/ matemática] bits de información. Por el contrario, los vectores byc solo tienen (como máximo) [math] 2 (n + 1) log (n + 1) [/ math] bits de información. Por lo tanto, este es un problema mal planteado, que no puede resolver de manera única.

Si solo desea un ejemplo, búsquelo de la siguiente manera. Dar un ejemplo en caso de que b y c estén en orden descendente es suficiente, porque puede permutar la matriz nuevamente a la condición dada.

Ordenar (b, DESCENDER)
Ordenar (c, DESCENDER)
a [i] [j] = 0 para todo i, j

para i = 0 a i = N
para j = 0 a j = N
si c [j]! = 0 && b [i]! = 0
a [i] [j] = 1
c [j] = c [j] -1
b [i] = b [i] -1
fin
fin
fin

No estoy dando una prueba, pero creo que esto servirá.

Una forma de resolver este rompecabezas es reduciéndolo a una red Flow.

Debes hacer lo siguiente:

  • Cree un gráfico con los nodos s (fuente), r 1, r 2, .., r n, c 1, c 2, …, c n y t (sumidero).
  • Conecte un borde de s a cada r i con capacidad igual a la suma de la i ésima fila, cada r i a cada c i con capacidad 1, cada c i a t con capacidad igual a la suma de la i ésima columna.
  • Resuelva lo anterior para el flujo máximo.

El flujo en el borde entre r i y c j representará el elemento en la fila i y la columna j. Ahora puede construir la matriz con los elementos deseados como el flujo entre cada r i y c j.

Eso es.