データ構造とアルゴリズムの勉強を始めたきっかけ
データ構造とアルゴリズムの勉強そのものは数か月前に着手したものの、思うようにいかず、何をしたらいいのか模索していました。
独学で自走するというのも結構大変だなあと感じているのだけど、まだまだ初心者街道進行途上のため、記録を残すとともに、後々参考になる人がいればと思います。
最初に:アルゴリズムを勉強する目的って何?
アルゴリズムの知識を勉強しようと思ったとき、それが何の役に立つのかというのが一番気になるポイントだと思います。IT関連の資格は意味がない!資格など必要ない!という人もいれば、業務上、資格は合格レベルの知識があるのが当然だから、持っているのが当然という人がいたりします。アルゴリズムも同様で、人によって受け止め方が違うようです。
その中で参考になったのが、Hacker's liveの方の話で、要旨をまとめておくと、外資などアップサイドの企業に就職しようとすると、
・コーディング・インタビューでアルゴリズムの知識を問われる
・アルゴリズムを実際に仕事で使うというより、その知識を抽象化して汎用性を持たせることができる→仕事の効率が上がる
といったことがあるようです。
効果としては、
・年収が上がる
というまとめになっており、非常に参考になりました。外資系や年収を上げたいプログラマー志望の人には、しっくり来る話かと思います。
一方で、アルゴリズムは習得難易度も高いため、高いレベルの知識が必要かと言われるとそうでもないようです。そもそも数的思考のような抽象度の高い能力が求められており、得手不得手は分かれてきたりするものの、コーディング・インタビューを切り抜けるぐらいのレベルがあれば十分でしょう。アルゴリズムができても仕事能力はいまいちという人も中にはいるようで、これだけでは判断できないみたいですね。
勉強素材
最後に私はあくまでアルゴリズム初心者なので、勉強材料を数点ピックアップしておきます。
Python で学ぶアルゴリズム とデータ構造(初級編)【丁寧な解説+Python 実装でアルゴリズム の基本を学習】
Python で学ぶアルゴリズム とデータ構造(中級編)【丁寧な解説+Python 実装でアルゴリズム の基本を学習】
競プロ(競技プログラミング)の存在を知って、初めて購入した本が『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』という本(いわゆず螺旋本)でしたが、実践的すぎるため、初学者にはさっぱり理解できるような内容ではありませんでした。無料学習サイトのようなものも見当たらず、悶々としながらプログラミングの勉強をしていたときに出会ったのがudemyの講座です。
ただこれもアルゴリズムの初心者ではあってもプログラミング初心者を対象とはしていません。pythonの基礎文法ができていることが前提となっているため、progateやドットインストールなどで少し基礎をつかんでから始めたほうがいいですね。
アルゴリズム学習で有名なサイト
競プロの実力を高めていくためには3つの有名なサイトがあります。
AOJ(Aizu Online Judge)
基本的な文法を学んだ上で組める問題が数多くあります。言語も多くから選択でき、学習者の解答例も見ることができます。一つの問題に対してアプローチが無数にあるのでおもしろいですね。
Leetcode
私がやってみたところまだ実力不足で難易度easyでも手こずっている有様です。AOJは入門者に向いているようですね。基礎固めが終わったらぜひ。
競プロサイト。月に3回ぐらい?土曜か日曜にABCが(Atcoder Beginner's Contest)開催されています。コーダーのレベルを色分けしており、先日、医者からグーグルに転職された方が話題になっていました。短期間でアルゴリズムの習得に成功して驚いている人がたくさんいましたが、水色コーダーの方でした。1,2年かけて水色になる人はそれなりにおられるよう(それでも難しい)ですが、1,2ヶ月程度で取得はなかなかないようです。
では
参考までにどうぞ。