これは 私の前の質問 の続きです。ここで、アルゴリズムとデータ構造を学習する必要があるかどうかを尋ねました。そうだと思います。
今では、実験的に、または実際に、あるいはどんな課題でも、それを学ぶ機会が得られない環境で働いています。アルゴリズムとデータ構造を学習するために6か月または1、2年与えることができる適切な本、適切な種類の問題、適切な種類のリソースのような適切なアプローチは何ですか?また、問題をデータ構造やアルゴリズムに関連付けることができるように私の心を形作ります。
読み取り。
いいえ、本当です、読んでください。
アルゴリズムと設計に関するすべてを読み、可能な限り見つけることができます。そこには驚異的な本があります。 Sedgewickアルゴリズムの本は良いです。スキーナによるアルゴリズム設計マニュアルも良いです。これらの本は一緒に、私が行ったすべての仕事のすべての本棚で、The Mythical Man-Monthとともに私についていきます。
次に質問します。
あなたが尊敬する人と話してください。彼らにどのような意思決定ポイントがあったのか、なぜ彼らが決定を下したのかを尋ねます。良い人はいつでも「Xを選ぶことにしたのは、このようにA、Bより優れているからです。Cと一緒に行けたかもしれませんが、これがより良い選択だと感じました」。
次に、実行します
ものを構築します。決して使用しないものを作成します。必要のないものを作成します。数独パズルを解くプログラムを書いてください。もう一度やり直してください。そしてまた。 5つの完全に異なる方法でビルドします。数独パズルを生成するプログラムを作成し、ソルバーにフィードします。最速のソルバーを見つけます。その後...
理由を見つけてください。
「何を」はほとんど決して重要ではありません。つまり、そうです、手元のプロジェクトを完了することは重要ですが、最後に、「なぜ」を知らずに「何を」を知っている場合、そもそもそれを行ったことがないかもしれません。あなたはあなたの履歴書に弾丸ポイントを得ました。クッキーを手に入れて、お祝いしましょう。 「なぜ」は「何」よりもはるかに重要です。
そして、記録のために数独は一例でした。私は、Kongregateで大量のロジックパズルを使って、この演習を自由に過ごし、途中で多くのことを学びました。
http://www.Amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/http://www.Amazon.com/Algorithm-Design -Manual-Steven-Skiena/dp/1848000693 /http://www.Amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/
12歳の時、グループで魔法のレッスンを受けました。魔術師の名前はジョーカロタでした。彼は一度トリックをした、そして私は「どうやってそれをやったの?」と言い切った。その日以来、彼は私に付き合っている何かを言いました。
ジョーの返答:「マイケル、本当にそのトリックがどのように行われるのかを知りたいのなら、自分でそれをどうやって行うのかを理解しなければなりません。」
もちろん、それは私が聞きたかったことではありませんが、問題解決に集中することができました。これは私の観点からの問題解決でした。問題を解決するための私の最初の試みが17のステップを踏み、本当に不器用だった場合、良いニュースは問題を解決したことでした。
次に、私が開発したソリューションを見て、そのソリューションを改善する方法を探すことで、最終結果を合理化する方法を学びます。コンピュータプログラミングの人生の後半で、このプロセスが "Stepwise Refinement"と呼ばれていることがわかりました。今日、彼らはそれをリファクタリングと呼びます。
それは機能しましたが、今でも機能します。
ここで次のリンクは、最も成功したDSおよびAlgorithmsクラスの1つにMIT私が今までフォローしたことのあるクラスにリダイレクトします。
http://academicearth.org/courses/introduction-to-algorithms
このビデオシリーズをお楽しみください。幸運を !!!
オンラインコースを受講できるか、または個別指導を受けることができるかどうかを確認してください。それが失敗したら、 これは簡単なGoogle検索でポップアップしました。 私はこの春にこのクラスを受講しました(最初に、EEからソフトウェアに移行しました)。 ポインタをよく理解している場合。
このコースを受講できない場合は、アルゴリズム設計マニュアルをお勧めします。無料のPDF here がありますが、プロのプログラミングを計画している場合は、実際の本を入手する価値があります。
たとえば sphere online で古典的な問題の解決に取り掛かります。サイトはそれほど豪華ではないかもしれませんが、これらは今日使用されている重要なデータ構造とアルゴリズムの多くを必要とする古典的なプログラミング問題です。
ソリューションは、C/C++からJavaScript、LISP、Smalltalk、アセンブラ+約40まで、さまざまなプログラミング言語で提出できます。したがって、使い慣れたプログラミング言語で問題を解決することに専念できます。
これは私のお気に入りのリソースです。私は学部のコンピューターサイエンスアルゴリズムコースでそれを使用し、4年後に自分で本を購入して自分のM.S. Comp Sciコース。それは決して簡単に読むことはできませんが、提示された数学/証明のいくつかを理解してから、お気に入りの言語で疑似コードを実装する場合は、いくぶん高額な値札に値する価値があります。他の人が言及したアルゴリズム設計マニュアルも問題の特定を学習するための優れたリソースですが、CLRSは純粋な詳細に優れていることがわかりました。
データ構造とアルゴリズムの学部レベルのコースに登録してみてください。これらの概念を他の人と一緒に学ぶことは常に良いことです。
あなたはいつもこのようなことを試すことができます: http://codekata.pragprog.com/
私は読書とは対照的に、それを考えることによって常によりよく学びました。ただし、回答を探すためのドキュメント/読み物が必要です。
これを買う 本 、これを借りるか、これを盗む!残りは続きます:)
RivestとCormenによるアルゴリズムの紹介。はじめにMergesortの説明を通過すると、最初に従うのが非常に難しくなります。すべてが美しくあなたに展開します。
さらに、あなたが本で与えられた問題を解決すれば、あなたはより良くなるでしょう。卒業後も本を手放したくなかった。美味しいです。