データ構造
-
時間計算量 (ここではすべて非再帰的です)
- 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(log2n)<O(n)<O(nlog2n)<O(n²)<O(n^3)
-
空間の複雑さ (非再帰)
- 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 まで連続することができます。
- 完全な二分木: 数値は 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) 先行テーブル
- 深さ優先トラバーサル (DFS) スタックと幅優先検索 (BFS) キュー
- トポロジカルソート
- AOV ネットワーク (有向非巡回グラフ)
- 頂点 Vi から頂点 Vj への有向パスがあり、頂点 Vi は Vj の前身です。
- <Vi,Vj> この場合、Vi は Vj の直接の先行者であり、Vj は Vi の直接の後継者です。
- Vi から Vj へのパスは存在する可能性がありますが、Vj から Vi へのパスがあってはなりません
- AOV ネットワークをトポロジカルに並べ替える
- z はネット内で次数 0 の頂点を選択し、それを出力します
- 頂点とその頂点に関連付けられた円弧をネットから削除します
- ネットワーク内に次数 0 の頂点がなくなるまで、前の 2 つの手順を繰り返します。
- AOV ネットワーク (有向非巡回グラフ)
-
見上げる
- 同じタイプのデータ要素を表すコレクションを検索します。
- キーはデータ要素のデータ項目の値で、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 が小さいほど、競合の可能性は小さくなり、その逆も同様です。
- 依存要素: ハッシュ関数、衝突の処理方法、ハッシュ テーブルのフィル ファクター a
- ヒープ
- 大きなトップパイル ki>=k2i および k2i+1
- 小さなトップヒープ ki<=k2i および k2i+1
- バイナリツリーのシーケンシャルストレージに従って絵を描き、大きな(小さな)トップヒープを構築する方法を学ぶことができます
-
分類する
-
該当するキーワードを入れてください。ソート後、増加(減少)関係が満たされます
-
内部ソート: ソート記録はすべてメモリに保存されます。
-
外部ソート
-
カウントソートは、シーケンス内に 0 ~ 9 のみを含む数値に適しており、各数値の数をカウントします。
-
直接挿入ソートはホーミング不可 単純選択ソートはホーミング可能
-
ヒープソートはホーミング可能 クイックソート(分割統治アルゴリズム)はホーミング可能、マージ(分割統治)はホーミング不可
-