ソフトウェアデザイナー (データ構造)

データ構造

  • 時間計算量 (ここではすべて非再帰的です)

    • O(1)<O(log2n)<O(n)<O(nlog2n)<O(n²)<O(n^3)
      • 加算: 加算し、最も高い項目を保持し、1 4n^3+2n²+4n+2 =n^3 に変換します。
      • 乗算: 乗算、1 までの因数分解
      • ルール: 括弧が最初、乗算と加算
      • log2n はループ x=x*2 の間は一般的です
      • n ループ x++ の共通
    • 時間計算量 (再帰) = 再帰の数 * 各再帰の時間計算量 (同様の計算量)
  • 空間の複雑さ (非再帰)

    • O(1) O(n) O(n²) (非再帰的) 再帰的: nlog2n log2n
    • 定義された空間を見てください 1 a 空間 n 1 次元配列 n² 2 次元配列
  • プログレッシブシンボル
    画像の説明を追加してください

  • 再帰的なメインメソッド
    画像の説明を追加してください

    • 実行時間が短縮されると、時間の複雑さが軽減されます
  • 線状構造

    • リニアテーブル
      • シーケンシャル ストレージとチェーン ストレージを使用した、最も単純かつ基本的で最も一般的に使用される線形構造
      • 定義: 線形リストは、(n>=0) 個の要素の有限シーケンスです。
      • 空でない線形リスト。最初の要素を除き、他のすべての要素には直接の先行要素が 1 つだけあります。最後の要素を除き、他のすべての要素には直接の後続要素が 1 つだけあります。
      • 1 つしかない場合、それは最初であり最後でもあり、先行者と後続者は存在しません。
      • 順次ストレージ
        • 連続したアドレスを持つ記憶ユニットのグループは、線形テーブルのデータ要素に順番に格納されます。データのみ
        • 利点: テーブル内の要素にランダムにアクセスして時間計算量 O(1) を見つけることができます。
        • 欠点: 挿入と削除には要素を移動する必要があります
          • 挿入には、n/2 時間の複雑さ O(n) の平均移動が必要です
          • 削除には n-1/2 移動する必要があります
      • チェーンストレージ
        • データ要素は、ポインタでリンクされたノードに格納されます。データ フィールド|ポインタ フィールド
        • 先頭 (先頭ではない) 単一リンク リストの挿入、削除、検索 平均複雑さ O(n) 平均移動 0
  • スタック

    • データの保存と取得のためにその一端にのみアクセスできる線形データ構造
    • 特徴: 先入れ後出し、挿入および削除の一方の端はスタックの最上部になり、もう一方の端はスタックの最下部になります。データ要素のない空のスタック
    • 関数や手続きの再帰呼び出しやリターン処理を実装する場合
    • スタックをポップおよびプッシュするときにトラバースする必要はありません
    • 先入れ先出し線形テーブルでは、テーブルの一端 (後端) でのみ要素を挿入でき、テーブルのもう一方の端 (前端) で要素が削除されます。
    • 文字だけからなる有限数列は線形テーブルです。
    • スペースも長さとしてカウントされ、文字が含まれていない場合は空の文字列 (長さはゼロ) になります。
    • 部分文字列: 'abc' ab bc ac (カウントされません) 文字列内の任意の長さの連続した文字で構成されます
    • 文字列パターンマッチング
      • n メイン文字列: bbcabem モード文字列: abe
      • 簡易パターンマッチング パターン文字列の1桁目とメイン文字列の1桁目とを比較 一致する場合は2桁目と比較 一致しない場合はパターン文字列の1桁目とメイン文字列の2桁目と一致同様に、マッチングにより、 の開始位置にあるメイン文字列が返されます。失敗した場合は、1 の先頭で 0 を返し、0 の先頭で -1 を返します。
      • 時間計算量 最良 O(m) または O(1) 最悪 O(m*n) または (n-m+1)m 平均 O(n+m)
    • KMP
      • プレフィックス: b bb bbc bbca bbcab (上記のメイン文字列 n を例にします)
      • 接尾辞: e be abe cab bcabe
      • i 番目の文字の次の値 = 1~i-1 文字列内の最も長い等しいプレフィックスとサフィックスの長さ + 1
        • 特殊なケース next[1]=0
        • ps: メイン文字列: ababa next 3 の 5 番目の次の値
        • 時間計算量 O(n+m)
  • 配列の最初のアドレス
    画像の説明を追加してください

  • マトリックス

    • n*n 行列には n² 個の要素が格納されます
    • 対称行列
      • Aij=Ajiなので、保存する際は主斜線+下三角領域のみを保存するだけで済みます。
      • i>=j の場合は 0 から順に格納 Aij=(i+1)i/2+j+1 j>=i の場合は Aji=Aij に従って解くだけ
    • 三重対角行列
      • つまり、対角線は 3 本のみで、その隣の三角形 (すべて 0) は必要なく、保存する必要もありません。
      • Aij=2i+j+1を0から1行ずつ格納
    • スパース行列
      • マトリックスは非常に大きく、保存される量はほとんどありません
      • 三元配列リストとクロスリンクリストは圧縮された保存方法です
    • 次数は子ノードの数であり、次数 0 のノードが葉ノードです。
    • 木の最大の層数は木の高さとして記録され、最大の次数は木の次数として記録されます。
    • 自然
      画像の説明を追加してください
  • 二分木

    • ノードの最大次数は 2 であり、ノードが 0 のツリーは再帰的プロパティを持つ空のツリーです。ノードのサブツリーは左のサブツリーと右のサブツリーに分割する必要があります。

    • 自然
      画像の説明を追加してください

      • 完全な二分木: 数値は 1 から n まで連続することができます。
        画像の説明を追加してください
    • 順次ストレージ

      • 連続したアドレス格納ユニットに格納されたバイナリ ツリー内のノードのグループ。ノードは線形シーケンスで配置されます。
      • 最悪の場合、深さが k でノードが k のみの場合、2 の k 乗 -1 個のストレージ ユニットが必要になります。
    • チェーンストレージ

      • バイナリ ツリー ノードにはデータ要素、左のサブツリーのルート、右のサブツリーのルート、および親が含まれるため、三値テーブルとバイナリ テーブルに格納できます。リンクされたリストの先頭はバイナリ ツリーのルート ノードを指します
      • バイナリ ツリー テーブルには n 個のノードに対して n+1 個のヌル ポインタ フィールドが存在します。
      • 三分木テーブルには n 個のノードに対して n+2 個のヌル ポインタ フィールドが存在します。
    • バイナリツリートラバーサルアルゴリズム

      • 事前注文トラバーサル (ルートの左と右)
      • インオーダートラバーサル(左ルート右)
      • 事後トラバーサル (左ルートと右ルート)
      • 階層横断(最初の層から i 番目の層まで、各層は左から右に横断)
      • 他のシーケンスを起動するには、順序どおりのトラバーサルが必要ですが、別のシーケンスを自由に追加できます。
    • バランスの取れた二分木

      • バイナリ ツリー内のノードの左右のサブツリーの高さの差の絶対値は 1 を超えません。
      • 完全な二分木である場合、バランスの取れた二分木である必要があり、葉ノードは次の条件を満たす必要があります。
    • 二分ソート木(二分探索木)

      • ルート ノードは、左側のサブツリーのすべてのノードより大きく、右側のノードのすべてのキー ノードより小さいです。左右のサブツリーもバイナリ ソート ツリーです。
      • インオーダートラバーサルで得られたシーケンスは順序付けされたシーケンスです
    • 最適二分木(ハフマン木)

      • 最短の加重パス長 (WPL) を持つツリーのクラス
      • 最適な二分木を構築する(一意ではないがwplは同じ)
        • 前から後ろに向かって最小の 2 つの重みを見つけます
        • 小さな左と大きな右の後ろに追加します
        • 重さは前から後ろまで同じです
      • 次数 0 と 2 のノードのみがあり、総数は 2n-1 です。
    • ハフマン符号化

      • 左ゼロ右一、数桁×数、貪欲な戦略
      • 圧縮率
        • (等長符号化-ハフマン符号化)/等長符号化
        • 等長コード x: 2 の x 乗 >= 数文字、つまり数桁
        • ハフマン符号化:数桁×出現頻度
    • スレッドバイナリツリー

      • ノードの先行および後続情報を任意の順序で保存するには、ヌル ポインタ フィールドを使用して保存します。
  • 写真

    • n 頂点の場合、n(n-1)/2 個の無向完全グラフと n(n-1) 個の有向完全グラフが存在します。
    • 有向次数と無向次数 = 辺の数 * 2
    • 無向接続グラフ: すべての頂点が接続されています
      • 少なくとも n-1 個のエッジがある
      • 最大n(n-1)/2
    • 有向強接続グラフ: すべての頂点を前後に接続可能
      • 少なくとも n 辺
      • 最大n(n-1)
    • パス: 通過したエッジの数、つまりエッジの数
    • 主要行列: 頂点間の関係。密なグラフの保存 (エッジが多い) に適しています。
      • 無向グラフは対称で、i 番目の行 (列) は頂点の次数 2e の非ゼロの数です。
      • 有向グラフは非対称で、行は出力次数、列は入力次数の非ゼロ数値です。
    • リンクされたリスト、疎なグラフの保存に適しています (エッジが少ない)
      • 地図ネットワーク地図
    • グラフ走査: 特定の頂点から開始し、すべての頂点を訪問し、1 回だけ訪問します
      • 深さ優先トラバーサル (DFS) スタックと幅優先検索 (BFS) キュー
        • シーケンスは一意ではありません
        • 有向グラフの平均複雑さ: O(n²) 先行行列、O(n+e) 先行テーブル
    • トポロジカルソート
      • AOV ネットワーク (有向非巡回グラフ)
        • 頂点 Vi から頂点 Vj への有向パスがあり、頂点 Vi は Vj の前身です。
        • <Vi,Vj> この場合、Vi は Vj の直接の先行者であり、Vj は Vi の直接の後継者です。
        • Vi から Vj へのパスは存在する可能性がありますが、Vj から Vi へのパスがあってはなりません
      • AOV ネットワークをトポロジカルに並べ替える
        • z はネット内で次数 0 の頂点を選択し、それを出力します
        • 頂点とその頂点に関連付けられた円弧をネットから削除します
        • ネットワーク内に次数 0 の頂点がなくなるまで、前の 2 つの手順を繰り返します。
  • 見上げる

    • 同じタイプのデータ要素を表すコレクションを検索します。
    • キーはデータ要素のデータ項目の値で、1 つは主キー、いくつかは副キーです。キーワードを指定します。見つかった場合は検索が成功したことを意味し、失敗した場合は null ポインタを意味します。
    • 静的検索: シーケンシャル、ハーフ、ブロック検索
    • 動的検索: バイナリソートツリー、バランスバイナリツリー、B_ツリー、ハッシュテーブル
    • 成功した順次検索の平均検索長: n+1/2
    • 半分(分割)検索(通常は切り捨て)
      • 順次ストレージが必要であり、順序付けられた配列が増分されます
      • 平均検索長: log2(n+1)-1
      • [log2n]+1以下切り捨て
    • ハッシュ表
      • キーワードを空間にマッピングするハッシュ関数。このプロセスはハッシュ テーブルまたはハッシュと呼ばれ、格納されるアドレスはハッシュ アドレスまたはハッシュ アドレスです。
      • 競合するのは、異なるキーワードが同じハッシュ関数値を持ち、同じアドレスがマッピングされており、この 2 つは同義語であることです。
      • 紛争は避けられないものであり、可能な限り回避することしかできません
      • ハッシュの構築方法:剰余を保持して取得することに加えて、H(key)=key%m=address
        • m は通常、n (n 個の要素) に近い、ただし n を超えない素数をとります。
        • 可能な限り、キーワードのすべてのコンポーネントを使用して機能させてください。
      • 競合を処理する
        • 公開演説法
          • Hi=(H(key)%di)%m(テーブル長) 直線検出方式
          • 二次検出方法: 1、-1、4、-4、9、-9...k²、-k²
        • チェーンアドレス方式: レコードの後に​​チェーンフィールドを追加し、同じハッシュ関数値を持つ次のレコードの格納アドレスを格納します。
      • ハッシュテーブルルックアップ
        • 依存要素: ハッシュ関数、衝突の処理方法、ハッシュ テーブルのフィル ファクター a
          • a = テーブルにロードされたレコードの数 / ハッシュ テーブルの長さ
          • a が小さいほど、競合の可能性は小さくなり、その逆も同様です。
    • ヒープ
      • 大きなトップパイル ki>=k2i および k2i+1
      • 小さなトップヒープ ki<=k2i および k2i+1
      • バイナリツリーのシーケンシャルストレージに従って絵を描き、大きな(小さな)トップヒープを構築する方法を学ぶことができます
  • 分類する

    • 該当するキーワードを入れてください。ソート後、増加(減少)関係が満たされます

    • 内部ソート: ソート記録はすべてメモリに保存されます。

    • 外部ソート
      画像の説明を追加してください

    • カウントソートは、シーケンス内に 0 ~ 9 のみを含む数値に適しており、各数値の数をカウントします。

    • 直接挿入ソートはホーミング不可 単純選択ソートはホーミング可能

    • ヒープソートはホーミング可能 クイックソート(分割統治アルゴリズム)はホーミング可能、マージ(分割統治)はホーミング不可

おすすめ

転載: blog.csdn.net/weixin_45113182/article/details/128679086