Какой самый быстрый способ увеличить значение переменной до тех пор, пока оно не будет соответствовать значению другой переменной в Javascript?

#javascript #algorithm #logic #matching

#javascript #алгоритм #Логические #соответствие

Вопрос:

У меня есть код, который увеличивает значение переменной ‘x’ на 0.01 и выполняет некоторые вычисления, пока оно не будет соответствовать значению другой переменной ‘y’. В то время как «X» увеличивается, «y» уменьшается не линейно.

Какова наилучшая логика для нахождения значения, где ‘x’ и ‘y’ совпадают или ближе всего? Увеличение ‘x’ на 0.01 делает свое дело, но, поскольку я действительно новичок, я думаю, есть умный способ.

Заранее спасибо

Комментарии:

1. Проверка x >= y каждый раз x увеличивается.

2. Путь грубой силы — это путь

3. Определите, что скорость y уменьшается, и приравняйте их математически.

4. не видя кода, ответ — ананас

5. Если я правильно понимаю вопрос, то любой из алгоритмов поиска корня должен работать.

Ответ №1:

Если я правильно понимаю, вы хотите найти x такое, что f(x) = y для константы y и f(x) является нелинейным, но не имеет других входных данных. Правильно ли это?

Давайте далее предположим, что f(x) это строго увеличивается или уменьшается (то есть: оно не перемещается вверх и вниз и не пересекается y через несколько x секунд). Затем вы можете использовать стандартный двоичный поиск, чтобы найти единственный перехват:

  1. поиск значений

    • x_lo такой, что f(x_lo) < y
    • x_hi такой, что f(x_hi) > y
  2. посмотрите на середину m = (x_hi x_lo) / 2 .

    • если f(m) < y , используйте x_lo = m и повторите этот шаг
    • если f(m) > y , используйте x_hi = m и повторите этот шаг
    • если f(m) == y или оно достаточно близко для ваших нужд, вы закончили!

Простой способ найти начальные значения для x_hi and x_lo — это проверить f(any) значение и присвоить x_hi=any or x_lo=any в зависимости от того, больше оно или меньше y . Как только у вас есть одна крайность, вы можете быстро найти другую, быстро увеличив или уменьшив ее. Скажем, у нас есть x_lo , мы можем протестировать с x_hi = x_lo*(2^i) помощью for i=1, 2, 3, ... , ^ представляя возведение в степень.

Если f(x) пересекается y в нескольких точках, это не сработает — потому что он может пропустить прямо через важное x на шаге 2.