【テクニカルドライグッズ】史上最高の選別・データ構造

序文

私はしばらく働いており、同僚と冗談を言うこともあります。「すぐに注文を書いてもらえると、書けないのではないかと思います。」

しばらくアルゴリズムに触れないと、忘れがちです。信じられない?自分でヒープソートを作成できるかどうかについて考えます。

学校の採用を経験したことがある人なら誰でも、アルゴリズムとデータ構造が不可避であることを知っています

筆記テストで最も重要なのはテスト問題です。PinduoduoやToutiaoのような大企業の場合、アルゴリズムに関するいくつかの質問が出てきます。ACがない場合、面接の機会はありません。

アルゴリズムの質問は、インタビュー(オンサイトインタビューまたはビデオインタビュー)中にも行われますが、筆記試験ほど難しいことはありません。インタビューの半分が行われているシーンを想像できます。インタビュアーは、バイナリツリーを逆にして今自分自身に尋ねるように頼みますが、それでも行いますか?

大学にいる場合は、並べ替えやさまざまな基本的なデータ構造から始めることができます8つの基本的なソートとリンクリスト/バイナリツリー/スタック/キューを美しいPDFにするのに1週間かかりました

このPDFの読み取りエクスペリエンスは、主要なブログプラットフォームのパブリックアカウントや記事よりも明らかに優れています。PDFの内容は純粋に手作業のものであり、理解できない場合は私に尋ねることができます。

以下は、8つの基本的な並べ替えと基本的なデータ構造の簡単な紹介であり、それぞれの並べ替えの考え方、基本的な説明、およびソースコードは PDFにあります。

 

バブルソート

アイデア:2つが交換され、大きなものが後ろに配置され、最大値は最初のソート後の配列の最後にすでにあります。2つが交換されるため、n-1のソートが必要です(10の数値、9のソートなど)。

コード実装ポイント:2つのforループ、外側のループは並べ替えパスの数を制御し、内側のループは比較の数を制御します。各トリップの後、比較の数を1ずつ減らす必要があります。

 

 

並べ替えを選択

アイデア:配列内の最大の要素を見つけて、配列の最後の要素と交換します。数値が1つしかない場合は選択する必要がないため、n-1ソートが必要です。

コード実装ポイント:2つのforループ、外側のループはソートされたパスの数を制御し、内側のループは現在のパスの最大数を見つけて、現在のパス配列の最後の要素と交換します

 

ソートを挿入

アイデア:既存の順序付けされた配列に要素を挿入します。最初に順序付けられたデータがあるかどうかは不明であるため、要素の最初の要素は順序付けられていると見なされます。順序付けられた配列と比較すると、大きい場合は直接配置され、小さい場合は配列要素の位置が移動して、挿入するのに適した位置が検出されます。数値が1つしかない場合は挿入する必要がないため、n-1ソートが必要です。

コードの実装:forループはwhileループの実装に埋め込まれ、外側のforループはソートされたトリップの数を制御し、whileループは適切な挿入位置を見つけます(挿入位置は0未満にはできません)

 

クイックソート

クイックソートを学習するための前提条件:再帰を理解する必要がある

アイデア:配列内の要素(ノード)を見つけ、ノードの左側に小さく配置し、ノードの右側に大きく配置します。左のノードよりも小さく、右のノードよりも大きい下へのトリップ。この操作を続けてください...

コードの実装:ピボットは中央で取得され、LとRは配列の最小位置と最大位置を示すために使用されます。比較は、ピボットよりも小さい(大きい)数値が見つかるまで続行され、次に交換されて、連続的に範囲が縮小されます。ピボットの前の要素(j)への再帰L。再帰ピボットの後の1つの要素(i)からR要素

 

マージソート

マージソートの学習の前提:再帰を理解する必要がある

アイデア:2つの並べ替えられた配列を組み合わせて、順序付けられた配列にします。要素を順序付けられた配列として分離し、それらを比較してマージします要素が1つだけになるまで分割とマージを続けます

コードの実装:最初の並べ替えプロセスでは、マージするのは基本的に2つの要素(2つの既存の順序付けされた配列と見なされます)です。このような操作を続けて実行すると、最後に配列が順序付けられ、左、右、分割...

 

 

 

ヒープソート

ヒープのソートの学習の前提:二分木を理解する必要がある

