先日、私は自分のコードでフィボナッチアルゴリズムを作成しようと考えていましたが、数学はうまくいきませんでした。コード内にアルゴリズムを実装するためのいくつかのポインタ
私は自分のループを使ってメソッドを書くことになりましたが、効率的でないか、「適切な方法」ではないようです。
誰かがコードでアルゴリズムを実装する上で推奨/読書資料を持っていますか?
先日、私は自分のコードでフィボナッチアルゴリズムを作成しようと考えていましたが、数学はうまくいきませんでした。コード内にアルゴリズムを実装するためのいくつかのポインタ
私は自分のループを使ってメソッドを書くことになりましたが、効率的でないか、「適切な方法」ではないようです。
誰かがコードでアルゴリズムを実装する上で推奨/読書資料を持っていますか?
この種のものにはProject Eulerが便利です。それはあなたがアルゴリズムについて考えることを強制し、それを実装する。多くの質問には、あなたが正しいことと間違ったことを見るのに使うことができる、問題を解決する方法(純粋な解決法からかなり独創的なものまで)に関する広範な議論があります。
ディスカッションスレッドでは、多くの異なる言語の他の人からのさまざまな実装も見つかります。自分自身で解決策を考え出し、それを他の人からのそれと比較することは、(イホ)良い学習方法です。
これらの入門書の両方がこの種のものについての良い情報を持っている: How To Design Programsとmoreso Structure and Interpretation of Computer Programs
の両方が重視ややfuncitonal(およびスキーム)ですが、それはこれらの種類の問題のための自然なフィット感です。その上で
、あなたはユーチューブ上のProject Euler
ゴーのうち、かなりの取得とアルゴリズム入門の講義の一部に見えるかもしれません。フィボナッチシリーズなどの最も一般的なアルゴリズムのいくつかを分解し、それらを最適化する方法については、本当に良い講義があります。
O表記について読んでみると、可変サイズの入力でアルゴリズムがどのように拡大するか、またアルゴリズムの実行時間を分類する方法を理解できます。
私は件名に優れた材料を発見したこのビデオシリーズでスタート:
は、あなたのアルゴリズムのテスト駆動を導出します。私は以前よりもずっと複雑なアルゴリズムをTDDを使って正しく書くことができました。
Kent BeckはTDDを使用してフィボナッチシーケンスを実装し、再帰的ソリューションで終わる例があります。適切なソリューションは、パフォーマンスが向上し、無限のストリームを理解するのに役立ち、サブパルスソリューションの再帰を理解するのに役立ちますので、「ループあり」でなければなりません。 –
反復を反復に変換することは、最適化されていないコンパイラの標準リファクタリングです。 –
テール再帰のためのリファクタリングは、ヒープベースのスタックを使用したリファクタリングと同様に機械的です。実行時の動作も変更しないでください。しかし、Fib(n)は、ある種の分析では、反復的に解を構築するほうが反復的に減少するよりも速いことを示す1つのケースです。それは新しいアルゴリズムの開発であり、標準的なリファクタリングではありません。 TDDはどのように役立ちますか?たとえば、TDD(BeckまたはBernhardt参照)で見つかった再帰的解にテストケースとして「fib(50)」を追加し、10分後にプロセスを終了します。 Fowlerは、このリファクタリング "代入アルゴリズム"をOPと呼んでいます。 –
fibonacci関数の擬似コードを自分の言語に翻訳できない場合、基本的な慣用句をまだ把握していないように見えるので、あなたの言語の基本チュートリアルを見つけてください。
解決策はありますが、それについて不安を感じる場合は、他の人に見せてレビューしてください。
質問が不明です。 "コードでアルゴリズムを実装する"?アルゴリズムは常に特定の言語(=コード)で与えられるので、何を要求していますか? – akappa
akappa、それは実際には真実です。多くの場合、アルゴリズムは擬似コード、またはOP、数式記法で与えられた例で記述されます。 – Anthony
それは正しくAnthony、私はフィボナッチシーケンスのウィキペディアで擬似コードを見ていた。私はこれをコードに変換する方法を知らなかったので、それを実行する悪い方法だと思う結果を見て解決策を 'リバースエンジニアリング'しなければなりませんでした。 –