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

Algorithm 如何将三元搜索应用于SPOJ挑战-KOPC12A,algorithm,ternary-search,Algorithm,Ternary Search,我试图解决SPOJ中的KOPC12A问题 问题链接: 问题简介: 给定n栋建筑,每栋建筑的高度(砖块数量)不同 对于每栋需要增加或移除砖块的建筑,请查找 使所有建筑物具有相同高度的最低成本 在尝试解决这个问题后,尽管徒劳无功,但我遇到了一个解决方案,它使用了三元搜索,根据输入的高度对其进行排序 我无法理解均衡建筑物高度的成本是如何变成单峰的(因为三元搜索只能应用于单峰函数) 这让我很为难,我不能再往前走了 对此,任何见解都将不胜感激 感谢-为了扩展on的评论,我们可以将函数f的(强)单峰定义为条

我试图解决SPOJ中的KOPC12A问题

问题链接:

问题简介:

给定n栋建筑,每栋建筑的高度(砖块数量)不同 对于每栋需要增加或移除砖块的建筑,请查找 使所有建筑物具有相同高度的最低成本

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

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

这让我很为难,我不能再往前走了

对此,任何见解都将不胜感激

感谢-

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

for all x < y < z, f(y) < max(f(x), f(z))
                          z - y        y - x
for all x < y < z, f(y) < ----- f(x) + ----- f(z).
                          z - x        z - x
假设建筑物的高度为
h1,…,hn
,单位改建成本为
c1,…,cn
。建造所有建筑物高度的成本是

sum i in {1, ..., n} of ci |h' - hi|.
下面是一系列命题,每个命题都有一个相当简单的证明,通过归纳得出结论,
f
是单峰的

  • 函数
    g
    其中
    g(x)=|x |
    为凸函数
  • 对于所有常数
    h
    ,对于所有凸函数
    g1
    ,函数
    g2
    ,其中
    g2(x)=g1(x-h)
    为凸函数
  • 对于所有常数
    c>0
    ,对于所有凸函数
    g1
    ,函数
    g2
    ,其中
    g2(x)=cg1(x)
    为凸函数
  • 对于所有凸函数
    g1
    g2
    ,函数
    g3
    ,其中
    g3(x)=g1(x)+g2(x)
    为凸函数
  • 所有凸函数都是单峰函数

  • 说服自己这是一个凸问题,如果你绘制一个成本与高度的曲线图,它将是一个抛物线类型的曲线图(不完全是锐角和相同的值等,因为它是整数点)。因此,你可以应用三元搜索来找到全局极小值(一个很好的解释:)+1,吸引我来到这个论坛的一件事,经验丰富的用户回答问题的方式。