У меня есть программа на Java, в которой я обнаружил, что вручную реализовал алгоритм бинарного поиска 3 раза. Проблема в том, что этот поиск не выполняется по заполненной структуре данных; скорее, это вызовы численного метода, который требует больших вычислительных ресурсов (отсюда и бинарный поиск; я пытаюсь уменьшить количество вызовов этого метода). Заголовки методов выглядят так:
double computeValue1 (Thing thing, int parameter, int seed)
Этот метод всегда возвращает двойное значение между 0 и 1. Функция является монотонно возрастающей (более высокие значения seed
всегда возвращают более высокий результат; таким образом, бинарный поиск оправдан). Я использую поиск, чтобы найти значение seed
, которое возвращает значение, наиболее близкое к 0,5 (при фиксированных Thing
и parameter
).
Так что в идеале в Java должен быть какой-то абстрактный библиотечный метод, который я мог бы использовать для выполнения этого поиска, вместо того, чтобы записывать детали в свой код. Более того, на самом деле у меня есть это 3 разных раза для 3 разных методов оценки (скажем, computeValue1
, computeValue2
, а затем в третий раз, когда я выполняю тот же поиск по parameter
, сохраняя фиксированными Thing
и seed
).
Что было бы элегантным способом абстрагироваться от бинарного поиска, чтобы я не поддерживал 3 отдельных метода поиска (по одному вокруг каждого из 3 методов вычисления), которые в основном делают одно и то же?
double <T> computeValue(T thing, int parameter, int seed, Function<Thing, Double> expensiveFunction)
- person marstran   schedule 04.02.2016