第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> |
| 各行左の行番号は解説のためのものです |
コピー&ペーストはしないでぜひ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の世界を体験してみよう |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

