Разработайте алгоритм, который сортирует n целые числа, где есть дубликаты. Общее количество разных номеров составляет k . Ваш алгоритм должен иметь временную сложность O (n + k * log (k)) . Ожидаемое время достаточно. Для каких значений k алгоритм становится линейным?
Я не могу придумать алгоритм сортировки целых чисел, который удовлетворяет условию, что он должен быть O (n + k * log (k)) . Я не очень продвинутый программист, но у меня была проблема, прежде чем этот должен был придумать алгоритм для всех чисел xi
в списке, 0 ≤ xi ≤ m
такой, чтобы алгоритм был O (n + m), где n было количество элементов в списке, а m было значением наибольшего целого числа в списке. Я легко решил эту проблему, используя сортировку по счету, но я борюсь с этой проблемой. Самым сложным условием для меня является термин k*log(k)
в нотации ordo, если бы он был n*log(n)
, вместо этого я мог бы использовать сортировку слиянием, верно? Но сейчас это невозможно, поэтому любые идеи будут очень полезны.
Заранее спасибо!