(アルゴリズム) 二分法を理解するための 3 つの例

二分法と従来の並べ替えの違いと利点を簡単に説明する

通常、順序付けられた配列の最大値を探したり、特定の数を探したりします. 最も一般的な方法は、左から右に比較する、時間計算量が O(N) である、二分法を使用するなど、トラバースすることです. 、その後、時間計算量はO(logN、log(2、Nは通常、ここではlogNと省略されます))に制御できます。

予備的な理解を得るための最初の簡単な例

  • 順序付き配列で指定された数値を検索します。

(1) 従来の方法、片側を横切る O(N)

(2) 二分法を使用する: 配列全体の中央の位置を見つけ、それを特定の数値と比較し、中央の数値が目的の数値よりも小さい場合は、その数値が目的の数値にあると判断できます。配列全体の右側、次に右半分 配列を 2 つに分割し、真ん中の数字を見つけて比較し、数字が見つかるまで分割を続けます。

残りの半分を毎回比較するので、時間計算量は O(logN)

2番目のケース

  • 順序付き配列で、特定の数値以上 (<=) の左端の位置を見つけます。

 

 たとえば、上記の順序付けられた配列では、目標は 2 以下の左端の数を見つけることです。まずそれを 2 つに分割し、ターゲット数に等しい中央​​の 2 を見つけます (ただし、左半分を選択 配列を 2 つに分割し、ターゲット番号よりも小さい 1 を取得します。これは、ターゲット番号が右側にあることを示し、それを左の境界として取り、前の 2を右の境界として、2 に等しい 2 に分割し続け、1 の左側に 1 しかないことを見つけます。探しているターゲット番号を取得します。(ps: 前の例との重要な違いです。結果を得るには、最後まで二分する必要があります)

3番目のケース

(二分法は順序付けられた配列で使用されるだけでなく、順序付けられていない配列にも適用されます)

  • 順序付けられていない配列では、局所的な最小数を見つける必要があります。(局所的最小値とは、[312] のようにその 2 辺よりも小さい数値を意味し、配列の "1" が局所的最小値で、両端の数値 [132] の "1" と "2" が配列の "1" と "2" です)配列は両方とも極小です)

問題が発生した場合、順序付けされているかどうかに関係なく、まずその特性を確認する必要があります。

最初に両端の数値が極小値であるかどうかを確認します。そうであれば、直接戻ることができます。そうでない場合は、2 つに分割し、中央の数値を見つけて極小値であるかどうかを確認します。そうでない場合は、両側に数字がある場合は、左か右かに関係なく、局所的な最小値が存在する必要があります。下の図を参照してください。

 それらは側面に下降傾向がある必要があり、両端が下降している場合は、中央に極小値が存在する必要があります。

おすすめ

転載: blog.csdn.net/qq_48860282/article/details/123719787