Bたーんぶろぐ

プログラマがそんなにテックでないことを書きます。

データ構造とアルゴリズムに挑戦し、C言語に倒れ、凹む。

アルゴリズムも勉強中

このところデータ構造とアルゴリズムの勉強に力を入れています。

データ構造とアルゴリズムは前に買ったオライリーの本を使っています。

この本には、アルゴリズムと共にC/C++の関数がサンプルプログラムとして併記してあるので、擬似コードとは違い、写経すれば実際に走るプログラムとしてアルゴリズムの確認が可能となっています。

最初のプログラミング言語としてC言語を勉強していた経緯から、この本は自分にピッタリとか思ってました。

 

思ったより知らないことだらけ

正直、自分の無知さ加減を舐めていました。

アルゴリズムなんて基本情報にも出てきたし基礎はわかるし!くらいに構えていた自分が恥ずかしい。

いきなり、計算量の見積もりのあたりで驚かされます。

マスター定理とか知らなかったです…

複雑なプログラムの計算量とかって、こうやって定式化されてたんだなぁ。

O(n)って大雑把にこのくらい的な、ラフな見積かと思ってたら案外数学的に厳密でした。

(このネタは面白いからもう少し勉強してからまとめよう)

 

再帰法についてならちょっと

そして、再帰の章はわかることも出てきてちょっとホッとしました。

ハノイの塔とか有名な問題を例題として出されていました。

あと、再帰的に解くべき問題とそうではない問題についての議論など、参考になりました。普通にループさせたほうが一般には再帰よりも速いんですね。

 

で、ここまでは順調に読み進められてきました。

実際、読み進めていても書き方も併用だし、訳に違和感もないし、本としては非常に良く出来ていると感じます。

 

連結リストの例題のに躓く

次が問題の連結リスト。

配列と対比しながら、C言語の例文とともに連結リストについて解説していきます。

ここである問題が…

自分、C言語忘れてる…

構造体まわりのポインタとか、ダブルポインタとか、確かに前に本で勉強したけど、だいぶ前から使った試しがない用法のオンパレード。

そういえば、C言語自体を最近そんなに使ってなかったっけなぁ…

そんなわけで、せっかくわかりやすくC言語で書かれてるはずの関数を読み砕き、動くようにmain関数を用意するのに、えらく時間がかかってしまいます。

アルゴリズム勉強しているはずが、C言語で躓くとか、なんと恥ずかしい…

連結リストについてはわかりましたが、C言語の知識に対して課題が残るという微妙な結果になりました。

 

これに懲りて、ちゃんとC言語を勉強し直そうと思います。

ああ、C言語書けるとか言ってごめんなさい…