He a $n$ bloques de datos y $k$ bloques de paridad distribuida a través de $m$ cuadros donde cada caja puede contener atmost $b$ bloques. Cada bloque de paridad es Ex-o de algunos de los bloques de datos (para facilidad de comprensión que puede asumir cada uno de los datos/bloque de paridad como un único bit) y cada bloque de datos está involucrado en al menos un Ex-o la operación para obtener algún bloque de paridad. Cada bloque de datos puede estar involucrado en más de un bloque de paridad de la operación, de hecho, va a ser lo que va a aumentar la tolerancia a errores del código. Por lo tanto, tenemos $k$ paridad de ecuaciones de la siguiente manera:
$$\begin{aligned} P_1 &= D_{11} \oplus D_{12} \oplus \cdots \\ \;\vdots \\ P_k &= D_{k1} \oplus D_{k2} \oplus \cdots \end{aligned}$$
Ahora bien, si algunos de datos o bloque de paridad falla y no podemos recuperar los datos perdidos cuadras de la no-error de datos/paridad bloques llamamos a esta situación un "dataloss" de la situación. Ahora, voy a dar un ejemplo sencillo para explicar esto. Supongamos que tenemos $4$ bloques de datos y $3$ bloques de paridad, donde la paridad de ecuaciones es la siguiente: $$\begin{aligned} P_1 &= D_{1} \oplus D_{3} \oplus D_{4}\ \\ P_2 &= D_{1} \oplus D_{2} \oplus D_{3}\ \\ P_3 &= D_{2} \oplus D_{3} \oplus D_{4} \end{aligned}$$
Los representamos por una matriz llamada generador de la matriz, que es un $4$x$7$ matriz, la cual es como sigue:
$$ G=\left(\begin{array}{ccccccc} 1&0&0&0&1&1&0\\ 0&1&0&0&0&1&1\\ 0&0&1&0&1&1&1\\ 0&0&0&1&1&0&1 \end{array}\right) $$
Ahora, supongamos que $D1$,$D2$,$D3$ se produce un error y queremos comprobar si las causas dataloss. Así, eliminamos las columnas correspondientes a $D1$,$D2$,$D3$ a partir de G y llamar a la matriz obtenemos una "matriz para la recuperación", que es
$$ G'=\left(\begin{array}{cccc} 0&1&1&0\\ 0&0&1&1\\ 0&1&1&1\\ 1&1&0&1 \end{array}\right) $$ aquí. Ahora, tendremos que comprobar el rango de $G'$. Si este es menor que $n$, luego tenemos a $dataloss$, de lo contrario no. Aquí $rank$(G')=4 e $n$=4 y no tenemos ninguna $dataloss$. Básicamente, si nos Ex-o $P1$,$P2$,$P3$ entonces podemos recuperar $D3$, desde el que podemos recuperar $D1$,$D2$.
Datos/paridad de bloque de falla si y sólo si la caja que contiene falla y si un cuadro de falla, todos los datos y bloques de paridad dentro de falla. Ahora queremos formular el siguiente problema de optimización:
Dado $n$, $k$, $m$ y el $k$ paridad de ecuaciones (no se nos permite elegir que los bloques de datos son xor para formar un bloqueo de verificación, se nos da una borradura de código de sistema) queremos una asignación de la disco y bloques de paridad a través de $m$ cajas de tal manera que podamos minimizar el número de casos en los que un cuadro de las causas de la falla "dataloss"; i.e quiero minimizar la función $G=\sum_{i=0}^m\;g(i)$, donde
$$g(i) = \begin{cases} 1 & \text{if failure of box }i\text{ causes "dataloss"} \\ 0 & \text{otherwise} \end{casos}$$
Ahora la asignación de disco/bloques de paridad a través de $m$ cajas puede ser representado por una matriz de dimensión $(n+k) \times m$, vamos a llamarlo $B$. El $(i,j)$-ésima de la matriz es $1$ si $j$-th caja contiene $i$-ésimo bloque de datos ($(i-n)$-ésimo bloque de paridad) por $i \le n$ ( $i>n$ ), de lo contrario es $0$. Así, la función de $G$ es una función de todos los de la matriz de entradas y de las limitaciones que tenemos son:
- cada matriz de entrada es 0 o 1
- suma de las entradas en una fila es siempre 1 (i.e cada uno de los datos/paridad bloque está presente en exactamente un cuadro)
- la suma de las entradas en cada columna es de al menos 1 (es decir, sin caja está vacía)
- la suma de todas las entradas de la matriz es $n+k$
Ahora, la función de $G$ viene como una función no lineal de la matriz de entradas. Además, el dominio conjunto de $G$ es el conjunto de todos los $n$-tuplas cuando los elementos de una tupla son 0 o 1. Así, el conjunto de dominios no es un conjunto convexo, de forma convexa de las técnicas de optimización no se puede aplicar aquí. ¿Cómo resolver este problema de optimización?
Si me refinar problema como este: ¿cuánto de la $n+k$ bloques pueden ser cubiertos con m de cada uno de los subconjuntos de tamaño atmost b, entonces creo que es posible formular como un conjunto independiente máximo problema. Vamos a formar un grafo de n+k vértices donde cada vértice corresponde a un bloque(datos/paridad), pero la definición de los bordes no está claro para mí (este es el principal problema que estoy tratando de resolver). A continuación, el máximo conjunto independiente de este gráfico, que nos dará la máxima subconjunto (de la n+k columnas) que pueden ser cubiertos.
De alguna manera siento que el problema es NP-Completo.
Espero haber descrito el problema con claridad.
======
Editar (comentario de Jyrki Lahtonen): Esta información también fue publicada en el MO. Me intenta redirigir eventual interesado MO-carteles aquí, porque por el momento creo que tenemos una mejor descripción de la pregunta aquí.