[Golang]アルゴリズム改善 ~ループはMapで早くなる件~

こんにちは。KOUKIです。

とあるWeb系企業で、Goエンジニアをやっています。

今回は、Goのループ処理でMapを使うと処理速度が劇的に上がることについて記事にしました。

何をするか

以下の2つの配列があるとします。

この2つの配列の中で、共通の文字が存在すればtrueを、存在しなければfalseを返す関数を実装したいと思います。

具体的にいうと、下記のようにループ処理を実装することになると思います。

array1, array2を2重ループにして、チェックを行っています。

前述通り、重複した文字があればtrueを、なければfalseを返しています。

これでも問題ないのですが、Mapを使うと劇的に速くなります

事前準備

適当な文字を返す関数を実装しておきます。

randSeq関数のパラメータは、何文字返すかを指定します。

この関数は、ランダムな文字列の配列を作るのに便利です。

この関数は、1000000要素の配列に「6文字のランダム文字列」を埋め込む処理に利用します。

Mapの実装

それでは、Mapでループ処理を実装します。

容量を指定したmyMap変数を宣言し、array1の要素をループで格納しています。

その後、array2をループで回してmyMapに合致する要素がないか検索しています。

これだけ?と思われるかもしれませんが、これがめちゃくちゃ早いです。

ちなみにこんな書き方も可能です。

計測

計測用のコードを追加して、プログラムを起動してみましょう。

念の為、ここまで実装したコードを載せておきます。

1回目

2回目

3回目

4回目

5回目

おわりに

いかがでしょうか?

最大で17倍の速度差が出ています。ループを回すときはMapを検討すると幸せになりますね。

もっと効率の良いループ処理があれば、追記します^^

それでは、また!

Go記事まとめ

アルゴリズムまとめ

Go記事をまとめます。

コメントを残す