zoukankan      html  css  js  c++  java
  • 三分搜索

    介绍

    非常快地找到凸函数的极值点。

    实现&原理

    与二分法类似,三分算法先把区间分为长度相等的三段,那么l与r之间就有两个点,分别是:ll=l+(r-l)/3=(2l+r)/3和
    rr=r-(r-l)/3=(l+2r)/3。
    也可以二分再二分,即mid = (l+r) / 2,mmid = (mid + l) / 2。

    如果ll比rr更靠近最值,我们就舍弃右区间,否则我们舍弃左区间。
    时间复杂度O(logn)

    算法的正确性:

    1. ll与rr在最值的同一侧。由于凸性函数在最大值(最小值)任意一侧都具有单调性,因此,ll与rr中,更大
      (小)的那个数自然更为靠近最值。此时,我们远离最值的那个区间不可能包含最值,因此可以舍弃。
    2. ll与rr在最值的两侧。由于最值在中间的一个区间,因此我们舍弃任意一个区间后,并不会影响到最值。

    总的来说,只需考虑两个点的在极值点的同一侧的情况就可以了。

    典型题目:HDU4355,HDU2438,POJ3301
    参考

  • 相关阅读:
    python面向对象编程(1)——基本概念,术语,self,构造器
    django-中间件
    集合
    深入字典
    django使用小贴士
    自动化发送微信
    django-模板继承
    SMTP发送邮件
    git的使用
    django-csrf攻击
  • 原文地址:https://www.cnblogs.com/limil/p/13260403.html
Copyright © 2011-2022 走看看