ホームページ バックエンド開発 C#.Net チュートリアル 再帰的アルゴリズムの時間計算量はどれくらいですか

再帰的アルゴリズムの時間計算量はどれくらいですか

Oct 24, 2019 am 10:53 AM
時間の複雑さ 再帰

再帰的アルゴリズムの時間計算量は [T(n)=o(f(n))] です。これは、問題のサイズ n が増加するにつれて、アルゴリズムの実行時間の増加率と f が増加することを意味します。 (n) 成長率はアルゴリズムの漸近時間計算量と呼ばれる成長率に比例します。

再帰的アルゴリズムの時間計算量はどれくらいですか

#再帰的アルゴリズムの時間計算量

時間計算量:

一般に、アルゴリズムにおける基本演算の繰り返し回数は問題サイズ n の関数 f(n) であり、n による f(n) の変化を分析して T(n) の大きさのオーダーを決定します。 。ここで「o」は大きさの桁を表すために使用され、アルゴリズムの時間計算量を与えます。

T(n)=o(f(n));

これは、問題サイズ n が増加するにつれて、アルゴリズムの実行時間の増加率が、 f(n) 、アルゴリズムの漸近時間計算量と呼ばれます。そして、私たちは通常、最悪の場合の時間計算量について議論します。

推奨コース:

C 言語チュートリアル

空間複雑度:

アルゴリズムの空間複雑度は、実際に占有される空間ではありません。ただし、アルゴリズム空間全体における補助空間ユニットの数を計算するためのものであり、問​​題の規模とは何の関係もありません。アルゴリズムの空間複雑さ S(n) は、アルゴリズムによって消費される空間の大きさのオーダーとして定義されます。

S(n)=o(f(n))

アルゴリズムの実行に必要な補助空間が入力データ n に対して定数である場合、それは空間計算量と呼ばれます。アルゴリズム 補助空間は o (1);

再帰アルゴリズムの空間複雑さ: 再帰の深さ n*各再帰に必要な補助空間 各再帰に必要な補助空間が定数の場合、再帰空間の複雑さは o (n) です。

再帰的アルゴリズムの時間計算量の計算式は再帰的方程式です:

再帰的アルゴリズムの時間計算量はどれくらいですか

導入する前に例を検討してください。再帰ツリー:

T(n) = 2T(n/2) + n2
ログイン後にコピー

2 回反復して取得:

T(n) = n2 + 2(2T(n/4) + (n/2) 2)
ログイン後にコピー

さらに反復を続けて完全に展開すると、次の結果が得られます:

T(n) = n2 + 2((n/2) 2 +
2((n/22)2 + 2((n/23) 2 +
2((n/24) 2 +…+2((n/2i) 2 +
2T(n/2i + 1)))…))))……(1)
ログイン後にコピー

そして、n/2i 1 = = 1、反復は終了します。

式 (1) の括弧を展開すると、次の結果が得られます。

T(n) = n2 + 2(n/2)2 +
22(n/22) 2 + … + 2i(n/2i)2 +
2i+1T(n/2i+1)
ログイン後にコピー

これはたまたまツリー構造になっており、そこから再帰ツリー メソッドを導き出すことができます。

再帰的アルゴリズムの時間計算量はどれくらいですか

図中の (a)(b)(c)(d) は、それぞれ再帰ツリー生成の 1 番目、2 番目、3 番目、n 番目のステップです。各ノードでは、現在の空きアイテム n2 が保持され、2 つの再帰的アイテム T(n/2)

T(n/2) がそれぞれその 2 つの子ノードに割り当てられます。以下同様です。

グラフ内のすべてのノードの合計は次のとおりです:

[1 + 1/2 + (1/2)2 + (1/2)3 + … + (1/2)i] n2 = 2n2
ログイン後にコピー

その時間計算量は

O(n2)

ルールであることがわかります。再帰ツリーの式は次のように取得できます。

(1) 各層のノードは T(n) = kT(n / m) 現在の条件下での f(n) の f(n) の値n/m;

(2) 各ノードの分岐の数は k です;

(3) 各層の右側は、現在の層内のすべてのノードの合計をマークします。

別の例:

T(n) = T(n/3) T(2n/3) n

その再帰ツリーは次のようになります以下の図:

再帰的アルゴリズムの時間計算量はどれくらいですか#各層の値が n で、ルートからリーフ ノードまでの最長パスが

# であることがわかります。 ##最後の再帰であるため、停止点は (2/3)kn == 1 です。その後、

then


##つまり、

T(n) = O( nlogn) 再帰的アルゴリズムの時間計算量はどれくらいですか

要約すると、この方法を使用して再帰アルゴリズムの複雑さを解決します:

f(n) = af(n/b) + d(n)
ログイン後にコピー

1. d(n) のときは定数です:


2. d(n) = cn の場合:

再帰的アルゴリズムの時間計算量はどれくらいですか

3. d(n の場合) ) 他の状況では、再帰ツリーを分析に使用できます。

