薫のメモ帳

私が学んだことをメモ帳がわりに

「アルゴリズムとデータ構造」を学ぶことにする

 前回の記事で、「プログラミングとの距離」を維持するためにPaiza(Paizaラーニング)というサイトのスキルチェックの問題を継続的に解き始めることにした旨書いた。

 さらに、この状況がそこそこ続いたことから、この状態を維持するために「来年度末までに『Paizaのスキルチェック』に挑戦し続けてAランクを目指す」旨宣言した

 

hiroringo.hatenablog.com

 

paiza.jp

 

 

 当然だが、現状の実力のままAランクの問題が解けるとは考えられない。

 なぜなら、真面目に取り組んでいた去年の6月の段階でAランクの問題に歯が立たなかったし、現在の実力が去年の6月よりも上であるとは到底考えられないからである。

 

 もちろん、私は闇雲にAランクを目指すといった非効率なことをするつもりはない。

 そこで、インターネットで情報収集をした。

 その結果、Aランクを目指す上で「アルゴリズム」や「データ構造」を理解することが重要であることを知った。

 そこで、アルゴリズム」と「データ構造」について学ぶことにした。

 

 

 この点、私の手元には、約10年前に私が本格的にプログラミングを学ぼうと考えたときに購入したアルゴリズムとデータ構造に関する次の書籍がある。

 

 

 この点、この本で学ぶ内容は(当時における)最新のプログラミング言語や技術ではなくて、プログラミングにおいて利用され続けているアルゴリズムやデータ構造の基本、らしい。

 また、本書の目次を見る限り、この本で学ぶことは「現在でも重要なアルゴリズムやデータ構造」が含まれているようである。

 

(以下、上のリンクに記載されている「目次」に関する部分を引用)

第1章 ソート

第2章 サーチ

第3章 リスト

第4章 スタック&キュー

第5章 再帰呼び出し

第6章 ツリー構造

第7章 マップとハッシュ

第8章 浮動小数点型と数値計算

第9章 文字列検索

第10章 バックトラック法と幅優先探索

第11章 動的計画法

第12章 アルゴリズムで遊ぶ ~ テンパズルに挑戦

第13章 グラフ構造

(引用終了)

 

 さらに、アマゾンの評判を見るに「この本の出来が悪い」ということはない。

 そこで、この本で学ぶ内容が古い、ということはないと考えられる。

 

 

 また、上の目次に登場する言葉(ソート、サーチ、リスト、スタック、キュー、再帰呼び出し、ツリー構造、マップ、ハッシュ、浮動小数点型、数値計算、文字列検索、バックトラック法、幅優先探索動的計画法、グラフ構造)の一部については、どこかで聴いたことがある(残りは言葉すら知らない)。

 しかし、「それらの聴いたことのある言葉を自分の言葉で説明せよ」と言われても、私には答えられるだけの能力がない。

 そこで、本書の内容が私の知らない内容を含んでいること、本書を学ぶことが私にとって有益であるとは言えそうである。

 

 さらに、本書のソースコードはC(C++)やJAVAで書かれている。

 そして、以前の私はある一連のプログラムを作る際にC++を利用していたことからC++に触れていたことがあった。

 そこで、本書のソースコードの写経はC++の復習につながるだろう。

 また、最近の私は専らRubyやPythonを利用しているところ、本書のプログラミングの内容をRubyやPythonで書きなおすことで、プログラミングのスキルを高められるだろう、、、多分。

 

 したがって、「本書をちゃんと読むこと」・「本書に書かれているコードの写経を行うこと」・「本書の内容を本書で書かれていない別の言語での再現すること」は、私にとって相応の価値がありそうである

 まあ、リソースとの関係上、私がどこまでできるかは分からないとしても。

 

 

 最後に、近頃、Paizaのスキルチェックを解きなおしていると、RubyやPythonの超基本的な構文について「これってどう書くんだっけ・・・」と悩むことが時々あった。

 この辺はperlの方が覚えていると感じなくもない。

 そこで、プログラミングの教科書を一度読むともに記載されているソースコードを写経することで文法に関する知識の再復習をしようか、と考えている。

 もちろん、RubyとPythonの両方を一同時に行うのもあれなので、最初に、私が過去利用していたPythonの教科書を読みながら登場するソースコードを写経して、次に、私が過去利用していたRubyの教科書を読みながら登場するソースコードを写経しようか、と考えている(リンク先は最新の版だが、私が持っているのは当時の版)。

 

 

 

 

 以上、「プログラミングとの距離の維持」について年度内において具体的な目標と目標を達成する手段を決めた。

 来年度末、この目標をどこまで達成しているだろうか。