第1回 いまさらアルゴリズムを学ぶ意味

山下 寛人
オイシックス株式会社

2008/8/1

プログラマたるものアルゴリズムとデータ構造は知っていて当然の知識です。しかし、教科書的な知識しか知らなくて、実践的なプログラミングに役立てることができるでしょうか(編集部)

アルゴリズムを学ぶ意味

- PR -

 IT技術者である読者の皆さんなら、普段から何げなく「アルゴリズム」という言葉はよく使っていることでしょう。しかしあらためて「『アルゴリズム』とは何か」と問われて、すぐに明快に答えられるでしょうか。

 また、IT技術者であってもアルゴリズムをきちんと勉強した人は意外と多くないのではないでしょうか。大学で学んだとか、入社後の新人研修で学んだという人もいるかもしれません。それでもしばらく開発の現場に出ているうちに忘れてしまった、という人もいることでしょう。

 この連載ではアルゴリズムを学ぶ、または学び直すことで、プログラミングのスキルを深めていきます。アルゴリズムは学問として取り扱われることが多いですが、この連載では開発の現場に役立つスキルを身に付けることを目的とします。「アルゴリズムなんていまさら勉強する意味がない」と思った方。ひとまずこの第1回目を読んでみてください。

世界のナベアツのアルゴリズム

 いま人気のお笑い芸人に、世界のナベアツがいます。1から40までの数を数えていくのですが、3の倍数と3の付く数字のときだけアホになります。これをコンピュータ上で実現するにはどうしたらよいでしょうか。

 1から40までループするとして、「3の倍数」は、剰余を使って余りが0という条件で判定できそうです。「3の付く数字」はどうしたら判定できるでしょう。

 こういう場合、われわれ人間が3の付く数字をどのように認識しているのかを考えて、それと同じことをコンピュータにやらせるとうまくいくことがあります。人間は、見た目で3があれば3の付く数字だと認識します。できるだけ同じことをコンピュータで行うには、数字を文字列に変換して、その文字列に3が含まれるかどうか、という条件で判定できそうです。

 こういったコンピュータでの課題の解決の手順が、アルゴリズムなのです。

世界のナベアツのアルゴリズムの実装

 せっかくなので実装してみましょう。思い付いたアルゴリズムも実際に実装してみると問題がある場合がよくあります。なお、本連載では主にJavaScriptでサンプルプログラムを紹介します。特別なソフトのインストールをしなくともWebブラウザ上で実行できるためです。

 では、下記に実装したプログラムを示します。アホにする部分は「F.Ko-Jiの『一秒後は未来』」で公開されていたスクリプトを利用させていただきました。

関連リンク:
リンク ページ中の3の倍数と3の付く数字をアホにするブックマークレット ― F.Ko-Jiの「一秒後は未来」
http://blog.fkoji.com/2008/04210855.html

 1 <html>
 2 <head>
 3 <script type="text/javascript" src="http://www.atmarkit.co.jp/fcoding/articles/algorithm/01/nabeatsu.js" charset="UTF-8">
 4 </script>
 5 <script type="text/javascript">
 6 var count = 1;
 7
 8 function nabe() {
 9     document.getElementById("num").innerHTML = count;
10     if ((count % 3) == 0) {
11         henkan();
12     }
13     if (String(count).indexOf("3") > -1) {
14         henkan();
15     }
16     count++;
17     if (count <= 40) {
18         setTimeout("nabe()", 1000);
19     }
20 }
21 </script>
22 </head>
23 <body onLoad="nabe()">
24 <div id="num" style="font-size:80px;"></div>
25 </body>
26 </html>
各行左の行番号は解説のためのものです

 コピー&ペーストはしないでぜひ1文字ずつタイプすることをお勧めします。1文字ずつタイプするのは面倒ですが、理解度が違います。プログラムを理解するための作業だと思って、タイプしてみてください。

 エディタにプログラムを打ち終えたらnabeatsu.htmlなど任意のファイル名で保存してください。拡張子は「.html」としてください。保存したファイルをWebブラウザにドラッグ&ドロップなどして開くと、実行が始まります。

 Internet Explorerの場合、スクリプト実行の警告が出ることがありますが、その場合は上部のツールバーをクリックして実行を許可してください。

 
1/3

Index
いまさらアルゴリズムを学ぶ意味
Page1
アルゴリズムを学ぶ意味
世界のナベアツのアルゴリズム
世界のナベアツのアルゴリズムの実装
  Page2
ナベアツアルゴリズムを理解してみる
そのほかのナベアツアルゴリズム
あらためてアルゴリズムを学ぶ意味
  Page3
フローチャートを学ぶ
UMLを学ぶ
さまざまなアルゴリズムを知っておこう

コーディングに役立つ! アルゴリズムの基本

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91

TechTargetジャパン

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH