Se seus elementos forem de alguma forma comparáveis (o fato de a ordem ter qualquer significado real é indiferente - ela só precisa ser consistente com sua definição de igualdade), a solução de remoção de duplicatas mais rápida irá classificar a lista (0 (n log ( n))) então fazer uma única passagem e procurar repetidas elementos (ou seja, elementos iguais que se sucedem) (isto é O (n)).
A complexidade geral será O (n log (n)), que é aproximadamente a mesma que você obteria com um Conjunto (n vezes longo (n)), mas com uma constante muito menor. Isso ocorre porque a constante na classificação / desduplicação resulta do custo de comparar elementos, enquanto o custo do conjunto provavelmente resultará de um cálculo de hash, mais uma (possivelmente várias) comparações de hash. Se você estiver usando uma implementação de Set baseada em hash, isto é, porque uma baseada em Árvore vai lhe dar um O (n log² (n)), que é ainda pior.
Pelo que entendi, no entanto, você não precisa remover duplicatas, mas apenas testar sua existência. Portanto, você deve codificar manualmente um algoritmo de mesclagem ou classificação de pilha em sua matriz, que simplesmente sai retornando verdadeiro (ou seja, "há um dup") se seu comparador retornar 0, e de outra forma completar a classificação e percorrer o teste de matriz classificada para repetições . Em uma mesclagem ou classificação de heap, de fato, quando a classificação for concluída, você terá comparado todos os pares duplicados, a menos que ambos os elementos já estivessem em suas posições finais (o que é improvável). Assim, um algoritmo de classificação ajustado deve produzir uma grande melhoria de desempenho (eu teria que provar isso, mas acho que o algoritmo ajustado deve estar no O (log (n)) em dados uniformemente aleatórios)