Tengo una matriz que es de tamaño 4,9,16 o 25 (según la entrada) y los números en la matriz son los mismos pero menos en uno (si el tamaño de la matriz es 9 entonces el elemento más grande en la matriz sería 8) los números comienzan con 0 y me gustaría hacer algún algoritmo para generar algún tipo de suma de comprobación para la matriz, de forma que pueda comparar que 2 matrices son iguales sin recorrer toda la matriz y verificar cada elemento uno a uno.¿Suma de comprobación para una matriz de enteros?
¿Dónde puedo obtener este tipo de información? Necesito algo que sea lo más simple posible. Gracias.
edición: sólo para estar claro en lo que quiero:
-Todos los números de la matriz son distintos, por lo que [0,1,1,2] no es válida porque hay un elemento repetido (1)
-La posición de la materia números, por lo [0,1,2,3] no es el mismo que [3,2,1,0]
-La matriz contendrá el número 0, por lo que esto también debe tenerse en cuenta.
EDIT:
bien he tratado de aplicar el algoritmo de Fletcher aquí: http://en.wikipedia.org/wiki/Fletcher%27s_checksum#Straightforward
int fletcher(int array[], int size){
int i;
int sum1=0;
int sum2=0;
for(i=0;i<size;i++){
sum1=(sum1+array[i])%255;
sum2=(sum2+sum1)%255;
}
return (sum2 << 8) | sum1;
}
para ser honesto no tengo idea de lo que hace la línea de retorno de hacer, pero por desgracia, el algoritmo no funciona . Para las matrices [2,1,3,0] y [1,3,2,0] obtengo la misma suma de comprobación.
Edit2:
bien aquí está otro, la suma de comprobación Adler http://en.wikipedia.org/wiki/Adler-32#Example_implementation
#define MOD 65521;
unsigned long adler(int array[], int size){
int i;
unsigned long a=1;
unsigned long b=0;
for(i=0;i<size;i++){
a=(a+array[i])%MOD;
b=(b+a)%MOD;
}
return (b <<16) | a;
}
Esto también no funciona. Las matrices [2,0,3,1] y [1,3,0,2] generan la misma suma de comprobación. Estoy perdiendo la esperanza aquí, ¿alguna idea?
Los números en una matriz no son únicos, ¿no? Entonces {1,2,2,4} es válido? –
> los números en la matriz son los mismos ¿Puede dar más detalles sobre eso? – jaffa
¡Oh, lo siento, no lo mencioné! Sí, los números son únicos, por lo que [1,2,2,4] NO es válido. – MinaHany