Si sus elementos son de alguna manera Comparables (el hecho de que el orden tenga un significado real es indiferente, solo debe ser consistente con su definición de igualdad), la solución de eliminación de duplicados más rápida será ordenar la lista (0 (n log ( n))) luego hacer una sola pasada y buscar elementos repetidos (es decir, elementos iguales que se suceden) (esto es O (n)).
La complejidad general será O (n log (n)), que es aproximadamente la misma que obtendría con un Conjunto (n veces largo (n)), pero con una constante mucho menor. Esto se debe a que la constante en ordenar / deducir resulta del costo de comparar elementos, mientras que el costo del conjunto es más probable que resulte de un cálculo hash, más una (posiblemente varias) comparaciones hash. Si está utilizando una implementación de conjunto basada en hash, es decir, porque una basada en árbol le dará un O (n log² (n)), que es incluso peor.
Sin embargo, según tengo entendido, no es necesario eliminar los duplicados, sino simplemente probar su existencia. Por lo tanto, debe codificar manualmente un algoritmo de combinación o clasificación de montón en su matriz, que simplemente sale devolviendo verdadero (es decir, "hay un dup") si su comparador devuelve 0, y de lo contrario completa la clasificación, y atraviesa la prueba de matriz ordenada para repeticiones . En una combinación o clasificación de pila, de hecho, cuando se complete la clasificación, habrá comparado cada par duplicado a menos que ambos elementos ya estuvieran en sus posiciones finales (lo cual es poco probable). Por lo tanto, un algoritmo de clasificación modificado debería producir una gran mejora en el rendimiento (tendría que demostrar eso, pero supongo que el algoritmo modificado debería estar en O (log (n)) en datos uniformemente aleatorios)