二部
一つ、二つの点
モノトーンで解決策を見つけるための二分法は、設定や機能、それぞれを左右の部分に分け、ソリューションのどの部分を決定し、あなたがターゲット要素を見つけるまで、上限と下限を調整するよう命じ、各半分が半分の後にあきらめますスペース、高効率を探します
例えば、実区間[L、R]の連続関数f(x)、シーク[L、R] f(x)がゼロJ.で増加 [L、R]にJ(X)と呼ば満足のみならあればゼロです。
任意L≤x<J、F(X)<0
J <x≤R、F(X)>のいずれか0
F(J)= 0
二分法は、絶えず範囲の中間点を解決するための状況の下に配置されるターゲット要素の範囲を決定するので、半減溶液の範囲を入れて、二分割された間隔を解決すると考えられています
中点半ば=(L + R)であり、現在設定された間隔[L、R]、について解く/ 2が
もしF(M)<0、次いでJ∈[M、R]。
もしF(M)> 0、次いでJ∈[L、M]。
もしF(M)= 0、次にJ = M
明らかに、二分法アルゴリズムの複雑さはO(複雑単一決意×2進数)であります
第二に、書き込みの半分
進整数1ドメイン
[]コードの実装
INT Erfen(int型 L、INT R&LT) { int型の L = 1、R&LT = N-、ANS; 一方、(L <= R&LT) { int型 / MID =(L + R&LT)を2 ; // (RLである)INT MID = Lの+を/ 2; IF(チェック(MID)) // 、答えを注意十分場合、狭い { ANS = MID; L = MID + 1 ; } 他の R&LT半ば= 1 ; } 戻りANSを; }
2.実数ドメインの上半分
[]コードの実装
INT Erfen(ダブル L、ダブルR) { ダブル EPS = 0.001。// 根据题目 一方(ファブ(RL)> EPS) { ダブルミッド=(L + R)/ 2.0 。 もし(チェック(MID))、R = ミッド; 他リットル= ミッド; } 戻りL。 }
注意:EPS時々、話題に応じて小さすぎる設定、無限ループに陥ります
第三に、二分法の一般的なモデル
1.バイナリ答え
最小最大値(最小値または最大値)、これらの二値問題解決のほとんどは、多くの場合、二分法の選択である問題が、それはそのような答えをテストするように、他の貪欲アルゴリズム、DPとともに、回答を求める、ある合理的であり、最適化されますEntscheidungsproblemに問題があります。例えば、系列長Nがあるすべてのサブ方法の各セグメントと、最小数の最大値を選択し、M個の連続したセグメントの最大に分割されています
[例] 1436:セグメントIIの列数
2.バイナリ検索
分界点を解決するためには、順序付けられたシーケンスにランク数xを求めているようにブール式、単調あり
代わりに、第三の3
倍、単一のピークがいくつかの機能のために、我々は極値関数の導関数を解決する方法を二分法を使用することができ、時間ドメインは、典型的には直接丸いDX 1とすることができる。この場合を解決することがより便利整数の関数として定義されています
第四に、典型的な例
1433:[1]例怒っている牛
三分ののルールが凸極値機能の問題を解決するに適用され、二次関数は、典型的な単一のピーク機能です。
それが答えの範囲を狭めるために続けるようTrichotomyと二分法は、位置解決します。Trichotomy単峰性関数を単調関数の原理を利用して、利用されている二分低減部
(M1は、現在設定された間隔[L、R]について解くことM = 1 +(L + R)/ 3、M = R-(L + R)/ 3ので、我々はこれら二つの点関数fの値を計算します)、その後、F(M2)私たちは二つの点、より良い機能値の良い点と呼ばれているだろう、貧しい関数値を、その点はデッドピクセルと呼ばれています。私たちは、上に行くと結果の近似解まで溶液間隔を減らすことができます
二つの点と同様に、我々は、値を終了するために記載回3分の1の数、又はR-1を指定することができ
例えば最大凸単峰性関数、第三の基準プログラムを注文します。
ダブル L = 0、R = 1E9。 一方、(RL> = 1E- 3 ) { ダブル M1 = L +(RL)/ 3 。 二重 M2 = R-(RL)/ 3 。 もし(F(M1)<F(M2))L = M1。 他の R = 平方メートル。 }
注:単峰性の関数を強調厳格な単調性を