Я получил это "Обнаруженная сложность времени: O (YX)".
Теоретически вы линейно движетесь к конечной точке от начальной точки с определенным значением скачка, но важноСмысл в том, что происходит, если вам нужно достичь 1 млрд. всего за 2 шага за раз?
Набор задач, на который вы ссылались, является арифметической прогрессией, где:
Begin Value = 5
,End Value = 10^9 (1 billion)
, Common Difference = 2
Используя простую формулу арифметической прогрессии, чтобы узнать количество элементов ( Общее количество прыжков ) в этой прогрессии, оно будет:
a(n) = a(0) + (n-1)*(Common Difference)
, здесь (Common Difference)
будет вашим значением прыжка frogJumpPowerDistance
, простая подстановка предложит значение в виде:
10^9 = 5 + (n-1) * 2
, n будет приблизительно 500 миллионов игнорирование незначительного сложения и вычитания
Что это значит?
При вычислении нотации Big O для сложности времени, пока мы будем использовать логику циклического анализа, она будет примерноO (N) и значение N слишком высоко, как рассчитываетсяс рейтингом выше 500 млн.
Каковы ваши варианты, чтобы сделать это быстрее при той же O(N)
сложности
- Увеличьте значение
frogJumpPowerDistance
, предположим, высделайте это 1000
, N (количество прыжков) будет приблизительно 1 миллион, огромное сокращение по сравнению с последним, и так далее и так далее
Поэтому идея заключается либо в существенном улучшении frogJumpPowerDistance
,чтобы сделать его более совершенным алгоритмом или, если он хорошо подходит, использовать одну из предложенных формул, вы можете использовать формулу арифметической прогрессии.
В большинстве случаев мы не можем использовать прямую формулу для решения набора математических задач, еезацикливание структуры данных, такой как List
по O(N)
времени или может быть O(LogN)
, если вы можете уменьшить на 1/2 на каждом этапе, предполагая логарифм до основания 2, но суть заключается в уменьшении значенияN, и увеличение Common difference
или Jump value
на значительную величину, что делает алгоритм быстрее.