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
    参考

  • 相关阅读:
    MySQL之force index和ignore index
    Linux中CPU性能分析工具perf简单使用(亲测可用)
    Linux之SeLinux
    Docker基础
    yum常用命令
    MySQL总结
    MySQL字符集详解
    MySQL5.6的4个自带库详解
    Python操作MySQL
    MySQL索引原理
  • 原文地址:https://www.cnblogs.com/limil/p/13260403.html
Copyright © 2011-2022 走看看