mscrack
@mscrack

Как правильно реализовать алгоритм?

Добрый день.
Есть программа суть которой найти значение удовлетворяющее условию.
public TaskResult FindValue()
        {
            double X = 1;
            double n = 0.1;
            double findValue = CalcValue(X);
            if (findValue > n)
            {
                while (findValue >= n)
                {
                    X += 1;
                    findValue = CalcValue(X);
                }
            }
        }

Проблема в том что при больших значениях X код выполняется долго. Я думал увеличивать Х не на 1 а на 10 например, что должно ускорить процесс нахождения нужного значения. Но данное решение мне тоже не очень нравится, пытался найти что то похожее в интернете нашел алгоритм Метод Хорд, реализовал его, но значения и близко не такие получаются какими должны быть. Скажите как можно ускорить процесс нахождения, может есть алгоритмы для решения подобных задач.

Upd Есть ограничение, если X > 1500 то останавливаем цикл
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
BasiC2k
@BasiC2k
Делал подобный проект.
1. Сначала нужно определить границы начального значения. В вашем случае это 1...1500
2. Далее - определяем разрядность максимального значения. В вашем случае это тысяча: 1000
3. Шагаем в цикле с шагом +1000 Это значения 1, 1000, 2000 (последнее на самом деле 1500). Вычисляем CalcValue. Допустим определили, что нужное значение находится во второй тысяче.
4. Шагаем в цикле во второй тысяче с шагом +100 это значения 1000, 1100, 1200, 1300 ... 2000 Вычисляем CalcValue. Допустим определили, что нужное значение находится в третьей сотне.
5. Шагаем в цикле в третьей сотне с шагом +10 это значения 1300, 1310, 1320, .... 1400 Вычисляем CalcValue.
И так далее, идём до единиц.
В этом алгоритме вычисление CalcValue будет производиться минимальное количество раз.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы