
第1回 「+1」だけで四則演算をするには?
鹿野恵祐
2007/9/20
| プログラミングの基礎となる考え方、アルゴリズムを理解しているだろうか? ITエンジニアに贈る、アルゴリズム入門。 |
■京都の効率的な回り方を考えるのも「アルゴリズム」
「アルゴリズムって何?」。そう聞かれて、皆さんはすぐに答えられますか。ウィキペディアのアルゴリズムの項には、「なんらかの問題を解くための手順のことである」と記載されています(2007年9月時点)。
例えば、皆さんが週末に京都に旅行し、市内を観光するとしましょう。二条城や銀閣寺、東寺など、回りたいと思う観光地がいくつもあります。バスや電車、場合によっては徒歩など複数の交通手段のうち、どれを使ってどういう順番で回れば効率が良いかと考え、時刻表と格闘することになるでしょう。
この場合、観光地の効率の良い回り方が「問題」で、すべての観光地を最短時間で移動する経路を見つけ、効率良く回る手順を考えることが「問題を解くための手順」、すなわちアルゴリズムになります。
同じ問題でも解き方によって、解くまでにかかる時間が変わってきます。やり方によっては、100倍・1000倍の速度の違いが出てきます。この1000倍の差をハードウェアで吸収しようとすると、1000台のPCがあっても実現できないでしょう。やり方を考えるだけでそんなにも早く解けるなんて、面白いと思いませんか?
この連載では3回にわたって、皆さんに身近な問題からアルゴリズムに触れてもらいたいと思います。
■ばらばらになったトランプをきれいに並べ直す
皆さんがコンピュータに何かの処理をさせたいと思ったら、そのためのプログラムを書くことになりますね。でも、実際にプログラムを書く前に、まずどういったフローで処理させるかを考えると思います。
100個の数字を小さい順に並べたければ、ソートをしようと思うでしょう。環境によっては、コンピュータ言語がすでに並べ替えのための仕組みを持っていることがありますね。SQLであれば「order by」、CやJavaであればソート用の関数やAPIが使用できるでしょう。しかし、そういった言語の支援が受けられない場合はどうすればいいでしょうか。自分で並べ替えの方法を考えて、プログラムを書く必要があります。
例えば、遊び終わったトランプを並べ替えることを考えてみましょう。スペードのエースを先頭に、スペードの2、3と続いてキングまで、次にダイヤのエースからキングまで、クラブのエースからキングまで……というようにきれいに並べてしまっておこうと思ったら、どうやって整理しますか。52枚のカード(ジョーカーを除く)の山からスペードのエースを探して抜き出し、次にスペードの2のカードを抜き出し……という方法もありますし、7並べのようにあらかじめ各カードを置く場所を決めておき、そこにカードを当てはめていくといった方法もありますね(図1)。
![]() |
| 図1 トランプをある順番に並べ替える |
これがトランプの並べ替えのアルゴリズムです。いま挙げた2つ以外にも方法はあるでしょうが、この2つの方法だけ見ても、並べ替えにかかる手間(時間)と必要なスペース(メモリ)は違うはずです。イメージはできましたでしょうか?
■+1しかできないコンピュータ
実際のアルゴリズムについて考えてみましょう。ここでは加減乗除を例として挙げます。
四則演算ができないちょっと変わったコンピュータがあったとします。でもこのコンピュータは、ある数値に+1をすることはできます。このコンピュータで2つの数字を加減乗除させる必要が出てきた場合、どういう処理をさせますか?
足し算をさせようと思ったら……。例として「5+3」を考えてみましょう。最初の5を読み込み、これに+3をするためには、+1を3回繰り返せばいいですね。
次に引き算です。「5−3」は、−3に+1することを5回繰り返せばいいのです。
掛け算と割り算は、それぞれ足し算・引き算を繰り返すと考えます。掛け算は足し算のアルゴリズムを使って、5を3回足し合わせます。割り算は、同様に引き算のアルゴリズムを使って、5から3を何回引けるかと考えます。
というわけで、+1という処理ができれば、四則演算は可能であるということが分かりました。
以下は、このアルゴリズムをC言語とJavaで表したものです。
C言語(ソースファイルのダウンロードもできます)#include <stdio.h> |
Java(ソースファイルのダウンロードもできます)
import java.io.*; |
| 64ビットでも表せない、巨大な数字を扱いたい! そんなときには? | |
いまから始めるアルゴリズム バックナンバー
- 第1回 「+1」だけで四則演算をするには?
- 第2回 ソート処理時間、選ぶアルゴリズムでこんな差が!
- 最終回 西暦2400年はうるう年? うるう年じゃない?
|
|
| スキルアップに役立つ問題を無料で出題 | |
| ITスキル研修4000件、最新情報の検索できます |
キャリアアップ
・ケ・ュ・チマツ、クヲオ貍シ・ケ・ン・・オ。シ
- - PR -
イベントカレンダー
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
スキル創造 News4/25 18:52 更新
「ITmedia マーケティング」新着記事
CyberZ、スマホ広告効果測定ツール「Force Operation X」、世界250カ国対応のグローバルワンSDK提供開始
サイバーエージェントの連結子会社であるCyberZは5月16日、スマートフォン広告向けソリュ...
Twitterの動画アプリ「Vine」のキャンペーンが増加中
米国では、Twitter社が今年1月に発表した動画投稿アプリVineを使った製品キャンペーンが...
第4回 SFA/CRMの「見える化」と名刺管理の「見える化」
今回は、名刺管理サービスとSFA/CRMの「見える化」の違いを検討します。名刺管理サービ...


シリコンバレーエンジニアの人件費が高騰、その背景とは