現象: 再帰は、アルゴリズムの原理をうまく説明できる古典的なアルゴリズム実装です。再帰は、アルゴリズムの説明、パフォーマンス、コード構造の理解に適しています。 しかし、この記事で言いたいのは、Java で再帰アルゴリズムを実装するときには、再帰を使用せず、非再帰実装に変換するようにすることです。 最近、より複雑なアルゴリズムを実装する際に試してみたところ、非再帰実装では再帰実装に比べて速度が 1/3 向上することがわかりました。 次の簡単な例を見てみましょう: (注: 説明を簡略化するために、ここでは簡単な例のみを使用しています) 入力パラメータ: N 出力: log1+log2+log3+....+logN 2 つの実装コードは次のとおりです。 Javaコード
実行結果は次のとおりです。
再帰実行時間は非再帰実行時間のほぼ 2 倍であることがわかります。 (注: 上記のコードは、パラメータ -Xss200m の下で実行されます。スタック スペースが不足している場合は、直接実行できません) 理由の簡単な分析: 上図は、Java スレッド スタックの構造を示しています。 Java はスレッドごとにスタックを維持し、スタックはメソッドごとにスタック フレームを保存します。スタック フレームはメソッドの実行状態を表します。 これは、メソッド スタックと呼ばれることが多いものです。 ***1つは現在実行中のスタック フレームです。 各メソッド呼び出しには次の内容が含まれます。 1. 新しい呼び出しメソッドのスタックフレームを生成する 2. 現在のメソッドのスタックフレームの状態を保存する 3. スタック フレームのコンテキストが *** メソッド スタック フレームに切り替わります。 再帰的な実装はスタック メモリの消費 (多くの場合、Xss パラメータの調整が必要) とスタック フレームの作成および切り替えによるパフォーマンスのオーバーヘッドにつながり、最終的には効率に大きな影響を与えます。 したがって、アルゴリズムの効率を向上させたい場合は、再帰を使用しないことが基本原則です。 さらに、再帰はアルゴリズムを理解するために使用する方法です。コードに実装すると、基本的に非再帰的なコード実装に変換できます。 |
2023年は大きな言語モデルと着実な普及の年です。時系列の分野ではそれほど大きな成果は得られていませ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
AI プロンプト エンジニアリングは、AI ツールを使用して望ましい結果を生み出す効果的な方法です...
人工知能は、その概念が最初の電子メールウイルスと同じくらい古いにもかかわらず、「ネットワークにおける...
「21世紀で最も成功した手術」として知られる人工股関節全置換術(THA)では、まもなく最新のAI技...
最初の 10 個は、聖書からのトップ 10 アルゴリズムです。発起者からの説明: Proofs fr...
今日から、全国各地の大学入試結果が続々と発表され、出願手続きが始まります。今年、各大学は、専門分野、...
[[408565]]香港のサウスチャイナ・モーニング・ポストに6月29日に掲載された記事「中国の道...
スマートホームはテクノロジーを活用して、居住者にさらなる利便性、節約、快適性、セキュリティを提供しま...
本日、Google の研究科学者 Kevin P. Murphy 氏は、「確率的機械学習: 上級」の...
ゼロショット学習は、トレーニングプロセス中に出現しなかったカテゴリの分類に重点を置いています。意味記...