アルゴリズムデ・オンラボレポート

実験のトピック:

[0:N-1]が設定され、良好な配列を有し、書き換えアレイの行であるバイナリサーチアルゴリズムを xが配列されていないとき、xの最大の要素の位置を返すようにすることは、私未満、位置の最小のJ Xの要素よりも大きいです。配列の要素を探し、iとjと同じ、両方の配列の位置x。

入力フォーマット:

2行を入力します。

最初の行は、n及びxの値であり、2行目は、それぞれ整数との間のスペースで区切られたn個の異なる整数、非降順です。

出力フォーマット:

添字jは最小X最大出力要素iはxの最小の要素よりも大きい最大屈折率よりも小さいです。配列の要素を検索する場合、i、jは同じ。ヒント:Xは、出力がフル値未満の場合:-1 0、xはすべての値よりも大きい場合、出力:N-1の値は、n個

問題の説明:

アレイ内のx位置を見つけるためにバイナリサーチアルゴリズムを書き換える、または(xは配列には存在しない)場合の間です。

アルゴリズムの説明:

他の特別な条件を排除するもので、アレイが2つのセクションに分割され、検索[i]は<X <[j]をアレイ周期は、これまでに見つかりました。

アルゴリズム分析の時間と空間の複雑さ

 

最初のn個の要素、第2のn / 2の要素なので、N / 2 ^ k個の要素のk番目に比べあります。
時間計算量は、一般に、最悪の結果をとり、kは時間複雑性の尺度としてである
ので、N / 2 ^ k = 1、k = log2nを得るために、すなわち最悪の結果、最後の残りの1つの要素、時間計算量
O(LOGN)の程度。

 

         各再帰補助空間に必要な再帰の深さの数*
         空間の複雑さがあるように:O(N) 

 

書式#include <iostreamの>

名前空間stdを使用。
([]、int型のx、int型N INT)INT検索{
    ; 0 =左のint 右int型= N-1;
    int型のTF = 0;
    int型I、J。
    一方(左<=右){
        INT中間=(左+右)/ 2。
        もし(x == A [中央])
        {
           coutの<<真ん中<<」「<<ミドル<<てendl;
           TF = 1。
           ブレーク;
        }
        もし(x == A [0]){
            裁判所未満<< "0" <<てendl;
            TF = 1。
            ブレーク;
        }
        もし(x == A [N-1])
        {
            COUT << N-1 <<」「<< N-1 << ENDL。
            TF = 1。
            ブレーク;
        }
        IF(X> [中間] && X <[N-1]){
        
           IF(X <中間+ 1]){
             coutの<<真ん中<<」「<<ミドル+ 1;
             TF = 1。
             ブレーク;}
           }
           左=中央+ 1。
        IF(X <[中間] && X> [0]){
           IF(X> [中間-1]){
             coutの<<ミドル-1 <<」「<<真ん中。
             TF = 1。
             ブレーク;
                }
           右=中間-1;}
    }
    IF(TF == 0 && X <[0])COUT << " - 1 0" << ENDL。
    IF(TF == 0 && X> [N-1])COUT << N-1 <<」「<< N << ENDL。
}
{int型のmain()
    int型N、I、X;
    [1000] int型。
    CIN >> N >> X。
    用(i = 0; iがn <; iは++)
       CIN >> [i]は、
    検索(X、N)
    0を返します。
}
感情や経験:
バイナリ検索アルゴリズムは、大の可能性を書き換えたが、その途中-1または+1に注意することが最小限で最大の、左右の各リセット配列を検討します。

おすすめ

転載: www.cnblogs.com/xljgdufs/p/11567550.html