ваш алгоритм будет работать в O (n).Позвольте мне объяснить, почему
нам нужно взглянуть на внутренний цикл, чтобы понять, почему он не влияет на сложность времени экспоненциальным образом.
просмотр внутреннего цикла будет выполняться в худшем случае при следующем количествевремя для каждой итерации
1-я итерация: 1/2 * N раз
2-я итерация: 1/3 * N раз
3-я итерация: 1/4 * N раз
и т. Д.
Таким образом, число раз, когда работает внутренний цикл, уменьшается с каждым разом, когда мы это делаем.
, и мы можем сказать общее количество раз, которое внутренний циклбудет работать SUM (1/2 + 1/3 + 1/4 + ... 1 / N)
, и это называется гармоническим рядом https://en.wikipedia.org/wiki/Harmonic_series_(mathematics)
, и хотя этот ряд сходитсядо бесконечности, это очень медленно сходится, что для N 10 ^ 43 это меньше, чем 100
, поэтому реалистично внутренний цикл будет работать в худшем случае с постоянным числом N раз, скажем, в 100 раз макс.1024 *
Это означает, что временная сложность полного алгоритма равнавыход внутреннего цикла, потому что внешний цикл не запускает никаких других циклов.Таким образом, временная сложность будет равна O (Xn), где X - это постоянное число, которое, как мы объяснили, реально не превысит 100 или 200 в пределах чисел java, что будет означать, что общая сложность алгоритма равна O (n), так как мы опускаемпостоянная