Вот подход, который использует O (log n) проходов стоимости n каждый.
Каждый проход начинается с начальной точки, которая делит треугольник на эти подтреугольники. Если у каждого есть n очков, мы закончили. Если нет, рассмотрим подтреугольник, который находится дальше всего от желаемого n. Предположим, что их слишком много, только сейчас. Дисбаланс сводится к нулю, поэтому, по крайней мере, один из двух других подтреугольников имеет слишком мало точек. Третий подтреугольник также имеет слишком мало или имеет ровно n точек - или исходный подтреугольник не будет иметь наибольшего расхождения.
Возьмите самый несбалансированный подтреугольник и рассмотрите возможность перемещения центральной точки вдоль линии, ведущей от него. При этом дисбаланс самой несбалансированной точки будет уменьшаться. Для каждой точки в треугольнике вы можете работать, когда эта точка переходит в или из наиболее несбалансированного подтреугольника, когда вы перемещаете центральную точку. Таким образом, вы можете определить время n, чтобы переместить центральную точку, чтобы дать наиболее несбалансированному треугольнику любой желаемый счет.
Когда вы перемещаете центральную точку, вы можете выбрать, будут ли точки перемещаться в нашем из самого несбалансированного подтреугольника, но вы не можете выбрать, к какому из двух других подтреугольников они пойдут, или из - но вы можете легко предсказать, какие из по какой стороне линии, по которой вы перемещаете центральную точку, они живут, поэтому вы можете переместить центральную точку вдоль этой линии, чтобы получить наименьшее максимальное расхождение после перемещения. В худшем случае все перемещенные точки входят или выходят из подтреугольника, который был точно сбалансирован. Однако, если несбалансированный подтреугольник имеет n + k точек, перемещая k / 2 из них, вы можете в худшем случае перейти к случаю, когда он и ранее сбалансированный подтреугольник вышли на k / 2. Третий подтреугольник может все еще быть неуравновешенным на величину до k в другом направлении, но в этом случае второй проход уменьшит максимальный дисбаланс до значения ниже k / 2.
Следовательно, в случае большого дисбаланса, мы можем уменьшить его на худой конец постоянным коэффициентом за два прохода вышеупомянутого алгоритма, так что в O (log n) проходах дисбаланс будет достаточно мал, чтобы мы оказались в особых случаях где мы беспокоимся о превышении не более одной точки. Здесь я собираюсь предположить, что число таких особых случаев в программе практически перечисляемо, а стоимость составляет небольшое постоянное добавление.