再帰的アルゴリズムの時間計算量はどれくらいですか 2 番目のケースから、分割統治法を使用して元のアルゴリズムを改善する場合、焦点は、新しい計算方法を使用して a の値を減らすことです。

以上が再帰的アルゴリズムの時間計算量はどれくらいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 関数の再帰的実装: 再帰の深さに制限はありますか? C++ 関数の再帰的実装: 再帰の深さに制限はありますか? Apr 23, 2024 am 09:30 AM

C++ 関数の再帰の深さは制限されており、この制限を超えるとスタック オーバーフロー エラーが発生します。制限値はシステムやコンパイラによって異なりますが、通常は 1,000 ~ 10,000 の間です。解決策には次のものが含まれます: 1. 末尾再帰の最適化、2. 末尾呼び出し、3. 反復実装。

C++ ラムダ式は再帰をサポートしていますか? C++ ラムダ式は再帰をサポートしていますか? Apr 17, 2024 pm 09:06 PM

はい、C++ ラムダ式は std::function を使用して再帰をサポートできます。std::function を使用して Lambda 式への参照をキャプチャします。キャプチャされた参照を使用すると、ラムダ式はそれ自体を再帰的に呼び出すことができます。

C++ 関数の再帰的実装: 再帰的アルゴリズムと非再帰的アルゴリズムの比較分析? C++ 関数の再帰的実装: 再帰的アルゴリズムと非再帰的アルゴリズムの比較分析? Apr 22, 2024 pm 03:18 PM

再帰アルゴリズムは、関数の自己呼び出しを通じて構造化された問題を解決します。利点は、シンプルで理解しやすいことですが、欠点は、効率が低く、スタック オーバーフローを引き起こす可能性があることです。非再帰アルゴリズムは、明示的に管理することで再帰を回避します。スタック データ構造の利点は、より効率的でスタックのオーバーフローを回避できることですが、欠点はコードがより複雑になる可能性があることです。再帰的か非再帰的かの選択は、問題と実装の特定の制約によって異なります。

Java で部分文字列の出現数を再帰的にカウントする Java で部分文字列の出現数を再帰的にカウントする Sep 17, 2023 pm 07:49 PM

2 つの文字列 str_1 と str_2 を指定します。目的は、再帰的プロシージャを使用して、文字列 str1 内の部分文字列 str2 の出現数をカウントすることです。再帰関数は、その定義内で自分自身を呼び出す関数です。 str1 が「Iknowthatyouknowthatiknow」、str2 が「know」の場合、出現回数は -3 になります。例を通して理解しましょう。たとえば、入力 str1="TPisTPareTPamTP"、str2="TP"; 出力 Countofoccurrencesofasubstringrecursi

C++ で配列の最小要素と最大要素を見つける再帰的プログラム C++ で配列の最小要素と最大要素を見つける再帰的プログラム Aug 31, 2023 pm 07:37 PM

整数配列 Arr[] を入力として受け取ります。目標は、再帰的メソッドを使用して配列内の最大要素と最小要素を見つけることです。再帰を使用しているため、長さ = 1 に達するまで配列全体を反復処理し、基本ケースを形成する A[0] を返します。それ以外の場合、現在の要素は現在の最小値または最大値と比較され、その値は後続の要素に対して再帰的に更新されます。この場合のさまざまな入出力シナリオを見てみましょう −入力 −Arr={12,67,99,76,32}; 出力 −配列内の最大値: 99 説明 &mi

C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? Apr 17, 2024 pm 03:09 PM

再帰関数の時間計算量分析には、基本ケースと再帰呼び出しの特定が含まれます。基本ケースと各再帰呼び出しの時間計算量を計算します。すべての再帰呼び出しの時間計算量を合計します。関数呼び出しの数と問題のサイズとの関係を考慮してください。たとえば、再帰呼び出しごとに再帰の深さが 1 ずつ増加し、合計の深さが O(n) になるため、階乗関数の時間計算量は O(n) になります。

C++関数の再帰の詳しい解説:文字列処理における再帰の応用 C++関数の再帰の詳しい解説:文字列処理における再帰の応用 Apr 30, 2024 am 10:30 AM

再帰関数は、文字列処理の問題を解決するためにそれ自体を繰り返し呼び出す手法です。無限再帰を防ぐために終了条件が必要です。再帰は、文字列の反転や回文チェックなどの操作で広く使用されています。

PHP 関数の時間計算量の問題にどう対処するか? PHP 関数の時間計算量の問題にどう対処するか? Apr 26, 2024 pm 02:12 PM

時間計算量は、関数の実行にかかる時間の尺度です。一般的な PHP 関数の時間計算量の問題には、入れ子になったループ、大規模な配列の走査、再帰呼び出しなどがあります。時間計算量を最適化する手法には、次のものが含まれます。 キャッシュを使用してループ数を削減する 並列処理を使用してアルゴリズムを簡素化する

See all articles