Сложность: O (NlogN) * 1002 *.
Это потому что:
1.Есть внешний цикл for : с этим внешним циклом for ваша сложность времени уже равна O (N).
Эта часть может немного запутать.Мы собираемся рассмотреть два случая.
Худший случай: 2 или более объектов находятся в диапазоне в каждом отдельном цикле.
Это делаеталгоритм O (N ^ 2), потому что теперь вам нужно проходить внутренний цикл for каждую отдельную итерацию !!!Тем не менее, очень маловероятно, что ваше утверждение if всегда станет истинным ... Поэтому нам нужно позаботиться и о наилучшем сценарии .
Лучшем случае: ни один из объектовнаходятся в диапазоне.
Это делает алгоритм O (N), потому что вам больше не нужно входить во внутренний цикл for!Мы проверим только оператор if и перейдем к следующей итерации.
Так в чем же сложность времени?O (N ^ 2) ИЛИ O (N)?
Теперь поговорим об амортизированном времени выполнения.Амортизированное время выполнения просто означает рассмотрение как сценария наихудшего случая, так и сценария наивысшего случая (Подробнее об анализе амортизации можно найти здесь: https://en.wikipedia.org/wiki/Amortized_analysis).
Таким образом, мы рассматриваем как O (N ^ 2), так и O (NЕсли предположить, что мы выполняем оператор if половину времени (амортизируется), сложность времени будет равна O (NlogN).
Является ли O (NlogN) быстрее, чем O (N)? Это будет толькоtrue, если у нас более миллиона объектов.
Надеюсь, это поможет!