如何将三元搜索应用于SPOJ挑战 - KOPC12A

时间:2015-02-09 16:55:10

标签: algorithm ternary-search

我试图解决SPOJ中的 KOPC12A 问题。

问题链接:http://www.spoj.com/problems/KOPC12A/

问题简述:

  给定n个建筑物,每个不同高度(砖块数量),用   每个建筑物都有添加或移除砖块的成本,找到   使所有建筑物具有相同高度的最低成本。

尝试解决这个问题后,虽然徒劳无功,但在根据高度对输入进行排序后,我遇到了一个使用三元搜索的解决方案。

我无法理解均衡建筑物高度的成本如何变为单峰(因为三元搜索只能应用于单峰函数)

这让我很难过,而且我无法继续前进。

对此的任何见解都非常感谢。

谢谢 -

1 个答案:

答案 0 :(得分:1)

要扩展sasha的评论,我们可以将函数f的(强)单峰型定义为条件

for all x < y < z, f(y) < max(f(x), f(z))

和函数f的(强)凸性作为条件

                          z - y        y - x
for all x < y < z, f(y) < ----- f(x) + ----- f(z).
                          z - x        z - x

让建筑物的高度为h1, ..., hn,单位更改费用为c1, ..., cn。使所有建筑物高度为f(h')的费用h'

sum i in {1, ..., n} of ci |h' - hi|.

现在这里有一系列命题,每个命题都有一个相当简单的证明,通过归纳导致f是单峰的结论。

  1. g凸起的函数g(x) = |x|
  2. 对于所有常量h,对于所有凸函数g1,函数g2其中g2(x) = g1(x - h)是凸的。
  3. 对于所有常量c > 0,对于所有凸函数g1,函数g2其中g2(x) = c g1(x)是凸的。
  4. 对于所有凸函数g1g2,函数g3 g3(x) = g1(x) + g2(x)是凸的。
  5. 所有凸函数都是单峰的。