Упрощение
Сначала я хочу упростить задачу, для этого:
- Я переключаю оси и добавляю их друг к другу, это приводит к росту в 2 раза
- Я предполагаю, что это парабола на закрытом интервале
[a, b], where a = 0
, и для этого примера b = 3
Допустим, вам даны b
(вторая часть интервала) и w
(ширина сегмента), то вы можете найти общее количество сегментов на n=Floor[b/w]
.В этом случае существует тривиальный случай максимизации суммы Римана, и функция для получения i-й высоты сегмента: f(b-(b*i)/(n+1)))
.На самом деле это предположение, и я не уверен на 100%.
Пример Max'ed для 17
сегментов на закрытом интервале [0, 3]
для функции Sqrt[x]
реальные значения:
И сегмент высоты функция в этом случае Re[Sqrt[3-3*Range[1,17]/18]]
, и значения:
{Sqrt [17/6], 2 Sqrt [2/3], Sqrt [5/2], Sqrt [7/3], Sqrt [13/6], Sqrt [2], Sqrt [11/ 6], Sqrt [5/3], Sqrt [3/2], 2 / Sqrt [3], Sqrt [7/6], 1, Sqrt [5/6], Sqrt [2/3], 1 /Sqrt [2], 1 / Sqrt [3], 1 / Sqrt [6]}
{1.6832508230603465, 1.632993161855452, +1,5811388300841898, +1,5275252316519468, +1,4719601443879744, +1,4142135623730951, +1,35400640077266, +1,2909944487358056, +1,224744871391589, +1,1547005383792517, +1,0801234497346435, 1, +0,9128709291752769, +0,816496580927726, +0,7071067811865475, +0,5773502691896258, +0,4082482904638631}
То, что вы архивируются является Bin-Упаковка проблема , с частичнойy заполненная корзина.
Поиск b
Если b
неизвестно или наша задача - найти наименьшее возможное b
, при котором все палочки образуют начальную посадку сгустка.Тогда мы можем ограничить по крайней мере b
значениями:
- нижний предел: если сумма высот сегмента = сумма высот палки
- верхний предел: количество сегментов =количество палочек самая длинная палка <самая длинная высота сегмента </li>
Один из самых простых способов найти b
- это сделать разворот на (higher limit-lower limit)/2
найти, если решение существует.Затем он становится новым верхним или нижним пределом, и вы повторяете процесс, пока не будет достигнута требуемая точность.
Когда вы ищете b
, вам не нужен точный результат, но он неоптимален, и было бы намного быстрее, если бы вы использовали эффективный алгоритм для нахождения относительно близкой точки поворота к фактической b
.
Например:
- сортировать палку по длине: от наибольшей к наименьшей
- начинать «помещать наибольшие предметы» в первую ячейку - 1081 *