マインドマップギャラリー データ構造マインドマップ
これはデータ構造に関するマインド マップです。認識できる特定の媒体に保存されている物理的なシンボルは、数字や記号などです。 または他の人、
2023-12-02 14:20:48 に編集されましたデータ構造
導入
データ
意味
特定の媒体に保存されている認識可能な物理シンボルは、情報の伝達手段です。これらのシンボルは、数字、記号、その他の可能性があります。
構成するもの:
データ
データ要素
データ項目
データを構成する最小単位
データの基本単位
論理構造
データ要素間の関係
セット構造
同じコレクションに属している
線状構造
1対1
線形リスト、ヒープ、スタック
ツリー構造
1対多の
グラフ構造
多対多
収納構造
シーケンシャルストレージ構造
チェーンストレージ構造
インデックスの格納構造
ハッシュストレージ構造
アルゴリズム
意味
特定の問題を解決するための具体的な手順の説明、有限の命令シーケンス
5つの基本特性
有限性
限られた数のステップを実行した後に終了する必要がある
確実
実現可能性
あらゆる計算ステップを基本的な実行可能な操作ステップに分割でき、各ステップを限られた時間内で完了できます。
入力
アルゴリズムには 0 個以上の入力を含めることができます
出力
アルゴリズムには 1 つ以上の出力があります
設計の一般的なルール
正しさ
可読性
堅牢性
間違った入力に対して適切に対応する
高効率かつ少ないストレージ容量
複雑さ
線状構造
リニアテーブル
時間の複雑さ
値による数列テーブルの検索
n 1/2
シーケンステーブルの挿入
の上)
消去
の上)
スタック
最初のうちの最後の
意味
スタックの一番上
操作端末
スタックの一番下
固定端
シーケンススタック
top=-1 は空のスタックです
top=MAXSIZE-1 はフルスタックを意味します
スタックチェーンストレージ
単一リンクリストに似ています
列
先入先出
意味
行列の最後尾
挿入を許可する
チームリーダー
削除を許可する
順次キュー
循環キュー
未使用のスペースを残しておきます
文がいっぱいです
(リア 1)%MAXQUEUE==フロント
フロント==リア
短く言ってください
リンクされたリスト
ヘッドノードのない単一リンクリスト
ヘッド ノードに関係する操作には特別な処理が必要です
ヘッドノードを含む単一リンクリスト
ヘッドポインタが null ではありません
循環単一リンクリスト
最後のノードのポインタ フィールドには最初のノードのアドレスが格納され、リングを形成します。
オペレーション内の中止オペレーションは、それがヘッドポインタであるかどうかを決定します。
二重リンクリスト
先駆者と後継者がいる
配列
ストレージアドレスの計算
ベースアドレス (i 1)*n (j-1)
検索方法
順次検索
トラバース
平均検索長=n 1/2
インデックス検索
インデックスエントリの作成
キーワード項目
ブロック
ポインタ項目
平均検索長 = (n/s s)/2 1
n はテーブルの長さで、b 個のブロックに均等に分割され、各ブロックには s 個のレコードが含まれます。
ハッシュ検索
ハッシュ関数の構築方法
直接ハッシュ関数
キーワード自体、またはキーワードの一次関数をアドレスとして受け取ります。
アドレスセットのサイズ == キーワードセットのサイズ
数値解析ハッシュ関数
正方形の中心を見つけます
折り方
シフトフォールド
国境崩壊
残りを除いて
H=キーモッドp
素数を取る
乱数法
ハッシュ ルックアップのパフォーマンス分析
要素
ハッシュ関数
基本的には考慮しない
競合の処理方法
公開演説法
線形プローブとその後のハッシュ
1、2、3、。 。延期
(1 1/1-α )/2
2 番目の検出とハッシュ
正および負の数の二乗ラグ
ln(1-α)/α
擬似ランダムプローブとその後のハッシュ
擬似乱数シーケンス
ln(1-α)/α
焼き直し
ln(1-α)/α
チェーンアドレス方式
競合するレコードは同じ線形リンク リストに保存されます
1α/2
公共のオーバーフローエリア
別のベクトルをオーバーフロー テーブルとする
ハッシュテーブルフィルファクター
α=テーブルに埋められたレコード数/ハッシュテーブルの長さ
ハッシュ テーブルの平均検索長は、n の関数ではなく、α の関数です。
前提条件: データが均等にロードされていること
選別
安定したソート
キーワードデータの相対位置はソート前後で変化しません。
直接挿入する
2 つの部分に分かれており、左側は順序付けされており、右側は順序付けされていません。右側の最初の要素が左側の適切な位置に入ります。
O(スクエア)
安定させる
ヒルソート
一定の間隔に従って、d を同じグループに分割し、同じグループ内で挿入またはバイナリ ソートを使用します。
初めて完了しました。グループ化する間隔を短くしてから並べ替えます。
間隔が1になるまで
不安定な
バブルソート
n-i 1 個の項目を左から右に順番に比較します
安定させる
正方形/2
シンプルな選択
順序なしシーケンスから最大値を取得し、それを順序付きシーケンスの最後に追加します。
四角
安定させる
基数ソート
複数のキーワードの並べ替え
複数のキーワードの順序付け
優先度が高い
リトルエンディアン
クイックソート
シーケンスを 2 つの部分に分割します (相対的なサイズ関係を確認するために必要です)。
素早い並べ替えのために 2 つのサブシーケンスに再帰する
この時点で配列は完全に順序付けされているため、マージする必要はありません。
ンログン
しかし、シーケンス自体が順序付けられると、正方形に縮退します。
マージソート
並べ替えるシーケンスをいくつかのサブシーケンスに分割します。各サブシーケンスは順序付けられたシーケンスになります。次に、順序付けられたサブシーケンスを順序付けられたシーケンス全体にマージします。
ツリーは、n (n>=0) 個のノードの有限セットです。 n=0 の場合、空のツリーと呼ばれます。空ではないツリーには、ルートと呼ばれる特定のノードが 1 つだけ存在します。 n>1 の場合、残りのノードは m (m>0) 個の互いに素な有限集合に分割でき、各集合はそれ自体がツリーであり、ルートのサブツリー (SubTree) と呼ばれます。
木には次の特性があります。
1. サブツリーが互いに素である。
2. ルート ノードを除き、各ノードには親ノードが 1 つだけあります。
3. N 個のノードを持つツリーには N-1 個のエッジがあります。
ツリーの次数はツリー内のすべてのノードの最大次数を指し、リーフ ノードは次数 0 のノードを指します。ツリーの深さは、ツリー内のすべてのノードの最大レベルを指します。二分木の i 番目のレベルには最大 2^(i-1) 個のノード (i≥1) があり、深さ k の二分木には最大で 2^k-1 個のノード (k≥1) があります。
再帰と分割統治
再帰
意味
直接的または間接的に自分自身を呼び出す
使用するシーン
定義は再帰的です
n の階乗、フィボナッチ数列
データ構造は再帰的です
リンクされたリスト
分割統治
分割統治
使用するシーン
小規模で解決しやすい
問題は、最適な部分構造を備えた同じタイプのサブ問題に分解できます。
元の問題の解決策は、部分問題を結合することで得られます。
副次的な問題は独立している
アルゴリズムの時間計算量
反復法
直接展開する
再帰ツリー法
メインメソッド
木
二分木
コンセプト
過ごす
ノードが所有するサブツリーの数
葉
次数 0 のノード
子供
ノードサブツリーのルート
両親
子ノードの上位ノード
祖先
ルート ノードからこのノードまでのブランチ上のすべてのノード
ノードレベル
ルート ノードから始まり、ルートが最初のレベルになります
二分木の次数
最大ノード次数
バイナリツリーの深さ
ノードの最大レイヤー数
特別
完全なバイナリツリー
すべてのブランチ ノードには左サブツリーと右サブツリーがあります
すべての葉とすべての葉ノードは同じレイヤー上にあります
完全な二分木
最後のレベルを除くすべてのレベルが完全に満たされているバイナリ ツリー。最後の層のノードは引き続き左側に集中しています。
完全なバイナリ ツリーは完全なバイナリ ツリーである必要がありますが、完全なバイナリ ツリーは完全なバイナリ ツリーではない可能性があります。
自然
1. 空ではない二分木では、i 番目のレベルのノードの総数は i>=1 を超えません。
2. 深さ h の二分木には、最大で 2^h - 1 個のノード (h>=1)、少なくとも h 個のノードがあります。
3. 任意の二分木について、葉ノードの数が N0 で、次数 2 のノードの総数が N2 の場合、N0=N2 1 となります。
4. n 個のノードを持つ完全なバイナリ ツリーの深さは logn 1 です。
トラバース
バイナリ ツリー トラバーサルとは、特定のルールに従ってバイナリ ツリーの各ノードを訪問することを指し、各ノードは 1 回だけ訪問されます。バイナリ ツリーを走査するには、事前順序トラバーサル、順序内トラバーサル、事後順序トラバーサルの 3 つの主な方法があります。
1. 事前注文トラバーサル:
* ルートノードにアクセスします
* 左側のサブツリーの事前順序走査
* 予約注文は右のサブツリーをトラバースします
2. インオーダートラバーサル:
* 左側のサブツリーの順序どおりの走査
* ルートノードにアクセスします
* 右側のサブツリーを順番に走査します
3.事後トラバーサル:
* 左側のサブツリーの事後走査
* 右サブツリーの事後走査
* ルートノードにアクセスします
アプリケーションを横断する
プリオーダートラバーサルシーケンスとインオーダートラバーサルシーケンスからバイナリツリーを構築する
プレオーダーとポストオーダーではバイナリ ツリーを構築できません
二分木の深さを求める
以下は、再帰を使用してバイナリ ツリーの深さを見つける擬似コードの例です。
「」
関数ツリー深度(ルート):
ルートが null の場合:
0を返す
それ以外:
leftDepth = TreeDepth(root.left)
rightDepth = TreeDepth(root.right)
max(leftDepth, rightDepth) 1 を返す
「」
この疑似コードでは、「root」はバイナリ ツリーのルート ノードを表します。ルート ノードが空の場合、返される深さは 0 です。それ以外の場合、左のサブツリーと右のサブツリーの深さが再帰的に計算され、2 つのうちの大きい方に 1 を加えたものが現在のサブツリーの深さとして使用され、最大の深さになります。が結果として返されます。
バイナリソートツリー
入れる
バランスの取れた二分木
各ノードの左右のサブツリー間の深さの差は 1 を超えません。
ソートされたバイナリ ツリーをバランスのとれたバイナリ ツリーに変換します。
左単回転RR
ノードの右側の子の右側のサブツリーにノードを挿入します。
右単回転LL
ノードの左側の子の左側のサブツリーにノードを挿入します。
LR を両方向に回転させます (最初は左、次に右)
ノードの左側の子の右側のサブツリーにノードを挿入します。
RL を両方向に回転させます (最初は右、次に左)
ノードの右の子の左のサブツリーにノードを挿入します。
最適二分木(ハフマン木)
加重パス長が最も短い二分木
ハフマンツリーの構築
ルート ノードから重みの最小の組み合わせを選択して、新しいルートを生成します。
ハフマン符号化
左0 右1
ツリーから二分木への変換
行を追加
兄弟ノードは線で接続されています
オンライン化する
親と左端の子の間の接続を維持し、他の接続を削除します。
ヒープ
1. 最大ヒープ: 各ノードがその子ノード以上であるヒープは、最大ヒープと呼ばれます。
2. 最小ヒープ: 各ノードがその子ノード以下であるヒープは、最小ヒープと呼ばれます。
ヒープ挿入
写真
完全なグラフ
n 頂点を持つ有向グラフの場合
エッジの数 n(n-1)
有向完全グラフ
エッジの数 n(n-1)/2
無向完全グラフ
基本的な考え方
過ごす
程度
アウト度
辺の数 == 度の合計/2
パス
単純な道
どの頂点も 1 回だけ通過してください
パスの長さはパスに含まれるエッジの数です
リング(輪)
接続されたグラフ
強くつながったグラフ
有向グラフの任意の 2 つの頂点間にパスが存在する
強く結合したコンポーネント
シーケンシャルストレージ構造
隣接行列
相関行列
チェーンストレージ構造
隣接リスト
逆隣接リスト
相互リンクリスト
ティアルベックス
ヘッドベックス
ヒリンク
ちらちら
隣接複数リスト
無向グラフ
アイバーテックス
アイリンク
ジバーテックス
ジリンク
トラバース
深さ優先
まず幅広さ
スパニングツリー
特徴
n 個の頂点を持つ完全なグラフには、n (n-2) 個の異なるスパニング ツリーがあります。
最小スパニングツリー
プリムのアルゴリズム
サイドを選択してください
既知の接続コンポーネントの最小の新しいエッジを選択します
クラスカルのアルゴリズム
エッジの重みに基づいてエッジを選択する
特定のエッジがループを形成している場合、それを破棄します
貪欲なアルゴリズム
加重最短経路
ダイクストラのアルゴリズム
2 つの点セットに分割
最短経路が見つかりました
未定
トポロジカルソート
ループがあってはなりません
クリティカルパス
パス上のポイントの最も早い開始時間 == 最も遅い開始時間
動的プログラミング