¿Cuál es el mejor algoritmo para encontrar dos elementos iguales en una matriz?

Depende del tamaño de una matriz. Si el tamaño de la matriz es muy pequeño, las diferencias entre el rendimiento de los métodos de búsqueda serán insignificantes.
Si el tamaño de la matriz es considerablemente grande, se utiliza la búsqueda binaria. Para esto, la matriz debe estar ordenada.

  • Si se ordenan los datos, se puede realizar una búsqueda binaria (Figura). Las variables Lb y Ub realizan un seguimiento del límite inferior y el límite superior de la matriz, respectivamente.
  • Comenzamos examinando la posición del elemento medio – M de la matriz.
  • Supongamos que el valor que estamos buscando es mayor que el valor del elemento en la matriz [M], entonces debe residir en la mitad superior de la matriz.
  • Por lo tanto, establecemos Lb en M. Vuelva a calcular el valor de M.
  • Esto restringe nuestra próxima iteración a través del bucle a la mitad de la matriz.
  • De esta manera, cada iteración reduce a la mitad el tamaño de la matriz a buscar.
  • Por ejemplo, la primera iteración dejará 3 elementos para probar. Después de la segunda iteración, quedará 1 elemento para probar. Por lo tanto, solo se necesitan tres iteraciones para encontrar cualquier número.

En el caso de una matriz sin clasificar, la búsqueda secuencial es la única opción que queda. Vea este enlace para más detalles.
¿Cuál es el algoritmo más eficiente para “Dada una matriz sin clasificar de enteros positivos y un entero N, devuelve N si N existió en la matriz o el primer número que es menor que N.” ¿Problema?

Hay muchas maneras de hacer esto y en una escala para enteros no hay mucha diferencia entre los algoritmos disponibles, pero para datos / números más grandes, este método puede ahorrar tiempo:

“Busque en la matriz dos números iguales dividiendo cada número por el número requerido para buscar”.

Si sabe que todos los valores están dentro de un rango dado que garantiza que habrá duplicados (es decir, abarca menos de 10 ^ 5), entonces puede ser útil una clasificación de cubeta modificada. De lo contrario, un tipo simple es suficiente, con una ligera modificación.

A partir de su pregunta, supongo que no conoce de antemano el valor para buscar un duplicado , sino que simplemente está buscando al menos un valor aleatorio que esté duplicado, como cuando obtiene una matriz y tiene que convertirla en un conjunto (que es la misma matriz, menos los valores duplicados).

Ordene la matriz , que se realiza en tiempo O (N Log N) .

Luego navegue por toda la matriz buscando al menos un valor para que arr[i]==arr[i-1] , con un rango de 1 a N; Esto se hace en algo menos que O (N) . O (N-1) de hecho, en el peor de los casos, el valor duplicado es el valor máximo de la matriz.

De manera similar, podría obtener fácilmente el conjunto de la matriz relativa agregando a la matriz vacía “resultado” solo valores para los cuales es verdadera la condición arr[i]!=arr[i-1] , aún pagando poco más que la clasificación inicial hora.

Espero haber respondido bien su pregunta y que esto ayude; feliz codificación 🙂