Java プログラミング スキル - データ構造とアルゴリズム「ソート アルゴリズムの分類と紹介」

Java プログラミング スキル - データ構造とアルゴリズム「ソート アルゴリズムの分類と紹介」

導入

ソートとは、データのセットを指定された順序で並べるプロセスです。

分類カテゴリ

内部ソート: ソートのために処理する必要があるすべてのデータを内部メモリにロードすることを指します。一般的な内部ソートには、直接挿入ソート、シェル ソート、単純選択ソート、ヒープ ソート、バブル ソート、クイック ソート、マージ ソート、基数ソートなどがあります。

外部ソート: データの量がメモリにロードするには大きすぎるため、外部ストレージを使用してソートする必要があります。

アルゴリズムの時間計算量

プログラム (アルゴリズム) の実行時間を測定する方法は 2 つあります。

この方法は実行可能ですが、2 つの問題があります。1 つ目は、設計されたアルゴリズムの実行性能を評価するには、実際にプログラムを実行する必要があることです。2 つ目は、得られる時間の統計値は、コンピューターのハードウェアやソフトウェアなどの環境要因によって異なります。この方法は、どのアルゴリズムが高速かを比較するために、同じコンピューターで同じ状態で実行する必要があります。

事前推定法は、アルゴリズムの時間計算量を分析することで、どのアルゴリズムが優れているかを決定します。

時間周波数

アルゴリズムにかかる時間は、アルゴリズム内のステートメントが実行される回数に比例します。アルゴリズム内のステートメントが実行される回数が多いほど、時間がかかります。アルゴリズム内でステートメントが実行される回数は、ステートメント頻度または時間頻度と呼ばれます。これは、T(n) と表されます。

例えば、1から100までのすべての数字の合計を計算するには、2つのアルゴリズムがあります。

  1. 整数合計=0;
  2. 整数 終了=100;
  3. // forループ計算
  4. ( int i=1;i<= end ;i++) {
  5. 合計+=i;
  6. }

実行回数は終了の長さによって決まります。T(n)=n+1 です。

  1. // 直接計算
  2. 合計 = (1+終了)*終了/2;

直接計算は一度だけ実行すればよく、そのT(n) = 1です。

時間頻度を見積もる際に注意すべき点:

  • 定数項を無視する: たとえば、T(n)=2n+20 および T(n)=2n の場合、n が増加すると、20 は無視できます。
  • 低次の項を無視します。たとえば、T(n)=2n^2+3n+10 および T(n)=2n^2 です。n が増加すると、3n+10 は無視できます。
  • 係数を無視する: たとえば、T(n)=5n^2+7n および T(n)=3n^2+2n の場合、n が増加すると、5 と 3 は無視できます。

時間計算量

  1. 一般に、アルゴリズムの基本演算文の繰り返し回数は、問題のサイズ n の関数であり、T(n) で表されます。n が無限大に近づくと、T(n)/f(n) の極限値が 0 でない定数になるような補助関数 f(n) がある場合、f(n) は T(n) と同じ大きさの関数と呼ばれます。これは、T(n)=O(f(n)) と表され、O(f(n)) はアルゴリズムの漸近的時間計算量、または単に時間計算量と呼ばれます。
  2. T(n) は異なりますが、時間の計算量は同じである可能性があります。たとえば、T(n)=n^2+7n+6 と T(n)=3n^2+2n+2 の場合、T(n) は異なりますが、時間の計算量は O(n^2) です。
  3. 時間計算量を計算する方法
  • ランタイム内のすべての加算定数を定数 1 に置き換えます。
  • 修正された実行カウント関数では、最高次の項のみが保持されます。
  • 最高次の項の係数を削除します。

一般的な時間計算量

  • 定数次数 O(1)

ループなどの複雑な構造がない限り、何行のコードが実行されても、このコードの複雑さはO(1)です。

  1. 整数i = 1;
  2. 整数j = 2;
  3. ++i;
  4. j++;
  5. m = i+j;整数i は、j の整数です。

上記のコードを実行すると、特定の変数の増加に応じて消費時間が増えることはありません。そのため、このタイプのコードがどれだけ長くても、数万行または数十万行であっても、その時間計算量は O(1) で表すことができます。

  • 対数順序 O(log2n)
  1. 整数i = 1;
  2. (i<n){
  3. i = i*2;
  4. }

while ループでは、i は毎回 2 倍になります。乗算後、i は n にどんどん近づいていきます。x サイクル後に i が n より大きくなると仮定すると、この時点でループは終了します。つまり、2 の x 乗は n に等しくなり、x = log2n になります。つまり、ループが log2n 回実行されると、コードが終了します。したがって、時間計算量は O(log2n) です。

  • 線形順序 O(n)
  1. (i=1;i<=n;i++)の場合{
  2. j = i;
  3. j++;
  4. }

for ループ内のコードは n 回実行されるため、消費時間は n の変化に応じて変化します。そのため、このタイプのコードでは時間計算量を O(n) を使用して表現できます。

  • 線形対数順序 O(nlog2n)
  1. ( int m=1;m<n;m++)の場合{
  2. 私 = 1;
  3. (i<n){
  4. i = i*2;
  5. }
  6. }

