Actualmente, estoy probando cada elemento entero uno contra el otro para encontrar los que coinciden. Las matrices no contienen duplicados dentro de su propio conjunto. Además, las matrices no son siempre de la misma longitud. ¿Hay algún truco para acelerar esto? Estoy haciendo esto miles de veces, por lo que está empezando a convertirse en un cuello de botella en mi programa, que está en C#.¿Cuál es la forma más rápida de encontrar el número de coincidencias entre las matrices?
Respuesta
Utilice un HashSet
var set = new HashSet<int>(firstArray);
set.IntersectWith(secondArray);
El conjunto ahora contiene sólo los valores que existen en ambas matrices.
Creo que quiere. Intercambiar en lugar de .Union –
Ahh fart cerebro! Gracias. Lo edité – Josh
Acabo de probar el HashSet con IntersectWith y es dos veces más lento en comparación con iterar sobre todos los elementos. –
Se podría utilizar LINQ:
var query = firstArray.Intersect(secondArray);
O si las matrices ya están ordenados que podría iterar sobre las dos matrices de sí mismo:
int[] a = { 1, 3, 5 };
int[] b = { 2, 3, 4, 5 };
List<int> result = new List<int>();
int ia = 0;
int ib = 0;
while (ia < a.Length && ib < b.Length)
{
if (a[ia] == b[ib])
{
result.Add(a[ia]);
ib++;
ia++;
}
else if (a[ia] < b[ib])
{
ia++;
}
else
{
ib++;
}
}
@Mark: su código supone silenciosamente que las matrices están ordenadas – Vlad
John ya indicó que las matrices están ordenadas en los comentarios anteriores. –
Si tal comparación es un cuello de botella en su programa, quizás estés usando una estructura de datos inapropiada. La forma más simple podría ser mantener sus datos ordenados. Luego, para descubrir las entradas comunes, necesitaría atravesar ambas matrices solo una vez. Otra opción sería mantener los datos en un HashSet.
- 1. ¿Cuál es la forma más rápida de encontrar todas las apariciones de una subcadena?
- 2. ¿Cuál es la forma más rápida de comparar matrices de dos bytes?
- 3. ¿Cuál es la forma más rápida de grabar varios archivos?
- 4. ¿Cuál es la forma más rápida de generar el n-ésimo número de Motzkin?
- 5. ¿Cuál es la forma más rápida de obtener el valor absoluto de un número
- 6. ¿cuál es la forma más rápida de encontrar el gcd de n números?
- 7. ¿Cuál es la forma más rápida de comparar dos matrices para la igualdad?
- 8. ¿Cuál es la forma más rápida de representar y multiplicar matrices booleanas dispersas?
- 9. ¿Cuál es la forma más rápida de calcular la potencia grande de 2 módulo un número
- 10. Forma rápida de encontrar el siguiente múltiplo de un número
- 11. ¿Cuál es la forma más rápida de calcular el número de bits necesarios para almacenar un número
- 12. ¿Cuál es la forma más rápida de encontrar el centro "visual" de un polígono de forma irregular?
- 13. ¿Cuál es la forma más rápida de multiplicar varias celdas por otro número?
- 14. ¿Cuál es la forma más rápida de encontrar un archivo en Zend Studio para Eclipse?
- 15. Forma más rápida de inicializar matrices en Delphi
- 16. ¿Cuál es la manera más rápida de muestrear rebanadas de matrices numpy?
- 17. ¿Cuál es la manera más rápida de encontrar todo el archivo con el mismo inodo?
- 18. ¿Cuál es la forma más rápida de sumar una colección en Scala
- 19. ¿Cuál es la forma más rápida de leer el registro de eventos en la máquina remota?
- 20. ¿Cuál es la forma más simple de encontrar la diferencia entre 2 veces en python?
- 21. La forma más rápida/más eficiente de comparar dos matrices de cadenas Javascript
- 22. ¿Cuál es la forma más rápida de saltar a un constructor (es) en una clase?
- 23. La forma más rápida de encontrar el rango de suma máxima en int []
- 24. La forma más rápida de completar ArrayList
- 25. La forma más rápida de aprender Maven
- 26. Entre Encontrar, Solo, Primero, ¿cuál es el más rápido?
- 27. ¿Cuál es la forma más rápida de dibujar texto formateado en la API de Win32?
- 28. cuál es la forma más rápida de obtener el submapa de un mapa
- 29. ¿Cuál es la forma más rápida de cargar y cambiar el tamaño de una imagen?
- 30. ¿Cuál es la forma más rápida de convertir float a int en x86?
¿Es que simplemente desea una lista única de todos los enteros que existen en ambas matrices? – Thomas
Para agregar al comentario de Thomas, ¿las matrices están ordenadas? –
Esa sería otra forma de expresarlo. Una lista única común en ambos conjuntos. Sí, están ordenados. –