Contents
二分探索
関連問題
- 食塩水 (ABC034)
- Enclose All (ABC151)
座標問題における二分探索の基本、及び浮動小数点演算時の注意点を理解するのに良い問題です。 - Yakiniku Optimization Problem (ABC157)
Enclose Allを1段階難しくした問題です。
三分探索
関数の極値を探索するアルゴリズム。
極値が1つしかない関数に適用した場合、最大値または最小値が求まる。(e.g. 二次関数)
微分してf'(x)=0となるxを二分探索しても答えは求まる。
しかし、三分探索を用いた方が微分の手間が省け、計算ミスやエンバグの可能性を減らすことができる。
(参考) 三分探索 – 忘れても大丈夫
例題
ムーアの法則
#include <bits/stdc++.h> using namespace std; using ld = long double; ld f(ld p, ld x) { return x + p / pow((ld)2, x / 1.5); } signed main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); ld p; cin >> p; ld l = 0, r = 1e18; while (r - l > 1e-12) { ld x1 = (l * 2 + r) / 3; ld x2 = (l + r * 2) / 3; if (f(p, x1) < f(p, x2)) { r = x2; } else { l = x1; } } cout << f(p, (l + r) / 2) << endl; return 0; }