Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Perlで色々なアルゴリズムを実装してみた

ちょいちょい参加している AtCoder で、二分探索のアルゴリズムを時間内に実装する自身がなかったので、基本的なアルゴリズムを手を動かした実装してみました。
まぁ、ソートやサーチなんかは、大体の言語でメソッドや組み込み関数が定義されているので実務で使うことは無いと思いますが、実際にどういう動きをするかを頭で考えてコードで表現する訓練は大事だなぁと思って色々書いてみました。

アルゴリズムについては色々書籍が販売されていますが、手頃な感じの本を入手して最初の問題からコードを書いてみました。普遍的な知識ですね。

図解入門よくわかるアルゴリズムの基本と仕組み (How‐nual Visual Guide Book)

図解入門よくわかるアルゴリズムの基本と仕組み (How‐nual Visual Guide Book)

それぞれのコードは、どんな動きをするのかの趣旨だけ読んで自分なりにコーディングしてみたので、コードにツッコミやアドバイス等々あればお手柔らかにお願いします(笑)。
まずは第7章までの基本編。

値の集合から、条件にあった値を取り出すコード(第4章)

合計

sum

数を数える

count

平均

average

最大値

max

最小値

min

まぁ、この辺りは基本編ですね。プログラミングの初心者の方は、このあたりからコードを書いてちゃんと動くか試してみると良いと思います。Perl入学式の復習にもどうぞ。

順番をソートするアルゴリズムの実装(第6章)

選択ソート

selection_sort

バブルソート

bubble_sort

挿入ソート

insert_sort

シェルソート

shell_sort

ちょっとアルゴリズムっぽくなってきました。シェルソートはグループ分けをどう実装するか、頭の中だけで考えるだけでは混乱したので、実際に動きをノートに書き出して実装しました。
頭で考えて書いたコードは思うような結果になりませんでしたが、ノートに書いて整理するとあっさりと書けました。いきなり書かずにまず整理。
どんな言語でも通用する基本って大事。

値の集合から特定の値を探索するアルゴリズムの実装(第7章)

線形探索

linear_search

二分探索(当たり入り)

binary_search

二分探索(当たりなし)

binary_search2

文字列の照合

strings_search

アルゴリズムの実装、頭の体操的にも面白いですね。引き続き第8章以降もやっていきたいと思います。