アルゴリズム複雑度に関する簡単なタスクの解法
3830 ワード
だからここで解決策です.読みやすい質問を繰り返す
非常に悪いフィボナッチの実装を紹介します.
実装は、不要な作業の多くを作る1つの数を複数回再計算します.より効率的な実装は単純な
それは指数関数です.しかし、それは正確には見えません
O ( 2 n ) O ( 2 ^ n ) O ( 2 n )
すべての呼び出しが2つの再帰的な呼び出しを生じるというわけではないので、それは「左」再帰呼び出し
Sketchpad
それは、指数的に非等しい側で若干の空想的な図に見えます😄 そして、タスクはその「面積」を計算することに等しいです.私はそれを正確に計算するための簡単な方法だが、それは確かにその限界を推定することだ!辺が等しい、そして、図形高さが元の図の左側のそれと等しいならば、結果として生じる面積は
O ( 2 n/2 ) O ( 2 ^{ n/2 }) O ( 2 n/2 )
辺が等しい、そして、高さが元の図の右側のそれと等しいならば、結果として生じる面積は
O ( 2 n ) O ( 2 ^ n ) O ( 2 n )
そして、それは答えです!複雑さ
XXX
本来の機能
O ( 2 n/2 )< x < o ( 2 n ) O ( 2 ^{ n/2 })< x < o ( 2 ^ n ) O ( 2 n/2 )< x < o ( 2 n )
このソリューションを読んでくれてありがとう.あなたが問題声明でポストを読んだならば、二重に感謝します.トリプルのおかげで試してみてください!あなたが面白いもののこの種を見つける場合はいくつかのフィードバックを残して検討してくださいので、私は短く、楽しいプログラミング演習を発表し続けます.感謝🙏
非常に悪いフィボナッチの実装を紹介します.
function fib(n) {
if (n <= 1) {
return 1
}
return fib(n - 2) + fib(n - 1)
}
最初の質問はとても簡単です.Q1. What's wrong with this implementation and how to fix it?
アンサー
実装は、不要な作業の多くを作る1つの数を複数回再計算します.より効率的な実装は単純な
for
-ループです.function betterFib(n) {
let r1 = 1;
let r2 = 1;
for (let i = 2; i <= n; i++) {
const _r2 = r2;
r2 = += r1;
r1 = _r2;
}
return r2;
}
それは“機能的に純粋ではない”、それはうまく翻訳された数学の式のように見えません.しかし、それは速い作品!Q2. What's it complexity in terms of ? How to estimate and prove it?
アンサー
それは指数関数です.しかし、それは正確には見えません
O ( 2 n ) O ( 2 ^ n ) O ( 2 n )
すべての呼び出しが2つの再帰的な呼び出しを生じるというわけではないので、それは「左」再帰呼び出し
fib(n - 2)
が「正しい」ものより速く再発ベースに達するので、それです.呼び出し木をスケッチしましょう.Sketchpad
それは、指数的に非等しい側で若干の空想的な図に見えます😄 そして、タスクはその「面積」を計算することに等しいです.私はそれを正確に計算するための簡単な方法だが、それは確かにその限界を推定することだ!
O ( 2 n/2 ) O ( 2 ^{ n/2 }) O ( 2 n/2 )
O ( 2 n ) O ( 2 ^ n ) O ( 2 n )
XXX
本来の機能
fib
の間隔は、O ( 2 n/2 )< x < o ( 2 n ) O ( 2 ^{ n/2 })< x < o ( 2 ^ n ) O ( 2 n/2 )< x < o ( 2 n )
このソリューションを読んでくれてありがとう.あなたが問題声明でポストを読んだならば、二重に感謝します.トリプルのおかげで試してみてください!あなたが面白いもののこの種を見つける場合はいくつかのフィードバックを残して検討してくださいので、私は短く、楽しいプログラミング演習を発表し続けます.感謝🙏
Reference
この問題について(アルゴリズム複雑度に関する簡単なタスクの解法), 我々は、より多くの情報をここで見つけました https://dev.to/alekseiberezkin/solution-to-the-simple-task-on-algorithm-complexity-4f2iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol