Если уж hashtable перевалил за (n ln n), то есть риск дальнейшего роста сложности до O(n * n), так что можно проделать всего лишь двойную работу вместо потенциального O(n * n): выкинуть результаты работа хэша и перейти к сортировке.
Вот. Так каким образом ведется подсчет того, что алгоритм уже перевалил O(n log n) ? Когда количество итераций превысит n*log(n) ? Или все таки C*n*log(n), где C какой-то коэффициент (вопрос а какой? как выбирается?). Допустим даже, что определили, после чего запускаем сортировку, какова сложность алгоритма получится общая ? O(n*log (n)) с ужасно большим коэффициентом. Но никак не O(n), согласись.
Я с тобой согласен, что для многих случаев можно подобрать такой алгоритм который будет работать быстро. Но если рассматривать общий случай, то ты мне не доказал свою правоту.
этот случай нам не грозит, потому что equality-testing в array_unique основан на операторе (string) (если верить документации), а в PHP в (string) можно конвертировать что угодно.
Я не знаю Питона, поэтому можешь мне объяснить какая сложность у этой операции для него в вышеприведенной тобой ссылке?
P.P.S. предвидя ответ, спрошу, а как они получили для ассоциативного массива сложность вставки O(n) в ЛЮБОМ случае?