この線形対数順序 O(log2n) は、時間計算量 O(logn) のコードを N 回ループします。

  • 平方順序 O(n^2)

つまり、2回のforループ、n*m

  • 立方次数 O(n^3)

3層ループ

  • K次 O(n^k)

k サイクル

  • 指数順序 O(2^n)

一般的なアルゴリズムの計算時間は、小規模から大規模まで、O(1) です。

平均時間計算量と最悪時間計算量

  1. 平均時間計算量とは、すべての可能な入力インスタンスが等しい確率で出現する場合のアルゴリズムの実行時間を指します。
  2. 最悪の場合の複雑さは、最悪の時間複雑さと呼ばれます。一般的に議論される時間複雑さは、最悪の場合の時間複雑さです。その理由は、最悪の場合の時間複雑さは、アルゴリズムが任意の入力インスタンスで実行されるのにかかる時間の上限であり、アルゴリズムの実行時間が最悪の場合よりも長くならないことを保証するためです。
  3. 平均時間計算量と最悪時間計算量が一致するかどうかは、アルゴリズムによって異なります (次の表を参照)。

アルゴリズムの空間計算量

  1. 時間の計算量に関する議論と同様に、アルゴリズムの空間計算量は、アルゴリズムによって消費されるストレージ スペースとして定義され、これも問題のサイズ n の関数です。
  2. 空間複雑度は、アルゴリズムが動作中に一時的に占有するストレージ スペースの量を測定するものです。一部のアルゴリズムが占有する必要がある一時的な作業単位の数は、解決する問題の規模 n に関係しています。n が大きくなると、スペース複雑度も大きくなります。n が大きい場合、クイック ソートやマージ ソートなど、より多くのストレージ ユニットが占有されます。
  3. アルゴリズム分析を行う際、主に議論されるのは時間の複雑さです。ユーザー エクスペリエンスの観点からは、プログラム実行の速度の方が重要です。一部のキャッシュ製品 (Redis、Memcache) とアルゴリズム (基数ソート) は、基本的にスペースと時間を交換します。

<<:  ディープラーニングに基づくターゲット検出ネットワークが誤検出を起こす可能性がある理由と、ターゲット検出の誤検出問題を最適化する方法について説明します。

>>:  Python 暗号化および復号化モジュール hashlib の 7 つの暗号化アルゴリズムの一覧

ブログ    
ブログ    
ブログ    

推薦する

AIのための大規模ストレージインフラストラクチャの要件

大規模な人工知能 (AI) により、容量とパフォーマンスの面でストレージ インフラストラクチャの水準...

DIYのセルフバランススクーターの事故で左足を失った男は、義足を改造してワイルドなアイアンマンに変身した。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

後から登場したが、最初に登場したテンセントのHunyuanモデルの技術的なハイライトは何ですか?

2023年の夏は終わったが、AIGCビッグモデルを巡る注目は衰える気配がない。過去 6 か月間、私...

ライトスピードコンピューティングが画期的な進歩を達成、AIトレーニングコストの問題が解決される可能性

画像出典: Visual China 1956年、アメリカの経済学者によって「人工知能」の概念が提唱...

TPCアライアンス設立:科学的発見の推進に向け、1兆以上のパラメータを持つAIモデルを目指す

11月16日、業界をリードする科学研究機関、米国国立スーパーコンピューティングセンター、そしてAI分...

人工知能が科学を変える4つの方法

新たな医学研究から宇宙の新たな理解まで、新しいモデルは科学界に衝撃を与えました。世界中のほとんどの人...

清華大学と北京大学は確実にトップ20に入っています!世界のAI研究の年間ランキングが発表され、中国と米国の間には大きな差がある

さらに、テクノロジー業界に特化したベンチャーキャピタル企業であるサンダーマーク・キャピタルは、毎年こ...

求職者の履歴書はどうすればAIやロボットによる審査に合格できるのでしょうか?

今日では、求人ウェブサイトに提出された多くの求職者の履歴書は、新しい仕事の面接を受ける前に人工知能ツ...

人工知能は非常に強力だが、人間は必ずしも人工知能に支配されるわけではない。ホーキングは間違っているのだろうか?

著者: ふす有名な物理学者ホーキング博士はかつて、将来人類は人工知能によって滅ぼされるかもしれないの...

人工知能は人間の知能ではない。まずは人工的なもの、そして知的なもの

人工知能に関しては、インターネット企業はすべてが「魔法のようだ」とよく言います。しかし、そうではあり...

OpenAIの最新製品が企業ビジネスにもたらす意味

企業向け GenAI の民主化世界的なデジタル変革コンサルタント会社パブリシス・サピエントの最高製品...

顔認識の時代の準備はできていますか?

[51CTO.comからのオリジナル記事] 近年、生体認証技術はますます成熟し、私たちの生活の中に...

ドローンの墜落を防ぐにはどうすればいいですか?

「墜落」とは模型飛行機の用語です。簡単に言うと、模型飛行機が不適切な操作や機械の故障により異常に地...

...