Предположит, мы имеем два положительных целочисленные переменные:Оптимизировать двухмерную поиск
x = [1, W]
y = [1, H]
и функция:
F(x, y)
Задача состоит в том, чтобы найти х и у, что дает максимум выходное значение функции (в пределах диапазона).
Часть функции F это, как известно, в область:
F(x, y) = (x * y) * T(x, y)
Теперь другая функция Т (х, у) имеет некоторые интересные свойства:
T(x + c, y) <= T(x, y)
T(x, y + c) <= T(x, y)
Где c - любое положительное целое число больше нуля (косвенное это составляет T (x + c, y + d) true, где d имеет те же ограничения, что и c).
Нахождение рабочего раствора легко путем тестирования всех возможных х/Y комбинации, но сложность O (W * H).
Есть ли способ использовать описанные выше свойства для уменьшения сложности?
Что-то вроде бинарной эквивалентности поиска для 2D или такого?
Прогулка по границе в некотором роде?
У любого из вас яркие умы есть интересные идеи или указатели?
Пример вывода Т (х, у):
9 7 7 4 2
8 7 6 4 2
8 7 5 4 1
6 5 3 3 0
3 3 2 1 0
В этом примере х = 4 и у = 3 дает наибольшее значение: 4 * 3 * T (4, 3) = 4 * 3 * 4 = .
Хорошая домашняя работа! –
Это хорошее задание. Ни один из обычных не учит C++, не используя C++. – user4581301
Функция не монотонна, поэтому вы не можете использовать двоичный поиск. – Jarod42