HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【書評】アルゴリズムとデータ構造:プログラミング中上級者への架け橋

 

 

follow us in feedly

紹介

私は実は元々物理に興味があり、工学部で大学生をしていたときには物性や連続体力学等を学び最強の材料()を作り上げてやるということを考えていました。しかし、実験という地味でかつ大変な作業に馴染めなさそうだということが相まって、物理現象というよりは何らかの事象を数理モデルで考察することが好きなのであるということに学部後半で気づきました。

そこから方向転換し、数理モデルを扱う情報系の分野に進むことにし、プログラミングを(当時はしぶしぶ)やるということとなりました。無論、アルゴリズムとデータ構造を体系的にしっかりと学んだことはなく、信号処理や制御、機械学習を学ぶ過程で触れるものに関してつまみ食いするという具合でした。

しかし、情報分野を謳うからには、プログラミングに関しても正式な知識を身につけたく

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

  • 作者:大槻 兼資
  • 発売日: 2020/10/02
  • メディア: 単行本(ソフトカバー)

を手に取ることにしました。

大学の図書館でパラパラとこの手の本を捲ると、大抵は、天下り的にアルゴリズムが先にあり、そのアルゴリズムでどんなことが出来るのか、なんですごいのかが紹介されているという様子でした。

イチから自分で勉強しなければならない私にとって、その手の(辞書的な?)本は中々読みすすめるのが辛かった記憶があります(というか読み進められていない)。もちろん当時の自分の実力が不足していたから、どの本を読んでも駄目だったのかもしれません。

しかし、今回紹介する本が当時あれば、きっと読み進めていたんじゃないか?そんなふうに思える本です。

特徴

本書では、自分でアルゴリズムを構築できるように、そのようなアルゴリズムを考える過程を含みながらの説明がなされます。本書を読むと、なぜにそんなことをするのか、どういうときにそれを思いつくことになるのかが(豊富な例と演習問題)を通して身について行く感覚が味わえます。また、ある問題に対して、それを効率よく解く方法が複数ある、すなわち別解があるという場合にはそれが明記され、各アルゴリズムの章で繰り返しその問題を振り返ります。

単に公式的にアルゴリズムが提示され、このアルゴリズムはこの問題に使います、という紹介に留まっていないところがこの本書の最大の特徴でしょう。同じ問題をわざわざ別のアルゴリズムで解こうとする試みは、そのアルゴリズムでのアプローチの過程を強く意識することになり、しっかりと読み進めて行けば間違いなく力のつくこと間違いなしです。

ただし、全くの初心者が手に取るには少し難しく、ある程度プログラミングを経験している必要はあるでしょう。場当たり的にでもとにかく目的を達成し、動くコードを必死に書いているというレベル感の人が、効率の良いコードを書く指針を身につけるのに最適な本となっています。

特に本書のコードはC++を用いて書かれているので、これを読める必要があるでしょう。

おそらくAtcoderに参加している人にとっては当たり前くらいの内容なのかもしれませんが、職業プログラマとしてこのレベルを理解できていれば、個人的には十分に中上級者に入ると思われます。

迷っている人は是非、買いです。