Я с Джорданом, за исключением того, что я думаю, что сложность настенных часов лучше выражать в виде O (2 ^ m), где m - размер каждого элемента, а не O (max (input)).
Если каждый элемент имеет размер m, самый большой элемент будет иметь целочисленное значение 2 ^ m (минус один, но это никого не волнует). По построению алгоритм требует, чтобы время установки было меньше 1, константы.
То есть сложность настенного времени O (2 ^ m), сложность подсчета операций O (n).
Модифицированный алгоритм, учитывающий время настройки, скорее всего, будет иметь сложность времени настенных часов O (2 ^ m + n). Например, он может отметить текущее время в начале, вычислить base_time = start_time + k*len(list)
(для некоторой подходящей константы k), а затем перевести потоки в спящий режим до времени base_time+i
. Тогда k*len(list)
- это явно O (n), а i
- это O (2 ^ m), как и прежде, для общего количества O (2 ^ m + n).