いまさらアルゴリズムを学ぶ意味:コーディングに役立つ! アルゴリズムの基本(1)(2/3 ページ)
本連載ではアルゴリズムを学ぶ、または学び直すことで、プログラミングのスキルを深めていきます。アルゴリズムは学問として取り扱われることが多いですが、この連載では開発の現場に役立つスキルを身に付けることを目的とします。初回は、アルゴリズムを学ぶ意義について。コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう。
ナベアツアルゴリズムを理解してみる
それでは、プログラムを解説します。
3行目:
外部スクリプトを読み込んでいます。ここでは「henkan()」関数を定義しています。数字をアホな文字列に変換するものですが、やや冗長になるので外部スクリプトに切り出しました。
6行目:
1から40までカウントするための変数です。初期値1を代入しています。
8行目:
1回のカウントを行う関数です。
9行目:
変数countをWebブラウザに表示しています。document.getElemenyById("num")で、24行目の<div id="num">タグを取得しています。このタグの内側のHTMLをcountの値に変えています。
10〜12行目:
3の倍数だったらWebブラウザに表示されているものをアホに変換します。
13〜15行目:
3が付く数字だったらWebブラウザに表示されているものをアホに変換します。String(count)で数値のcountを文字列に変換します。indexOf()で文字を含むかどうか判定します。
16行目:
countを1増やします。
17〜19行目:
40以下だったら再度nabe関数を実行します。setTimeout()はタイマー指定で関数を実行する機能です。1000ミリ秒後(1秒後)にnabe関数を実行するようにしています。
23行目:
onLoadで、Webブラウザにファイルがロードされたらnabe関数が実行されるよう、指定しています。
24行目:
countを表示するためにdivタグを設置しています。
そのほかのナベアツアルゴリズム
ナベアツアルゴリズムを実現するほかのやり方はないでしょうか。特に「3が付く数字」の部分はほかにもやり方がありそうです。
文字列に変換しないとしたらどういうやり方があるでしょう。1の位だけに注目すれば、10で割った余りが3かどうかで判定できます。10の位をどうすればよいかというと、いったん10で割って、それを10で割った余りが3かどうかで判定すればよいでしょう。
3の倍数かどうかの判定を、剰余を使わないでやるにはどうしたらよいでしょう。5の倍数で犬っぽくするのも、面白いですね。これは読者の皆さんへの課題としたいと思います。
あらためてアルゴリズムを学ぶ意味
アルゴリズムでよく題材にされるものの中には、実際の開発の現場でそのまま同じように実装することがないものもあります。そんなときにはアルゴリズムを学ぶ目的が分からなくなるかもしれません。
しかし、ナベアツの例でも分かるように、コンピュータで何かを実現するにはいろいろ工夫が必要です。アルゴリズムを学ぶことは、こういったコンピュータ的な発想ができるようになるためのトレーニングなのです。
Copyright © ITmedia, Inc. All Rights Reserved.