現象: 再帰は、アルゴリズムの原理をうまく説明できる古典的なアルゴリズム実装です。再帰は、アルゴリズムの説明、パフォーマンス、コード構造の理解に適しています。 しかし、この記事で言いたいのは、Java で再帰アルゴリズムを実装するときには、再帰を使用せず、非再帰実装に変換するようにすることです。 最近、より複雑なアルゴリズムを実装する際に試してみたところ、非再帰実装では再帰実装に比べて速度が 1/3 向上することがわかりました。 次の簡単な例を見てみましょう: (注: 説明を簡略化するために、ここでは簡単な例のみを使用しています) 入力パラメータ: N 出力: log1+log2+log3+....+logN 2 つの実装コードは次のとおりです。 Javaコード
実行結果は次のとおりです。
再帰実行時間は非再帰実行時間のほぼ 2 倍であることがわかります。 (注: 上記のコードは、パラメータ -Xss200m の下で実行されます。スタック スペースが不足している場合は、直接実行できません) 理由の簡単な分析: 上図は、Java スレッド スタックの構造を示しています。 Java はスレッドごとにスタックを維持し、スタックはメソッドごとにスタック フレームを保存します。スタック フレームはメソッドの実行状態を表します。 これは、メソッド スタックと呼ばれることが多いものです。 ***1つは現在実行中のスタック フレームです。 各メソッド呼び出しには次の内容が含まれます。 1. 新しい呼び出しメソッドのスタックフレームを生成する 2. 現在のメソッドのスタックフレームの状態を保存する 3. スタック フレームのコンテキストが *** メソッド スタック フレームに切り替わります。 再帰的な実装はスタック メモリの消費 (多くの場合、Xss パラメータの調整が必要) とスタック フレームの作成および切り替えによるパフォーマンスのオーバーヘッドにつながり、最終的には効率に大きな影響を与えます。 したがって、アルゴリズムの効率を向上させたい場合は、再帰を使用しないことが基本原則です。 さらに、再帰はアルゴリズムを理解するために使用する方法です。コードに実装すると、基本的に非再帰的なコード実装に変換できます。 |
今週、データマイニングのトップカンファレンスであるACM KDD 2023が米国ロングビーチで開幕し...
[[282843]]人工知能は未来の道を歩み続ける注目すべき技術です。この進化する時代において、それ...
猫を飼うことで生じる混雑により、人々はブロックチェーンの力に驚嘆し始めました。数字で構成されたこの世...
人間にとって画像を認識するのは簡単ですが、機械がそれを実現するには長い時間がかかりました。コンピュー...
[[404642]]この記事はWeChatの公開アカウント「roseduanの執筆場所」から転載した...
誰もが知っているように、昔は銀行に行って業務を処理するには長い列に並ばなければなりませんでした。業務...
人工知能が話題になるにつれ、コーディングも親たちの注目の的になっています。実は、子どもにプログラミン...
[[405121]] 【51CTO.com クイック翻訳】企業の AI プロジェクトの失敗率が 85...
著者: Xiao Yanghua、復旦大学コンピュータ科学技術学院准教授、博士課程指導教員、上海イン...
2017年に人工知能が国家戦略目標となって以来、関連産業は急速な発展の機会を迎え、世界で最も収益性の...
サイエンスフィクションネットワーク、11月18日(朱熹偉)技術の発展に伴い、さまざまな形や大きさのロ...
OpenAIの「宮廷闘争」ドラマはもうすぐ終わりを迎える。 CEOのサム・アルトマンは取締役会によっ...
過去数十年にわたり、チャットボットは進化を続け、私たちの日常生活に欠かせないヘルパーになりました。携...
SRは大きな進歩を遂げました。一般的に、既存の SR 技術研究は、教師あり SR、教師なし SR、特...