インタビューにおけるデータ構造とアルゴリズム

データ構造

リンクリストの実現

単一リンクリスト:
二重リンクリスト:
二重循環リンクリスト:

2つのリンクされたリストが交差するかどうかを判断する方法は?

単一リンクリスト:
2つのリンクリストの交差の性質を使用します。交差する場合、交差から最後まで、それらはすべて同じポイント、Yタイプです。
特定の方法:最初に2つのリンクリストの長さの差nを計算し、長いリンクリストを最初に移動させますステップnでは、短いリンクリストが順番に逆方向にトラバースされる
ため、同時に最初のパブリックノードに到達します。最初のパブリックノードは、2つのリンクリストのノードが逆方向の移動中に等しいかどうかを比較することで取得できます。
時間の複雑さはO(m + n)(リンクリストの長さはm、n)であり、
人工的にリングを構築し、リンクリストAのエンドノードをリンクリストBに向け、それがリングを構成するかどうかを判断し、リンクリストBのヘッドポインターから下にトラバースします。 Bに戻ることができる、それは交差点を意味します。

ハッシュテーブルの実装

レコードの保存場所= f(キーワード)
レコードは、ハッシュ技術を使用して連続ストレージスペースに保存されます。この連続ストレージスペースは、ハッシュテーブルまたはハッシュテーブルと呼ばれます。
固定アルゴリズムを使用してキーを整数に変換します。異なる入力が同じ出力にハッシュされる可能性があり、ハッシュ値から入力値を一意に決定することは不可能です。
ハッシュ関数を使用して、キーを対応する配列添え字に変換します。 、そして値を取得するためのスペースを見つけます。

スタック

スタック、ファーストインファーストアウト、片端のみ許可

スタックは「制限された操作」を備えた線形テーブルです。
データセットの一方の端でのデータの挿入と削除のみが含まれ、ラストインファーストアウトとファーストインラストアウトの特性を満たす場合は、「スタック」データ構造を優先する必要があります。

スタックは、配列またはリンクリストを使用して実装できます。アレイで実装されたスタックはシーケンシャルスタックと呼ばれ、リンクリストで実装されたスタックはチェーンスタックと呼ばれます。
スタック

ノードの次数:ノードに含まれるサブツリーは、ノードの次数と呼ばれます

ツリー度:ツリーの最大ノードの度はツリー度と呼ばれます

リーフノードとターミナルノード:次数がゼロのノード

親ノードまたは親ノード:ノードに子ノードが含まれている場合、このノードはその子ノードの親ノードと呼ばれます。

子ノードまたは子ノード:ノードに含まれるサブツリーのルートノードは、ノードの子ノードと呼ばれます。

兄弟ノード:同じ親ノードを持つノードは兄弟ノードと呼ばれます。

ノードレベル:ルートの定義から開始して、ルートが第1レベル、ルートの子ノードが第2レベルというように続きます。

ツリーの高さまたは深さ:ツリー内のノードの最大レベル。

いとこノード:親ノードが同じレイヤー上にあるノードはいとこです。

ノードの祖先:ルートからノードへのブランチ上のすべてのノード。

子孫:ノードをルートとするサブツリー内のノードは、ノードの子孫と呼ばれます。

森:m(m> = 0)のばらばらの木の集まりは森と呼ばれます。

ツリータイプ


順序付けられていないツリー:ツリー内の任意のノードの子ノードには順序関係がありません。順序付きツリー:ツリー内の任意のノードの子ノード間に順序関係があり
ます
-ノードごとに最大2つのサブツリーを持つツリーはバイナリツリーと呼ばれます-バイナリツリーの場合、その深さがd(d> 1)であると仮定します。d層を除いて、
他の層のノード数が最大になり、d層のすべてのノードが左から右に密に配置されています。
このようなバイナリツリーは完全なバイナリツリーと呼ばれます。完全なバイナリツリー
の定義はすべて葉です。最下位レベルにノードがある完全なバイナリツリー;-
バランスの取れたバイナリツリー(AVLツリー):任意のノードの2つのサブツリー間の高さの差が1
以下のバイナリツリー;-ソートされたバイナリツリー(バイナリ検索ツリー(英語:バイナリ検索ツリー) )、バイナリ検索ツリー、順序付きバイナリツリーとも呼ばれます);-
ハフマンツリー(情報コーディングに使用):重み付きパスが最短のバイナリツリーは、ハフマンツリーまたは最適なバイナリツリーと呼ばれます;
-Bツリー:ペア読み取りおよび書き込み操作用に最適化された自己平衡型バイナリ検索ツリーは、データを順番に保つことができ、3つ以上のサブツリーがあります。

ツリーの保存と表現

シーケンシャルストレージ:データ構造を固定アレイに保存すると、トラバーサル速度に一定の利点があります
が、比較的大きなスペースを占めるため、非主流のバイナリツリーになります。バイナリツリーは通常、チェーンに格納されます。

チェーンストレージ:ノードの数を把握できないため
、共通ツリーのストレージ表現は処理のためにバイナリツリーに変換され、子ノードの数は最大2つです。

キュー

挿入できるのは一方の端だけで、もう一方の端は削除できます

一般的に使用されるソートアルゴリズム。

高速ソート、
バブルソート、
バイナリ検索、
時間の複雑さ、
フィボナッチシーケンス。

インプレースソートアルゴリズム

順序度:順序付けられた関係を持つ配列内の要素のペアの数。

比較ソート

要素を比較した後、順序を決定します

比較ソートには次のものが含まれます。

  • 挿入ソート
  • クイックソート
  • バブルソート
  • ヒルソート
  • 並べ替えを選択
  • マージソート
  • ヒープソート

非比較ソート

各要素の位置を決定するために要素間の比較の必要はありません

非比較ソートには次のものが含まれます。

  • カウントソート
  • バケットソート
  • ベースソート

バイナリツリートラバーサル

次に、2つの重要なツリートラバーサルモードは、深度優先トラバーサルと幅優先トラバーサルです。

通常、深さは最初に再帰を使用し、幅は通常キューを使用します。

一般に、再帰的に実装できるほとんどのアルゴリズムは、スタックを使用して実装することもできます。

デプスファーストトラバーサルの3つの方法: 1次トラバーサル、中次トラバーサル、ポストオーダートラバーサル、

幅優先トラバーサル方式:ツリーのルートから開始し、ツリー全体のノードを左から右、上から下にトラバースするレベルトラバーサル

バブル

シーケンスを繰り返しトラバースし、一度に2つの要素を比較し、順序が間違っている場合は順序を修正します。

交換がなくなると、トラバーサルは終了します。

最後まで、すべての要素に対して上記の手順を繰り返します

時間の複雑さn ^ 2

おすすめ

転載: blog.csdn.net/MENCO_/article/details/109157897