zoukankan      html  css  js  c++  java
  • 二分与三分

    Stop learning useless algorithms, go and solve some problems, learn how to use binary search.

    并不是对这两个算法的详细介绍 只是随便记点相关的东西


    STL 自带的二分查找
    lower_bound 返回首个不小于指定值的元素
    upper_bound 返回首个大于指定值的元素
    两者都要求元素按升序排列

    除了数组,也可以对内部元素有序的 STL 容器使用
    但不要像我一样试图在 priority_queue 之类的东西上跑二分(


    我们知道三分法可以找凸(凹)函数的最值
    然后两个凸函数取 min 还是凸函数(凹函数则取 max )
    其实是数学性质 按单调区间分类讨论即可证明
    做题时可能会遇到吧

    另外两个凸函数相加并不一定是凸函数
    CSP-S 2021 T1 就是个典型反例(虽然数据过水导致三分法可以 95pts


    三分法对求值的利用效率并不高
    可以采用黄金分割对其进行优化

    比如下面这个区间,设其长度 \(R-L=1\)

    如果查找范围缩小至 \([Lmid,R]\) ,我们希望 \(Rmid\) 恰好成为新的 \(Lmid\) ,这样就可以减少一次求值

    显然可以列出方程: \(\dfrac k{1-k}=\dfrac{1-2k}k\)

    解得 \(k_1=\dfrac{3-\sqrt5}2,k_2=\dfrac{3+\sqrt5}2\) (舍去 \(k_2\)
    所以令 \(Lmid=\dfrac{3-\sqrt5}2,Rmid=\dfrac{\sqrt5-1}2\) 即可,也就是取当前区间的两个黄金分割点

    一些卡步数的交互题可能会用这个技巧
    或许也能用来卡常(没写过 不知道是否有效果)

  • 相关阅读:
    小心服务器内存居高不下的元凶WebAPI服务
    注册登录过程点滴(二):使用MVC Remote验证的注意点
    .net framework 4.5为啥在IIS中找不到了
    windows平台下载Android源码
    unix及linux文件锁
    分布式软件系统
    C++ base
    linux目录结构
    linux中pkill的简单用法
    Linux中Kill进程的N种方法
  • 原文地址:https://www.cnblogs.com/REKonib/p/15685276.html
Copyright © 2011-2022 走看看