MieNaPressは
(株)日本統計センター
が運営しています。

Vol.103 プログラミングって何?

 

 文部科学省は、2020年以降に施行される、プログラミング教育必修化を盛り込んだ学習指導要領改定案を発表しました。大きく報道されたので、ご存知の人は多いと思います。

 今後、プログラミングは、より一般的になり、触れる機会も増えてくると思います。

 そこで、今回は、そんなプログラミングの世界にちょっと触れてみるのはどうでしょうか?

 

1. プログラミングとは

 まず始めにプログラミングとは、簡単に言うと

 「コンピュータにさせたい仕事を順番に書き出す作業」

 を指します。

 しかしながら、コンピュータは人間の言葉をそのままでは理解できません。そこで、「コンピュータが理解できる言葉=プログラミング言語」を用いて、「正しい作業ができる手順=アルゴリズム」で指示する必要があります。

 プログラミング言語とは、言語と名が付く通り、コンピュータ世界の言葉です。私たちの世界に、英語、中国語、フランス語、日本語とあるように(興味がある方は、マンスリーレポート 11月号「Vol.102 世界の「ことば」」も是非ご覧ください)、コンピュータ世界にも、JAVA, C言語, C#, Python と数多くの言語が存在します。しかも、それぞれの言語の技法・書法もまた、近いものから、かけ離れたものまで、様々存在します。

 アルゴリズムとは、あまり言語に依存されない、目的に適した、作業手順です。

 今回は、この「アルゴリズム」を知っていただこうと思います。

 

2. ソートアルゴリズム

 紹介するのは、さまざまなプログラムの中で多く使われるソート(並べ替え)アルゴリズムです。その中でも、直感的に最も理解しやすく、ソートアルゴリズムの基礎として一度は学ぶことになる「バブルソート」と言われるソートアルゴリズムを見ていきましょう。

・ バブルソート

 バブルとは「泡」のことで、並べ替えの過程でデータが下から上へ移動する様子が、泡が浮かんでいくように見えることからこの名前があります。

 バブルソートの考え方は、

 全ての数字要素に関して、隣接する要素と比較し順序が逆であれば入れ替える。これを要素数 – 1 回繰り返すことでソートを行う。

 ということです。

 実際に、例を見て頂きたいと思います。4つの数字要素 a = { 7 , 3 , 5 , 1 } があるとします。これを並べ変えすると、以下のようになります。

バブルソートによる並べ替えのイメージ(凡例)

バブルソートによる並べ替えのイメージ(ステップ1)

 始めに、一番下の基準要素と一つ上の要素を比較し、基準要素の方が小さければ、数字を入れ替えて基準を一つ上に上げます。基準要素の方が大きい、又は、同値のときは、入れ替え無しで基準を一つ上に上げます。これを、繰り返し、一番上の要素の数字を確定させます。

バブルソートによる並べ替えのイメージ(ステップ2)

 再び基準を一番下に戻し、始めと同じ様に基準要素と一つ上の要素との比較を確定要素直前まで繰り返すことで、二つ目の要素の数字が確定します。(2-2では、2-1での比較の結果、基準要素の方が大きいため入れ替え無しになっています。)

バブルソートによる並べ替えのイメージ(ステップ3)

 繰り返しの結果、すべての要素の数字がきちんと並んで確定されました。

 

 以上で動作が理解出来たと思います。しかし、このままでは、人が考えた作業です。これを、コンピュータのアルゴリズムにしていきましょう。

 まず、この並べ替えの作業に、4つの作業があるのがお分かりでしょうか?

 

・ 基準要素と一つ上の要素を比較する作業

・ 比較で基準要素が小さければ、数字を入れ替える作業

・ 一番下から基準要素の位置を一つずつ前に遡って、比較作業を確定要素の直前まで繰り返す作業

・ 上記の3作業を要素数 – 1 回繰り返すことで、確定要素を一つずつ増やす作業

 

 この4つの作業が理解できれば、次は、これらを、一番効率がよく、矛盾なく流れるように構築していきます。

 今回は、処理の流れがよくわかるようにフローチャートの書法で構築します。

 

バブルソートのフローチャート

(1) 初期値として、要素数 : n = 4 , 繰り返し回数 : i , 確定要素数 : c を用意

(2) 要素数-1回になるまで繰り返し、繰り返しが終わったら終了する

(3) 基準要素を最後の位置にする( : 基準要素を指す配列のインデックス)

(4) 基準要素と一つ上の要素の位置が確定要素の直前になるまで繰り返し、繰り返しが終わったら次に進む

(5) 基準要素と一つ上の要素を比較し、基準要素が小さければ、数字を入れ替える作業、そうでなければ次に進む

(6) 基準要素と一つ上の要素の数字を入れ替える( w : 入れ替えのため一時的に基準要素の数字を入れておく)

(7) 基準要素の位置を一つ前に移動して、繰り返しに戻る

(8) 繰り返し回数と確定要素数を一つ増やし、繰り返しに戻る

 

 このような、フローチャートになりました。4つの作業がそれぞれ、どのように構築されているか、確認してみてください。

 

「基準要素と一つ上の要素を比較する作業」 = (5)

「比較で基準要素が小さければ、数字を入れ替える作業」 = (6)

「一番下から基準要素の位置を一つずつ前に遡って、比較作業を確定要素の直前まで繰り返す作業」 = (3)、(4)、(7)

「上記の3作業を要素数 – 1 回繰り返すことで、確定要素を一つずつ増やす作業」 = (2)、(8)

 

 これで、コンピュータのアルゴリズムに出来ました。

 実際のプログラミングは、このアルゴリズムをそれぞれのプログラミング言語で記述することになります。

 

 今回のバブルソートが簡単だった方、ソートアルゴリズムには、ヒープソートや、クイックソートなど様々なソートアルゴリズムが存在します。ぜひ他のアルゴリズムも理解できるようチャレンジしてみてください。

 

 

3. 最後に

 いかがだったでしょうか、初めての方は、難しかったかもしれませんが、今回の並べ替えの作業をコンピュータにプログラミングするのに、作業を抽象的に捉え、分解し、順序立てし、ベストな方法か分析して構築していく方法を紹介させてもらいました。

 このような思考は、「プログラミング的思考」と言われているものです。

 このプログラミング的思考は、決してプログラミングだけのものではありません。例えば、料理、必要な材料が何で、どのような作業を、どこで行うか、きちんと分析、順序立てが出来る様になると、いつでも美味しい料理がすばやく手軽に出来る様になるでしょう。

 このように、プログラミング以外の所でも十分活用できる思考ですので、今回紹介した、小さなプログラミングから慣れていき、少しずつでも身に着けていくと良いでしょう。実際、文部科学省が掲げる、プログラミング教育必修化も、プログラミングそのものより、プログラミング的思考が身につくことを重視している様に思えます。

 

 近い将来、子供たちから、「プログラミングの宿題教えて」と、言われる日が来るかもしれません。その時、尊敬される大人で、ありたいですね。

 

 このレポートの全部または一部を無断でコピーすることは、著作権法上での例外を除き禁じられています。


【お願い】

 レポートを最後までお読みいただき、ありがとうございました。

 弊社では、当サービスをさらに充実していくために、読者の皆様にレポートの評価をお願いしています。

 あなたの評価に合うボタンをクリックしてください。

 よろしくお願いいたします。


この記事はどうでしたか?役に立ちましたか?面白かったですか?
  • 1点 (1)
  • 2点 (0)
  • 3点 (5)
  • 4点 (5)
  • 5点 (9)

Comments are closed.