「ポインタ」の概念を学ぶ
わく☆すた,美月です。
今日,アルゴリズムの研修をしていて思ったんですけど,応用情報技術者試験のアルゴリズムって,なにげに「ポインタ」を題材にしたものが多いです。
リスト構造とか,二分木とかのデータ構造を表現するのに,ポインタの概念がわかっていないと解けないような部分を突いて問題にしています。問題文中には,「参照」と書いてあることが多いです。Javaの参照渡しなどでも使われていますが,メモリの番地を格納して,次のデータの位置を示すという考え方は,プログラミングをする上では大切です。
アルゴリズムの問題というと,つい,定番のアルゴリズムを覚える,とかそんな感じの勉強に行ってしまいがちですが,そんなことしなくても,午後問題は解けます。ただ,順次/選択/繰り返しの基本3構造や,配列やスタック,リストなどのデータ構造の表し方などの基本は押さえておく必要があります。その上で,プログラミングのスキルがあれば,問題を理解して,その場で考えて解けると思います。
このとき,プログラミングのスキルとしては,「C言語」をちゃんとわかってるといいです。
アルゴリズムの問題は,建前上はどんな言語にも依存しないことにはなっていますが,応用情報技術者試験レベルになると,言語依存の部分も結構出てきます。そこで出てくる元の言語は,C言語を推測させるものが多いです。Javaなどのオブジェクト指向言語のスキルは,アルゴリズムよりもむしろ情報システム開発の問題でよく使うように感じています。
ですので,一見遠回りかもしれませんが,確実にアルゴリズム問題を解けるようになるためには,今知っているプログラミング言語に加えて,C言語を学習するのもいいのかな,と思います。もちろん,C++でもいいのですが,「ポインタ」の概念を学べる言語がおすすめです。
といっても,初級向けの本で,文法だけ学んでも意味がありません。
ポインタと構造体が理解できて使いこなせるレベルまでは最低限必要です。
個人的なお気に入りに,「C言語ポインタ完全制覇」という本があるのですが,この本が理解できるレベルぐらいやれば十分です。
アルゴリズムの問題は,基本的に演習の分量をこなすことで,慣れて解きやすくなります。
ですので,問題演習を数多くやることが,学習の王道ですが,基本的な知識がないと,読んでいても全然解けないことはあります。そういった場合には,ポインタを中心とした,プログラミングの考え方についての知識を身につけるというのもおすすめです。
自分に,何が足りないのかを明確にして,必要な知識を身につけていきましょう。