LoginSignup
5

More than 5 years have passed since last update.

Rubyで最大値を探すアルゴリズムを書いてみた

Posted at

はじめに

ITエンジニアなら、基本的なアルゴリズムは知っておきたいよねとか言われても、一つも知らなかった。

まず、なぜ知って起きたいほど重要なのかをハラ落ちさせたかったので色々調べてみた。

エンジニアの面接でアルゴリズムを組ませる理由

この記事に、アルゴリズムが大事だという2つ理由がありました。

速く基本的なアルゴリズムが正しく組める人は、他のコードを書かせてもバグを入れにくいうえ、作業が速い。もちろん、アルゴリズムを組むのが遅くても、バグの少ないコードを書く人は沢山いる。でも、アルゴリズムを速く正確に組める人は概して他のコードを書かせても素早いし、バグを入れにくい。雇う側からすれば、バグが少なく開発スピードが速いに越したことはない。

もう一つは

効率的なアルゴリズムはコスト削減につながる。当然の話だが、同じ機能だったら出来る限り少ないリソースでできた方が、コストが減って儲けにつながる。ソフトウェアもビジネスなので、コストが低いに越したことはない。そこで様々なソフトウェアの最適化がされるのだが、多くの場合、もっとも大幅にリソース使用量を減らせるのが、より効率的なアルゴリズムを使うことだ。裏を返せば、効率的なアルゴリズムがちゃちゃっと組めないエンジニアは、コードを書く度に、それだけ会社に損をさせていることになる。

アルゴリズムを勉強すると、応用力が効くし、コードの安全性も増すことができるということだろう。よし、ハラ落ち。

次に、本屋で簡単そうなアルゴリズムの本を買ったので、それを今勉強中のRubyで書いてみようというのをやって行こうかと思います。

今回は...

最大値を探すアルゴリズム

教科書はp80にあります。

暫定的に最大値を変数(max)に格納して、他の配列データ一つ一つと比較して、
暫定的なデータよりも小さかったら、何もしない。
暫定的なデータよりも大きかったら、そちらを変数(max)に格納する。という方法でやっていきましょう。

コードは以下のようになると思います。

array = [12,13,11,14,10]

max = array[0]

array.length.times { |i|
    if max < array[i]
        max = array[i]
    end
}

puts "最大値は#{max}です"

まず、puts array.lengthは配列0から4までの5個の要素があるので、数値の5が出力されます。

timesメソッド

timesメソッドは、指定した回数だけ繰り返し処理を行うことが出来ます。使い方は...

オブジェクト.times{|変数|
  実行する処理
}

ということなので、今回は5 times繰り返し処理を行うということになります。
コードの繰り返しを1つ1つ説明すると

  • 変数MAXに最初に入った12と12(array[0])を比較
    • if文の中は実行しない
  • 変数MAXに最初に入った12と13(array[1])を比較
    • 13の方がデカイので、maxに代入
  • 変数MAXに最初に入った13と11(array[2])を比較
    • if文の中は実行しない
  • 変数MAXに最初に入った13と14(array[3])を比較
    • 14の方がデカイので、maxに代入
  • 変数MAXに最初に入った14と10(array[4])を比較
  • 個数分繰り返したので、処理を抜けてputsを実行
    • 変数には14が格納されている

こんな感じです。

今回は、アルゴリズムを学ぶのが目的でしたが、Rubyなら

puts array.max

=>14

で、最大値は出力されますけどね。

ありがございました。

レポジトリ

参考図書

伊藤静香. アルゴリズムを、はじめよう. 第3章. インプレス, 2012, p. 80-86.

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5