Esto se puede hacer de diferentes maneras:
1 - La fuerza bruta: para cada elemento de matriz1 comprobar existe ese elemento en matriz2. Tenga en cuenta que esto requeriría tener en cuenta la posición/índice para que los duplicados se puedan manejar correctamente. Esto requiere O (n^2) con la cantidad de código complicado, ni siquiera pensar en ello en absoluto ...
2 - Clasificar las dos listas, a continuación, comprobar cada elemento para ver si son idénticos. O (n log n) para ordenar y O (n) para verificar, básicamente, O (n log n), la ordenación se puede realizar in situ si el desorden de las matrices no es un problema, si no es necesario tener 2n de memoria de tamaño para copiar la lista ordenada
3 - Agregue los elementos y el recuento de una matriz a una tabla hash, luego itere a través de la otra matriz, verificando que cada elemento se encuentre en la tabla hash y en ese caso recuento de decrementos si no es cero; de lo contrario, quítelo de hashtable. O (n) para crear una tabla hash, y O (n) para comprobar los otros elementos de la matriz en la tabla hash, por lo O (n). Esto introduce una tabla hash con memoria como máximo para n elementos.
4 - Best of Best (Entre los anteriores): Restar o tomar diferencia de cada elemento en el mismo índice de las dos matrices y finalmente resumir los valores subtacted. Por ejemplo, A1 = {1,2,3}, A2 = {3,1,2} el Diff = {- 2,1,1} ahora resume el Diff = 0, lo que significa que tienen el mismo conjunto de enteros. Este enfoque requiere un O (n) sin memoria adicional. Un código C# vería como la siguiente:
public static bool ArrayEqual(int[] list1, int[] list2)
{
if (list1 == null || list2 == null)
{
throw new Exception("Invalid input");
}
if (list1.Length != list2.Length)
{
return false;
}
int diff = 0;
for (int i = 0; i < list1.Length; i++)
{
diff += list1[i] - list2[i];
}
return (diff == 0);
}
4 no funciona en absoluto, es el peor
¿Por qué no darle un puntapié y ver qué sucede si no podemos ordenar? obviamente necesitamos poder comparar por igualdad. – Hugo
Parece que está preguntando cómo comparar los conjuntos – naumcho
sí, eso es correcto ... – nickf