アイデア:ヒープの並べ替えは完全なバイナリツリーの機能を使用します。ルートノードは左右の子よりも大きくなります。ヒープ構築操作を完了すると、基本的にルートノードと左右の子のサイズが比較されます。大きなものはルートに切り替えられます。ノード上で、最大のノードがツリーの一番上になるまで次に、配列の最後の要素と交換します

コードの実装:左側または右側のサブツリーが現在のルートノードよりも大きい限り、それを置き換えます。置換後、次のサブツリーが変更されるため、各ノードが親>子の条件を実現するまで比較することも必要です

 

 

 

ヒルソート

アイデア:ヒルソートは、本質的に挿入ソートの拡張バージョンです。ヒルソートは、配列をn個のグループに分割して挿入ソートし、配列が巨視的に順序付けられるまで挿入ソートを実行するときに何度も移動する必要がなくなります。 〜

コード思考:通常、丘の増分はギャップ=ギャップ/ 2ですが、通常のバージョンの挿入ソートよりもそのようなforループが多くあります。

 

カーディナリティの並べ替え(バケットの並べ替え)

アイデア:カーディナリティの並べ替え(バケットの並べ替え):数値を1、10、100、1000にカットし、それらを別のバケットに入れて、最大の桁の数が完了するまで、バケットの順序で1回戻します〜次に配列は注文されています

コードの実装:最初に配列の最大値を見つけてから、ループの条件として最大値/ 10を使用します(> 0である限り、まだ数字があります)。1桁、10桁、...をバケットに分配し、割り当てられるたびにリサイクルする

 

 

 

再帰的

再帰はアルゴリズムで非常によく使用されます。ソートアルゴリズムのクイックソートおよびマージソートは再帰を使用する必要があります(少なくとも再帰を実装するのが最も便利です)。

再帰を使用する場合は、再帰出口(再帰を終了するための条件)と再帰式(法則)の 2つの条件を知っている必要があります。

ヒント:再帰では、問題はしばしば2つの部分(1と全体のアイデア)分割されます。これにより、再帰的な式(法則)をすばやく見つけることができます。

 

Hanrotaは以下を実現します。

 

 

 

基本的なデータ構造

リンクリスト、キュー、バイナリツリー、およびスタックはすべて、非常に基本的なデータ構造です。たとえば、各データ構造に対応するアルゴリズムの質問があります。

  • LeetCode No206:リバースリンクリスト
  • LeetCode No20:文字列[] {]} {] {}を確認します(そのような文字列が有効(整列されている)かどうか)
  • LeetCode No104:木の最大深度
  • LeetCode No102:シーケンストラバーサルツリー

学校の新入社員は、ディクショナリツリー、赤黒木、グラフなどのデータ構造を要求しませんが、リンクリスト、キュー、バイナリツリー、およびスタックデータ構造(LeetCodeは単純です)の問題は引き続き作成できるはずです。

最後

最後に説明したいのは、並べ替えアルゴリズム/データ構造のコードが最適な解決策ではない可能性があることです。コードの実装は、理解しやすい方法で記述されています。ほとんどすべての文には対応するコメントがありますが、それは理解できるはずです。

しばらく動作していますが、なぜ最も基本的なアルゴリズムとデータ構造を記述したいのですか?その理由は次のとおりです。

  • 私はタイポグラフィを探求いる人ですが、早い段階でクラスメートをフォローすると、GitHubと記事のナビゲーションのread.meが頻繁に変更されることがあります。現在のGitHubナビゲーションは私が好きなものではありません(長すぎます)。以前の記事では、正直なところ、タイプセットでは不十分なので、もう一度waveを開始することにしました。
  • 私の記事はいくつかのプラットフォームで配布されますが、記事が終了すると誰もそれを読むことができなくなり、プラットフォームの盗難防止チェーンのためにマップベッドがハングする可能性があります。多くの読者が私に尋ねたので:「あなたの記事をPDFに変換できますか?」
  • 私は多くのシリーズの記事を書きましたが、これらの記事はほとんど変更されないため、「永続的に非常に適しています。

上記の理由により、一連の記事をPDF / HTML / WORD文書に要約することにしました。正直なところ、そのようなドキュメントを作成するのに長い時間がかかりました

資料入手方法:転送+注意、舞台裏専用レターエディター【資料】を無料で入手できます!

 

 

資料入手方法:転送+注意、舞台裏専用レターエディター【資料】を無料で入手できます!

 

 

 

 

238の元の記事を公開 68のような 30,000以上の訪問

おすすめ

転載: blog.csdn.net/qq_45401061/article/details/104907907