時刻の差分

様々なアルゴリズムを学ぶアルゴリズム

ここからは、いくつか簡単なアルゴリズムの事例を紹介し、アルゴリズムの考え方を学んでいくことにしましょう。どんな複雑なアルゴリズムも、基本的なアルゴリズムの組み合わせであることには変わりありません。これから紹介するような、小さくシンプルなアルゴリズムを学習することにより、アルゴリズムの考え方に慣れていきましょう。

アルゴリズムの考え方

手始めに、時間の差を求めるアルゴリズムを取り上げることにしましょう。私たちは、日常生活の中で、「3時10分」と、「4時15分」の間には、「1時間5分」の開きがあることが、自然にわかります。かし、コンピュータでこのような計算を行うためには、様々な手続き、つまりきちんとしたアルゴリズムを作る必要があります。では、具体的にどのようにすればよいのでしょうか。

とはいえ、時間は0~23、分および秒は、0~59であらわされるため、単純に自・分・秒を引き算しただけで差が得られるわけではないということは、すぐにわかります。では、どのように考えればよいのでしょうか。有効な方法は、時間をすべて秒で表し、差を求めたのちに、再び「時間・分・秒」の単位に変換する方法です。

時間を秒に変換

まずは、手始めに、時間を秒に変換する必要があります。変換しようとする時刻を「hms秒」だとします。このとき、1秒は60秒ですから、「s分」は「s×60秒」になります。更に、「h時間」は、「h×60分」であり、更に秒で表すと、「h×60×60秒」となります。以上を踏まえると、変換式は以下のようになります。

時間を秒で表した時の式
h 時 m 分 s 秒 = h × 3600 + m × 60 + s 秒

秒から時間への変換

今度は、逆に秒を時間に変換する方法を見てみましょう。これは、秒への変換の逆をすればよいので、以下のような手順になります。与えられた秒数をtとしましょう。

  1. tを3600で割った値る。その答えをhに代入する。
  2. 1.の余りの値を60で割る。その答えをmに代入する。
  3. 2.の余りの値をsに代入する。
  4. 答えとして、「h 時間 m 分 s秒」が得られる。

以上の2つのプロセスを使用すれば、このアルゴリズムは完成します。では、実際にアルゴリズム全体を構成してみましょう。

アルゴリズムの流れ

以上を踏まえると、この問題に対するアルゴリズムは、以下の通りになります。このとき、比較する時間は、h1m1s1秒、そしてもう一つが、h2m2s2秒であったとします。

手順1.変数time1を用意し、ここにh1×3600+m1×60+s1の計算結果を代入する。
手順2.変数time2を用意し、ここにh2×3600+m2×60+s2の計算結果を代入する。
手順3.変数diffを用意し、time1 > time2なら、time1 - time2を、そうでなければ、time2 - time1の値を代入する。
手順4.変数hおよび、nを用意し、hにはdiffを3600で割った答えを代入し、あまりをnに代入する。
手順5.変数mおよび、sを用意し、mにはnを60で割った答えを代入し、あまりをsに代入する。
手順6.「時間差はh時間ms秒」と出力する。

以上が、このアルゴリズムの処理の流れです。より具体的にわかりやすくこの流れを記述すると、以下のようになります。(図4-1.)

図4-1.時間の差分を求めるアルゴリズム
時間の差分を求めるアルゴリズム