一般的なデータ構造にはどのようなものがありますか? 基本的な操作は何ですか? 一般的なソート アルゴリズムはどのように実装されていますか? それぞれの利点と欠点は何ですか? この記事では、アルゴリズムの基本、一般的なデータ構造、ソート アルゴリズムについて簡単に説明し、学生にデータ構造とアルゴリズムに関する基本的なレッスンを提供します。 1. はじめに 1 なぜアルゴリズムとデータ構造を学ぶ必要があるのでしょうか?
2 ビジネス開発はどの程度習得すべきでしょうか? 一般的なデータ構造とアルゴリズムを理解すれば、コミュニケーションの障壁はなくなります。 知識を柔軟に適用する: 問題が発生したときに、最適化するために使用するデータ構造とアルゴリズムを把握します。 2. データ構造の基礎 1 データ構造とは何ですか? データ構造は、データの編成、管理、および保存形式であり、その目的は、データに効率的にアクセスして変更することです。 データ構造はアルゴリズムの基礎です。アルゴリズムが美しく機敏なダンサーに例えられるとすれば、データ構造はダンサーの足元の広大で堅牢なステージです。 2 物理構造と論理構造の違いは何ですか? 物理構造は、配列やリンク リストなど、人間の肉体や骨のように、目に見える形で、触れられる形で、現実のものです。 論理構造は人間の思考や精神のようなもので、キュー、スタック、ツリー、グラフなど目に見えず、実体がありません。 3 線形ストレージ構造と非線形ストレージ構造の違いは何ですか?
3つのアルゴリズムの基礎 1 アルゴリズムとは何ですか?
2 アルゴリズムの品質を測定するにはどうすればよいでしょうか?
3 時間計算量を計算するには? Big O 表記法 (漸近的時間計算量): プログラムの相対実行時間関数 T(n) を n、n^2、logN などの大きさの順序に簡略化します。 時間計算量を導出するためのいくつかの原則:
時間計算量の比較: O(1) > O(logn) > O(n) > O(nlogn) > O(n^2)。 異なる時間計算量を持つアルゴリズムの実行回数の比較: 4 空間複雑度を計算するには? 定数スペース O(1): ストレージスペースのサイズは固定されており、入力サイズと直接関係はありません。 線形空間 O(n): 割り当てられた空間は線形集合であり、集合のサイズは入力サイズ n に比例します。 2次元空間 O(n^2): 割り当てられた空間は2次元配列セットであり、セットの長さと幅は入力サイズnに比例します。 再帰空間 O(logn): 再帰は特別なシナリオです。再帰コードには変数やコレクションの明示的な宣言はありませんが、コンピューターがプログラムを実行すると、「メソッド呼び出しスタック」を保存するための特別なメモリ領域が割り当てられます。再帰操作を実行するために必要なメモリ領域は、再帰の深さに比例します。 5. アルゴリズムの安定性をどのように定義するか? 安定: a が元々 b の前にあり、a=b の場合、ソート後も a は b の前にあります。 不安定: a が元々 b の前にあり、a=b の場合、ソート後に a が b の後に表示されることがあります。 6 一般的なアルゴリズムにはどのようなものがありますか? まず、特定のアルゴリズムが特定の問題を解決することを理解することが重要です。
その中でも、文字列、検索、ソートのアルゴリズムが最も基本的なアルゴリズムです。 4つの一般的なデータ構造 1 配列 1) 配列とは何ですか? データとは、同じ型の有限個の変数の順序付けられたセットです。配列内の各変数は要素と呼ばれます。 2) 配列の基本的な操作は何ですか? 読み取りO(1)、更新O(1)、挿入O(n)、削除O(n)、拡張O(n)。 2 リンクリスト 1) リンクリストとは何ですか? リンク リストは、複数のノードで構成される、物理的に連続していない非連続的なデータ構造です。 単一リンク リストの各ノードは 2 つの部分で構成されます。1 つはデータを格納する変数 data で、もう 1 つは次のノードを指すポインタ next です。 2) リンクリストの基本的な操作は何ですか? 読み取りO(n)、更新O(1)、挿入O(1)、削除O(1)。 3) リンクリストと配列 配列: 読み取りが多く、挿入と削除が少ないシナリオに適しています。 リンク リスト: 挿入と削除が多く、読み取りが少ないシナリオに適しています。 3 スタック 1) スタックとは何ですか? スタックは線形論理データ構造であり、スタックの要素は後入れ先出し方式のみで処理されます。最も古い要素が格納されている位置はスタックの一番下と呼ばれ、最新の要素が格納されている位置はスタックの一番上と呼ばれます。 類推すると、スタックは一方の端が閉じられ、もう一方の端が開いている中空のチューブであり、キューは両端が開いている中空のチューブです。 2) スタックを実装するにはどうすればいいですか? 配列の実装: リンクリストの実装: 3) スタックの基本操作 プッシュO(1)、ポップO(1)。 4) スタックの用途は何ですか?
4 キュー 1) キューとは何ですか? キューの要素が最後にのみ入力および終了できる線形論理データ構造。キューの出口側はキューの先頭と呼ばれ、キューの入口側はキューの末尾と呼ばれます。 2) キューを実装するにはどうすればいいですか? 配列の実装: リンクリストの実装: 3) キューの基本的な操作は何ですか? エンキューO(1)、デキューO(1)。 4) キューの応用
5 ハッシュテーブル 1) ハッシュテーブルとは何ですか? キーと値の間のマッピング関係を提供する論理データ構造。 2) ハッシュテーブルの基本的な操作は何ですか? 書き込み: O(1)、読み取り: O(1)、拡張 O(n)。 3) ハッシュ関数とは何ですか? ハッシュテーブルは本質的に配列ですが、配列にはa[0] a[1] a[2] a[3]などの添え字に基づいてのみアクセスでき、ハッシュテーブルのキーは主に文字列型です。 ハッシュ関数を使用すると、文字列または他のタイプのキーを配列の添え字インデックスに変換できます。 長さ 8 の配列が与えられた場合、次のようになります。 キー=001121の場合、 インデックス = ハッシュコード ("001121") % 配列の長さ = 7 キー=thisの場合、 インデックス = HashCode ("this") % Array.length = 6 4) ハッシュ衝突とは何ですか? ハッシュ関数によって異なるキーから得られる添字は同じになる場合があります。たとえば、キー 002936 に対応する配列の添字は 2 で、キー 002947 に対応する配列の添字も 2 です。これはハッシュの競合です。 5) ハッシュ衝突を解決するにはどうすればいいですか? オープン アドレス指定方法: 例: Threadlocal。 リンク リスト方式: ハッシュマップの例。 6 木 1) 木とは何ですか? ツリーは n (n ≥ 0) 個のノードの有限集合です。 n=0 のとき、それは空木と呼ばれます。空でないツリーには、次の特性が存在します。
2) ツリートラバーサル? (1)深さ優先 事前順序: ルート ノード、左サブツリー、右サブツリー。 順番は、左のサブツリー、ルート ノード、右のサブツリーです。 後順序: 左サブツリー、右サブツリー、ルート ノード。 実装方法: 再帰またはスタック。 (2)幅優先 レイヤー順序: レイヤーごとに移動。 実装方法: キュー。 7 二分木 1) バイナリツリーとは何ですか? 二分木は木の特殊な形式です。名前が示すように、このツリーの各ノードには最大 2 つの子ノードがあります。子ノードは最大 2 つありますが、子ノードが 1 つしかない場合や、子ノードがまったくない場合もあります。 2) 完全二分木とは何ですか? すべての非リーフノードに左と右の子があり、すべてのリーフノードが同じレベルにある場合、バイナリ ツリーは完全なバイナリ ツリーです。 3) 完全二分木とは何ですか? n 個のノードを持つ二分木の場合、すべてのノードは階層順に 1 から n まで番号が付けられます。このツリーのすべてのノードが、同じ深さの完全な二分木内の 1 から n までの番号が付けられたノードと同じ位置にある場合、この二分木は完全な二分木です。 8 二分探索木 1) 二分探索木とは何ですか? バイナリ検索ツリーは、バイナリツリーに基づいて次の条件を追加します。
2) 二分探索木の機能は何ですか?
3) バイナリツリーを実装するにはどうすればいいですか?
9 バイナリヒープ 1) バイナリヒープとは何ですか? バイナリ ヒープは特殊な完全バイナリ ツリーであり、最大ヒープと最小ヒープの 2 つのタイプに分けられます。
2) バイナリヒープの基本的な操作は何ですか? (1)挿入:最後に挿入するとノードが上方に浮き上がります。 (2)削除:先頭ノードを削除し、末尾ノードを先頭に置いてシンクします。 (3)二分ヒープを構築します。二分木 ==> 二分ヒープ、すべての非リーフノードが順番に沈みます。 3) バイナリヒープを実装するにはどうすればいいですか? 配列: 5つの一般的なソートアルゴリズム 1 古典的なソートアルゴリズムのトップ10 2 バブルソート 1) アルゴリズムの説明 バブルソートは単純なソートアルゴリズムです。ソートする配列を繰り返し処理し、一度に 2 つの要素を比較して、順序が間違っている場合はそれらを交換します。シーケンスを訪問する作業は、交換が不要になるまで、つまりシーケンスがソートされるまで繰り返されます。このアルゴリズムの名前は、小さな要素が交換を通じてゆっくりとシーケンスの先頭に「浮かんで」いくという事実に由来しています。 2) 実装手順
3) メリットとデメリット
4) 適用範囲
5) シーンの最適化 (1)データがすでに整っているにもかかわらず、バブルの問題は続く
(2)一部のデータはすでに整列しているが、次のラウンドで走査される。
(3)1つの要素だけが間違っているが、ソートの全ラウンドが必要である
3 マージソート 1) アルゴリズムの説明 マージソートは、マージ操作に基づいた効果的なソートアルゴリズムです。このアルゴリズムは、分割統治法の非常に典型的な応用です。現在のシーケンスを再帰的に 2 つに分割し (分割)、要素の順序を維持しながら前の手順で取得したサブシーケンスを統合し (マージ)、最後に順序付けられたシーケンスを形成します。 2) 実装手順 画像出典: https://www.cnblogs.com/chengxiao/p/6194356.html
3) メリットとデメリット アドバンテージ:
欠点:
4) 適用範囲 大量のデータがあり、ソートが安定していると予想されるシナリオ。 4 クイックソート 1) アルゴリズムの説明 クイックソートは分割統治戦略を使用して、シーケンスを小さいサブシーケンスと大きいサブシーケンスの 2 つのサブシーケンスに分割し、2 つのサブシーケンスを再帰的にソートして、最終的にシーケンス全体をソートします。 2) 実装手順
3) メリットとデメリット アドバンテージ:
欠点:
4) 適用範囲 大量のデータがあり、安定したソートを必要としないシナリオ。 5) シーンの最適化 (1)基本要素が選択されるたびに、最大または最小の要素が選択される
(2)シーケンスには大量の繰り返しデータが含まれている
(3)クイックソートの性能最適化
5. ヒープソート 1) アルゴリズムの説明 ヒープソートとは、ヒープ データ構造を使用して設計されたソート アルゴリズムを指します。スタックは、完全な二分木を近似し、スタックの特性を満たす構造です。つまり、子ノードのキー値またはインデックスは常に親ノードよりも小さい (または大きい) です。 2) 実装手順
3) メリットとデメリット アドバンテージ:
欠点:
4) 適用範囲 データ量が多く、データがストリーミング方式で入力されるシナリオ。 5) 実際の状況では、クイックソートがヒープソートよりも高速なのはなぜですか? ヒープソートのプロセスから、最大ヒープが確立された後、ヒープの最上部の要素と最後の要素が交換され、最後の要素が最上部から適切な位置に沈むことがわかります。最下部の要素は比較的小さくなければならないため、沈むプロセス中に、ほとんど無効な比較が大量に実行されます。したがって、ヒープソートの複雑さはクイックソートと同じで、どちらも O(NlogN) ですが、ヒープソートの複雑さの定数係数は大きくなります。 6 カウントソート 1) アルゴリズムの説明 カウンティングソートは比較ベースのソートアルゴリズムではありません。その中心となるのは、入力データの値をキーに変換し、それを追加の配列スペースに格納することです。線形時間計算量を持つソート方法として、カウンティングソートでは、入力データが特定の範囲の整数である必要があります。 2) 実装手順
3) メリットとデメリット アドバンテージ:
欠点:
4) 適用範囲 シーケンスの要素は整数であり、これは k がそれほど大きくなく、シーケンスが比較的集中している場合に適用されます。 5) シーンの最適化 (1)数字が0から始まらないのでスペースが無駄になる シーケンスの最小値はオフセットとして使用され、シーケンスの最大値 - 最小値 + 1 は統計配列の長さとして使用されます。 7 バケットソート 1) アルゴリズムの説明 バケットソートは、カウントソートのアップグレード版です。これは関数のマッピング関係を利用しますが、その効率の鍵はこのマッピング関数の決定にあります。実装の原則: 入力データが均一分布に従うと仮定して、データを有限数のバケットに分割し、各バケットを個別にソートします (別のソート アルゴリズムを使用することも、バケット ソートを再帰的に使用し続けることもできます)。 2) 実装手順
3) メリットとデメリット アドバンテージ:
欠点:
8 パフォーマンス比較 0 から K までの合計 N 個の数列をランダムに生成し、さまざまなアルゴリズムを使用してソートし、ソートに要した時間を記録します。 参考文献と画像ソース [1] コミックアルゴリズム:シャオ・フイのアルゴリズムの旅 [2] アルゴリズム(第4版) [3] 図解アルゴリズム [4] オファー [5] 古典的なソートアルゴリズムのトップ10(動的ダイアグラムのデモンストレーション) https://www.cnblogs.com/onepixel/p/7674659.html [6] ウィキペディア https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5 |
サイバーセキュリティは、攻撃と防御の継続的なゲームです。防御戦略が進化し続ける一方で、攻撃者も攻撃の...
GPT-4 以降: OpenAI GPT-3 は、その自然言語機能で大きな話題を呼びました。 GPT...
最近、Meta の CTO である Andrew Bosworths 氏が記者に独占インタビューに応...
[[425896]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
人工知能は今年もテクノロジー分野で人気を博し続けています。特に、大規模モデルはソフトウェア開発を含む...
「この記事は素晴らしいです! 実用的なプロジェクトがたくさん含まれており、機械学習を学び始めたばか...
SAM (Segment Anything) は、基本的な視覚セグメンテーション モデルとして、わず...
[[440885]] [51CTO.com クイック翻訳]次のようなシナリオを想像してみてください。...
暗号通貨は、その極端な変動性で知られています。市場の価格は非常に急速に変動するため、トレーダーが市場...
クラウド コンピューティングもこの設定で重要な役割を果たし、世界中から収集された膨大な量のデータを効...