活動報告14(2021年12月)
プロジェクト薬箱「Python編(中級1)」
今月からPython中級編がスタート。ある程度の知識が身についたと感じられるものの、コードが自由に書けるレベルには程遠い。どこかの本に書いてあったが、これを家づくりに例えると「道具の使い方を知っているだけでは家を建てることはできない」ということになるそうだ。確かに知識があればコードを読めるようになるが、実際にコードを組めるようになれるかは全くの別問題だ。そこで、具体的なコードに数多く触れて、実際にプログラミングしてみる地道な作業が要求される。今月はこの段階を少しでも効率化するために、アルゴリズムを学ぶことにした。
まずは、8冊目:株式会社アンク (2019) 「アルゴリズムの絵本 プログラミングが好きになる新しい9つの扉」。推薦されていたので購入したが、例題ではC言語を用いていることに後から気付いた。switch文などあって良く理解できないので、腕試しとして例題をPythonで書き直してみることにした。
カレンダー作成や、素数・素因数分解・最大公約数を求めるプログラムを作るのは非常に楽しめた。一方で並べ替えアルゴリズムのうち挿入ソートでは苦労して、この項目だけで作成に1週間を費やした。特に、対象の数字が挿入される範囲が広がる一方で、挿入する位置を後ろからずらしていく工程のコード化は難しかった。せっかくの機会なので、各ソート法の処理速度を比較するために、ランダムに作成した1000個の数列の並び変えで試してみた。結果は、せっかく作成したソート法はどれも遅く、Pythonの標準アルゴリズムであるTimsortが異次元の処理速度を発揮した。
続いて9冊目:石田保輝、宮崎修一 (2017)「アルゴリズム図鑑 絵で見てわかる26のアルゴリズム」。ただし、こちらは同一内容のアプリ版を利用した。本よりも圧倒的に値段が安く、26のアルゴリズムの動作をアニメーションで表現してくれるので分かりやすい。プログラムの記述は一切ないが、各種ソートに始まり、データ圧縮やセキュリティまで網羅的に仕組みが解説してある。前半部分は何となくプログラムの構成が頭に浮かぶのだが、後半部分は複雑となって表面上の理解しかできなかった。
以上、8冊目、9冊目を終了しての感想は、アルゴリズムというものはコンピュータに最適化された解法手順として、単純に読むだけでも面白く、知的好奇心をかきたてるものであった。ループ等の単純な制御構造を重層化し、それをコンピュータの演算能力を利用して膨大に繰り返すことで、複雑な問題にも対処できるようにしたというのが、プログラムの基本構造だと実感できた。