Якщо ваші елементи якимось чином порівнянні (той факт, що замовлення має будь-яке реальне значення, байдуже - воно просто повинно відповідати вашому визначенню рівності), найшвидше рішення про видалення дублікатів буде сортувати список (0 (n log ( n))) потім зробити один прохід і шукати повторювані елементи (тобто рівні елементи, що слідують один за одним) (це O (n)).
Загальна складність буде O (n log (n)), що приблизно відповідає тому, що ви отримаєте з Set (n разів довше (n)), але зі значно меншою постійною. Це пояснюється тим, що константа сортування / вирахування є результатом витрат на порівняння елементів, тоді як вартість з набору, швидше за все, є результатом обчислення хешу, плюс одне (можливо, кілька) порівнянь хешу. Якщо ви використовуєте хеш-реалізацію Set, тобто тому, що на основі Дерева ви отримаєте O (n log² (n)), що ще гірше.
Як я розумію, однак, вам не потрібно видаляти дублікати, а просто перевіряти їх існування. Таким чином, вам слід ввести в коді алгоритм сортування або об'єднання в масиві на своєму масиві, який просто закриває повернення true (тобто "є дуб"), якщо ваш порівняльник повертає 0, інакше завершує сортування, і проходить тестування відсортованого масиву для повторів. . У сортуванні або купі сортування, дійсно, коли сортування завершено, ви будете порівнювати кожну дублюючу пару, якщо обидва елементи вже не були у своїх остаточних положеннях (що малоймовірно). Таким чином, алгоритм налаштованого сортування повинен принести величезне поліпшення продуктивності (мені доведеться це довести, але я думаю, що алгоритм налаштованого повинен бути в O (log (n)) за рівномірно випадковими даними)