データ構造初心者、アルゴリズムおよびリニアフォーム

A.マインド図。

II。重要な概念の注意事項

1、アルゴリズム

  1. アルゴリズムのメリットの評価:時間複雑さ(T(N)= O((n))は、nは問題サイズf)および空間の複雑さは、(追加の記憶スペースのサイズを変更する問題で占有しました)
  2. スタックの時間複雑度を計算する:1分2の特別な場合と、一般的なコンピューティングモジュールは、N個に分割され

図2に示すように、通常のリニア形

  1. 頭と尾補間補間

    注:第1の補間テーブル反対を確立するための入力要素の順番の要素の順序は、(逆リンクされたリストを使用することができます)

    s->next=L->next;
    L->next=s;
    
    r->next=s;
    r=s;
    
  2. 二重リンクリストの挿入のために

    1.なお、前駆体及び後部駆動切断

  3. (L1、L2、L3のリストで)順序付け、マージリスト

    1. L1とL2点を比較して素子L1、L2に電流ノードポインタを確立し、コピーノードL3。もしL1又はL2へのポインタ移動は、空である誰でも残りL3に次の点です現在のポインタのリンクリスト

3、キュースタック

  1. スタック:LIFOスタックの最上位での挿入や削除のスタック、スタックの挿入がいっぱいであるかどうかを判断するためには、空のスタックかどうかを判断するには、削除

  2. キュー:FIFOキューは空気かどうかを判断するために、完全なチームかどうかを判断するために挿入されたキューの先頭を、削除チームを削除し、尾部に挿入されています

  3. 循環キュー:空軍:

    r->rear==r->front;
    

    全チーム:

    (r->rear+1)%r->maxsize==r->front;
    

4、文字列

  1. 操作対象の文字列は、全体の文字列です。

  2. 各要素は文字です

  3. 文字列パターンマッチング:BFアルゴリズム、KMPアルゴリズム(次関数、NEXTVAL関数)

    次関数の計算のために1:次の先頭からJ、[1] = 0、[J] = K、K-1 =長さ(同じ長さの最大プレフィックスおよびポストフィックス文字列)次に、そうでなければ、次の[J ] = 1;場合次0からjは、[0] = - 1、次の[1] = 0、次の[J] = K、K =長さ(文字列の接頭辞と接尾辞の最大長さに等しいです)

    ; - 1、jについて0から、NEXTVAL [J] = jが1から始まる、NEXTVAL [1] = 0:計算NEXTVAL関数2.

図5に示すように、一般化されたテーブル・アレイ

  1. 先頭アドレス+(iは:AMNアドレスマトリクスは、行i及び列jの要素の行の優先度に位置している+ jはM)、K(Kは、単一の要素によって占められる記憶空間です)

    優先列:第1のアドレス+(J N-I +)、K(K・ストレージ・スペースは、単一の要素によって占められます)

第三に、困難な問題と解決策

  1. 難しい問題:プログラミングと理解次NEXTVAL配列と配列のための(溶液:ケーススタディと描画)

    void get_next(string t, int len, int next[])
    {
        int i = 0, j = 0;//j用来控制前缀串,i用来控制后缀串
        next[0] = -1;
        while (i < len - 1) {//注意此时合法的最大下标为len-1
            if (j = -1 || t[i] == t[j]) {
                i++;
                j++;
                next[i]=j;//对相等的最长的前缀串和后缀串长度+1
            }
            else
            {
                j = next[j];//对j的回溯
            }
        }
    }
    
    J 0 1 2 3 4
    T [J] A C A C B
    次の[J] -1 0 0 1 2
    1. 设次の[J] = K

    2. [0] = - 1.I = 1、J = 0、i、jは、I ++、J ++、次の[I] = J、即ち、K = K + 1等しい場合、逆次に[J]にJバック。jがあれば私は+ 1、jの正規バック位置は、最も長い接頭文字列の検索に対応する接頭文字列の開始に位置する後方を開始接尾文字列に等しい= -1、iが移動されます先頭位置0に、比較は、この時点で現在の接頭辞と接尾辞の文字列と等しい、我々が取得する場合、I ++、J ++、次の[I] = J、即ち、K = K + 1;逆次に[J]にJバック

void get_nextval(string t, int len, int next[])
{
    int i = 0, j = 0;
    next[0] = -1;
    while (i < len - 1) {
        if (j = -1 || t[i] == t[j]) {
            i++;
            j++;
            if (t[i] != t[j]) {
                nextval[i] = j;
            }
            else {
                nextval[i] = nextval[j];//与next[j]求解中不同的部分
            }

        }
        else
        {
            j = nextval[j];
        }
    }
}
J 0 1 2 3
T [J] A A A B
次の[J] -1 0 1 2
NEXTVAL [J] -1 -1 -1 2
  1. NEXTVAL [J] = - 1、私たちの主な文字列がSである場合、文字列:[3] aaaaaab、インデックスは、Iによって表される場合、S [2]、T [2]、I ++、J ++の比は、もしSおよびNEXTVAL [i]を=のnextval [j]があれば、私たちの不一致文字列照合文字列とメインモード以来、私たちはNEXTVAL J [J]に戻って行かなければならないが、S [i]は、と比較したとき、T [3]は同じです比較を減らすS [3]、T [2]比較が、Tで[1]、T [0]比較、直接S [3]とt [0]次の配列であれば、必要、一例として、リアパターン文字列に等しい要素の隣接関係に対応するバックトラック。タグのj個

おすすめ

転載: www.cnblogs.com/tylk/p/12579229.html