今回はデータ構造やらプログラミングの話だ!
うぎゃー、レベルが高そう…!ついていけるかな。。
大丈夫、実際にプログラミングをやるわけではなくて、どういった仕組みでプログラムが動いているのかって部分だから
逆にこれを知っていればプログラミングの時も理解が早くなるっていうお得な知識だよ!
お、お得な知識!コスパ最強!!
データ構造
まずはコンピュータにどんな感じでデータが保存されているのかを解説していくよ。
データ構造は様々あって、プログラムを作るときに目的にあった構造を選ぶことで効率の良いプログラムを作ることができるんだ。
キュー
先に入ったデータが先に出てくるFIFO形式(First In First Out)のデータ構造のことをキューと呼ぶんだ。
ところてん方式とも呼ばれ、一般的な待ち行列のイメージだよ。
ATMで待っている時は最初に並んだ人からATMを利用して出ていくよね。
キューはそういった仕組みのデータ構造だよ。
スタック
後に入ったデータが先に出てくるLIFO形式(Last In First Out)のデータ構造のことをスタックと呼ぶよ。
つつに入れたテニスボールみたいなイメージに近い。
プッシュと呼ばれるデータを入れる動作をして、POPと呼ばれるデータを取り出す作業をする。
図にするとこんなイメージがスタックだよ。
木構造
木を逆さまにしたような形で分岐しながらデータが配置されている構造を木構造と呼ぶんだ。
パソコンのファイルシステムやDNSはこの木構造をしているよ。
リスト
データとデータをポインタと呼ばれる次のデータのアドレスを示す要素で結ぶ形式の構造をリストと呼ぶよ。
後からデータを挿入したり削除するときに、ポインタの変更だけで済む柔軟さがメリットなデータ構造だ。
1つの方向に結ばれているリストを単方向リスト、両方向に結ばれている双方向リストという種類があるんだ。
図にまとめるとこんな感じだよ。
配列
データ構造ラストは、配列だ。
データを連続して並べる形式の構造だよ。
そえじを使うことでどのデータにアクセスするかを直接指定できる利点がある。
データの挿入やら削除に手間がかかる特徴もあるんだ。
こんな図で表せて、[1]という指定をすると「ラーメン」がデータとして手に入る感じだ。
アルゴリズム
アルゴリズムとは
アルゴリズムとは、問題を解くときのやり方・手順のことを表すよ。
例えば、1~100までの合計を計算するという問題があったとき。
アルゴリズムはこの問題を解くやり方、手順を示していて、「1+2+3+…+100」というやり方になるね。
他にも「1+100、2+99…のようにペアを作って101を作って101×100÷2」という計算のやり方もあったりする。
アルゴリズムは問題の解き方だから、答えの出し方にはいろいろな種類があったりするんだ。
ソートアルゴリズム
代表的なアルゴリズムを紹介するよ。よく出てくるソートアルゴリズムだ。
ソートというのは並び替えという意味で、ランダムな数列を数を小さい順に並び替えるアルゴリズムだよ。
「9,7.1.3.5」があったときにソートアルゴリズムを通した後には「1,3,5,7,9」となる。
この問題の解き方・アルゴリズムが様々あって今回はバブルソートと選択ソートについて紹介するよ。
バブルソート
数字の移動する様子が泡が浮かぶみたいに見えることから名付けられたバブルソート。
2つの数を比べて入れ替えを行うだけのシンプルなアルゴリズムになるよ。
実際に数字を見ながら仕組みを確認しよう。
数列「12, 8, 20, 3, 13」を並び替えていこう。
まずは一周目の処理はこんな感じだ。
12と8を比較して、入れ替える。
次に12と20を比較してそのまま、20と3を比較して入れ替える。そして20と13を比較して入れ替える。
一周目はここまで、一周目終了時点で「8, 12, 3, 13, 20」となるよ。一周目時点で20が一番大きいというのが確定するよ。
二周目の処理はこうなる。
8と12が比較してそのまま、12と3を比較して入れ替える。12と13を比較してそのまま。
二周目が終わると「8, 3, 12, 13, 20」となる。
三周目は8と3を比較して入れ替える。8と12を比較してそのままで三周目終了時点で「3, 8, 12, 13, 20」という整列完了となるんだ。
これがバブルソートだ!
選択ソート
続いて選択ソート、こちらはバブルソートと同じくらいシンプルなアルゴリズムになるよ。
バブルソートと同じく「12, 8, 20, 3, 13」の例で説明していくよ。
選択ソートは最小値を探して順番に整列させていく仕組みになる。
まず「12, 8, 20, 3, 13」の中から最小値を探す一周目は3だとわかる。
3と先頭の数字を入れ替えると「3, 8, 20, 12, 13」となる。
次は先頭以外の数字から最小値を探す。すると8だとわかる、8と先頭から二番目の数字今回は8のままになる。
次に「20. 12. 13」の中から最小値を探す。すると12だとわかって12を先頭に持ってくる。
次は「20, 13」の中から最小値である13を探し出して並び替える。
処理が全部終わって最終的に「3, 8, 12, 13, 20」という結果になるんだ。
結果はバブルソートと同じだけど、計算過程は異なる。
結果は一緒だけど計算量が異なることで、どっちが早く整列が完了するなどがあるんだ。
他にもソートアルゴリズムってあるんですか?
いっぱいあるよ。クイックソートに、挿入ソートっていうのもあるよ。
アルゴリズム全てを覚える必要はITパスポートの場合だったらないから安心して。
プログラミング言語
プログラミング言語と機械語
コンピュータに仕事を頼む場合、頼み方が重要になってくるよ。
同じ言葉で頼めればいいんだけど、あいにくコンピュータは1と0で動いているから普通の日本語や英語では通じない。
特殊なマシン語(機械語)という2進数で出来上がった言語でしかコンピュータは理解することができないんだ。
でも逆に僕たちはマシン語(機械語)を直接理解することは難しい。だからそこそこ人間にわかりやすくマシン語(機械語)に翻訳しやすいプログラミング言語というのが生まれたんだ。
人間→プログラミング言語→機械語→コンピュータという順番でプログラムはコンピュータに読み込まれる形になる。
マシン語(機械語)への翻訳のことをコンパイルと言ったり、翻訳するマシンのことをコンパイラという言い方をするんだ。これも一緒に覚えておこう。
代表的なプログラミング言語
プログラミングにはいろいろな種類があって、それぞれで得意なプログラムがあったりするんだ。
ここでは一部のプログラミング言語と特徴について一覧でまとめていくよ。
・Java
・JavaScript
・python
・C++
・R
お、おすすめの言語とかってあるんですか?
うーん、本当にどの言語からやってもいいと思うけどおすすめを上げるなら僕はPythonがいいと思う。
わかりやすいし流行の真っ只中であるAIを作るのに適している言語だと言えるからね。
プログラミングの基本
ITパスポートで細かいプログラミングを問われることはないけど、ちょうどいい機会だからプログラミングの大まかな流れや仕組みについて解説するよ。
プログラムの原則
プログラムの原則は意外とシンプルで3つを覚えておけば大丈夫なんだ。
①上から順番に実行する(順構造)
②分岐するかも知れない(選択構造)
③繰り返しの指示ができる(繰り返し構造)
の3つだ。
上から順番に愚直に命令を実行していって(①)「雨が降っていたらAの処理」「晴れていればBの処理」という分岐をすることができて(②)同じことを100回など指定して繰り返すことができる(③)というのがプログラムの大まかな流れだよ。
擬似言語としてプログラミング言語に似たような形でITパスポートでは問題が出るんだけど、基本この原理を知っていれば上から順番に日本語を読み解いていくとプログラミングをしたことがなくても解けるんだ。
あとはプログラミング独自の考え方を押さえておくだけ。
変数と代表的な命令
プログラミング独自の考え方で特徴的なのが変数という概念だね。
A ← 5 のような記述があればAという変数に5を入れたという理解になる。
続いて B ← A + 5 となったら、Bは何が入ったか分かるかな?答えは10となる。
変数は入れ物という考えを持つと理解が早まるから覚えておこう。
他にも擬似言語としてのプログラミング言語の書き方を一覧にまとめておいたからチェックしておいて。
(擬似プログラミング言語の一覧図)
記述形式 | 説明 |
〇手続名又は関数名 | 手続又は関数を宣言する |
型名:変数名 | 変数を宣言する |
/* 注釈 * / | 注釈を記述する |
//注釈 | 注釈を記述する |
if (条件式1) 処理1 elseif(条件式 2) 処理2 elseif (条件式n) 処理n else 処理n+1 endif | 条件式を上から評価し、最初に真になった条件式にお応する処理を実行する。 以降の条件式は評価せず、対応する処理を実行しない。 どの条件式も真にならないときは、処理に+1を実行する 各処理は、0以上の文の集まりである elseifと処理の組みは、複数記述することがあり、省路することもある else と処理n+1の組みは1つだけ記述し、省路することもある |
for (制御記述) 処理 endfor | 繰返し処理を示す 制御記述の内容に基づいて、処理を繰返し実行する 処理は、0以上の女の集まりである |
while (条件式) 処理 endwhile | 前判定繰返し処理を示す 条件式が真の間、処理を繰返し実行する 処理は、0以上の文の集まりである |
do 処理 while (条件式) | 後判定繰返し処理を示す 処理を実行し、条件式が真の間、処理を繰り返し実行する 処理は、0以上の分の集まりである |
変数名←式 | 変数に式の値を代入する |
手続名又は関数名(引数,…) | 手続または関数を呼び出し |
If文、for文、while文が特に重要だから簡単に概要をまとめておくね。
If文は条件分岐を表していてこんな感じで使う。
if(お年玉をもらった)
「ありがとう、嬉しい」という言う
elseif(文句を言われた)
無視する
else
挨拶をする
Endif
みたいな感じだ。これはもしお年玉をもらったら「ありがとう、嬉しい」と言って、お年玉をもらえずに文句を言われたら無視する。お年玉も文句も言われなかったら挨拶をすると言うプログラムになる。これが条件分岐だよ。
for文とwhile文はどちらも繰り返し文を表していて、for文の場合は繰り返す回数が明記されているよ。
while文の方がもうちょっと難しくてこんな感じで表現がされる。
while(テストが赤点)
テストを受け直す
endwhile
という感じ、while文の後ろにくる条件に当てはまっている間繰り返すっていう意味になるんだ。
実際に問題を解いていくとコツが掴めて、だんだんプログラミングがわかってくると思う。
ITパスポートで問われるのは擬似言語と言われる直接プログラミングできる言語ではないものの、考え方をマスターにするにはちょうどいいから頑張ってみて!
まとめ
今回はコンピュータへの指示の出し方と題して、コンピュータのデータ構造からアルゴリズム、プログラミングについて簡単に説明してきたよ。
どうだったかな?
うーーん、めっちゃ難しかったです…
もう一回家でも復習しながら問題をもっと解いてif文とかfor文をマスターしたいですね。
プログラミングって考え方のクセがあるから最初は難しいと感じるかも知れないけどやっているうちになれるから、アドバイスとしてはとにかく問題を解く!だね。
僕も最初は全然for文とかwhile文とかわからなかったけど、問題を解いて答えを見て実際に繰り返し文を1周目2周目と追ってみることでわかってきたこと過去があるよ。
え、た、てっぱん先輩もそういう時代があったんですね…
もちろん、ITのアの時もわからない時代があったよ。泣きそうになりながら勉強してたっけ。
とにかく、ITは一度理解してしまえば一気に視野が広がるからそれまではとにかく我慢して数をこなすのが一番、このあとは実際に問題を解いていくのが良い進め方だね。
いつも通りおすすめの問題集は下だから参考にしてみてね。
じゃあまた次回!
はい!ありがとうございました!!