#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
секунд). Затем вы можете использовать стандартный двоичный поиск, чтобы найти единственный перехват:
-
поиск значений
x_lo
такой, чтоf(x_lo) < y
x_hi
такой, чтоf(x_hi) > y
-
посмотрите на середину
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.