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 つの暗号化アルゴリズムの一覧

ブログ    

推薦する

...

ディープラーニングとニューラルネットワーク: 注目すべき 6 つのトレンド

ニューラル ネットワークの基本的な考え方は、コンピューターの「脳」内の複数の相互接続されたセルをシミ...

陸奇氏が楽観視するAI時代のGitHubがついに実現へ

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

2020 年に慈善活動を変える主要なテクノロジー トレンドのリスト

チャリティーは常に実行速度が遅いことで知られています。慈善団体が社会、経済、環境の変化に対応するには...

テンセントの無人運転車が初登場!将来的には運転席がペンギンに置き換わる予定!プレート分析

人工知能と新技術の研究開発に関して、新たなブレークスルーがもう一つありました。 テンセントの無人運転...

LLM評価レビュー論文が出版され、3つの側面から包括的にまとめられ、データベースも掲載されている

大規模言語モデル (LLM) は、学界や産業界から幅広い注目を集めています。有用な LLM を開発す...

この線虫は単純ではありません!脳は高精度に修復され、ダイナミックに前進できる

最高精度の「線虫脳」、ここに登場。この「脳」は、Caenorhabditis elegans 線虫の...

Nova One Advisor: 世界の医療画像 AI 市場の収益は 2027 年に 200 億米ドルに達する見込み

世界的な市場調査およびコンサルティング会社である Nova One Advisor は、医療画像分野...

Microsoft OfficeがCopilot: Princessに接続されている場合は、

AIの助けがあれば、将来のオフィスではそれほど多くのコーヒーは必要なくなるかもしれません。サイエン...

AIが顧客関係管理を改善する3つの方法

AI には、CRM に関連する手動プロセスから組織を解放し、顧客エンゲージメント、販売分析情報、ソー...

楽観主義と悲観主義の議論は無意味。AIに必要なのは開発モデルについて考えることだ

最近、烏鎮での夕食会で大物たちが何を食べたかという噂に加え、インターネット会議では人工知能に関する一...

NLP における新たなマイルストーン!清華大学ヤオクラスの卒業生がKEARをリリース:人間を超える初の常識質問応答システム

[[443046]]人間はAIよりも常識があるとは言えなくなりました!最近、マイクロソフトの黄雪東と...

MITの画期的技術トップ10

MITテクノロジーレビューは毎年、その年の「トップ10のブレークスルーテクノロジー」を選出していま...

生成 AI は現在の DevOps および SRE 作業システムをどのようにサポートしますか?

こんにちは、ルガです。今日は、人工知能エコシステムの中核技術である「生成型人工知能」を意味する GA...

7年間の変革:WOT2018がテクノロジーの背後にある真実を明らかにする

2018 年のインターネット業界が新たな変化の時期を迎えていることは否定できません。新たなアップグレ...