Учитывая следующий алгоритм для набора данных размером N:
- Разделите данные на блоки M = (N / lg N) за O (N) времени.
- Разделить блоки по времени O (M lg M).*
Что такое биг-о?Как мне оценить (N / LG N) * LG (N / LG N)?
Если это не O (N), то достаточно ли М, чтобы все стало О (N)?
* Алгоритм разбиения - это STL stable_partition
, который в этом примере будет выполнять M тестов и не более M lg M перестановок. Но , объекты, подлежащие обмену, представляют собой блоки размером lg N. Относит ли это практическое время шага 2 обратно к O (N lg N), если их необходимо поменять местами?
Не домашнее задание, а работающий инженер, ковыряющийся в компьютерных технологиях.