Дело в том, что набор голландских флагов не полностью упорядочен. Есть много равных элементов, фактически, когда вы подсчитываете различные объекты, это набор (максимум) размера 3.
Граница Omega(n log n)
, вероятно, является жесткой, только если для объектов a
и b
выполняется a<b
или b>a
(иначе: все объекты различны )
На самом деле, я могу отсортировать по O(0)
, когда все объекты должны быть null
.
Предполагая, что есть как минимум два различных объекта, я считаю, что правильная граница - это что-то вроде Omega(n log m)
, где n
- это число объектов, а m
- это число различных объектов ( которые не сортируются равными). Проще говоря, log m
- это количество решений, необходимых для поиска выходного сегмента. В общем случае, O(log m)=O(log n)
, если количество равных объектов мало. В проблеме голландского флага m=3
.
Radix sort использует это по-другому. Он также считается линейным. Тем не менее, требуется log m
передачи данных, где m
- число возможно различных элементов. Таким образом, сортировка Radix также имеет вид Omega(n log m)
, где m
- количество объектов, которые она может различить.