アルゴリズムという言葉を聞いたことはあるでしょうか。これはプログラミングに触れる限り永遠と聞く言葉です。
ここではアルゴリズムの意味と重要性について、正しく理解しておきましょう。
アルゴリズム (algorithm) の概念
アルゴリズムとは、解が定まっている「計算可能」問題に対して、その解を正しく求める手続きをさす。あるいはそれを形式的に表現したもの。
Wikipedia contributors. (2023, October 8). アルゴリズム. In Wikipedia. Retrieved 17:32, March 19, 2024, from https://ja.wikipedia.org/w/index.php?title=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0&oldid=97317496
だそうです。
Wikipediaをコピペするのやめたほうがいいと思います。
そうだね。
アルゴリズムを簡単に伝えるなら手順です。さらに言うとプログラムの話なので、プログラムの手順ですね。
つまりは完成させたいプログラムがあったとして、それをどんな処理で実現するかです。
あまり分かってません。
じゃあ、例を使って学びましょう。
アルゴリズムの例題
ここに数字の1と5と10があります。四則演算を好きなように使って100にしてください。
10 x 10 = 100です。
シンプルだね。正解だよ。でも、他にもパターンあるよね?
はい。色んなパターンがあります。
それがアルゴリズムです。
はっ?
いや、そのままの意味で思いつくパターンの全てがアルゴリズムってことだよ。
アルゴリズムは問題をどうやって解に導くかの手順です。手順なので結果が正しければ、どの手段を選んでも構いません。
とは言え、先程の例なら10を10回足すよりも掛け算したほうが効率が良いとは思いませんか?
数字を例にしてるので分かりづらいと思いますが、同じ結果でも効率やコストなど、色々な項目で有利と不利が存在します。
例えば日本からアメリカに行く方法を目的とするなら、飛行機、船、ロケット、泳ぐ、他にも色々な選択肢があると思います。
後半適当すぎる。
ロケットは時代が解決するかもしれんだろ。
このように問題を解決する手段をアルゴリズムと言います。
そして、その考えたアルゴリズムを使ってコーディングするのがプログラマの仕事です。
アルゴリズムの必要性
次にアルゴリズムを学ぶ必要性ですが、これは確実に必要と言えます。
理由は簡単で、アルゴリズムが理解できないとコーディングできないからです。
ただ、これは有名なアルゴリズムを知ってないとコーディングできないと言う意味ではありません。
寧ろ有名なアルゴリズムを暗記しようと思った人、今すぐ考えを改めましょう。
僕が言いたいのは、将来も含め、これから自分でプログラミングする中で自前のロジックを作りますよね?
その時にアルゴリズム、つまりは自分でコードの設計ができないと駄目なんです。
それをするためには色々なコードを書き続け、脳をプログラミングに慣れさせる必要があります。
雑記的な長さになってますが、伝えたいことは1つ、たくさんコーディングして経験を積んでください。
そうすれば勝手にアルゴリズムは身につきます。その中で必要に応じて有名どころを調べればいいです。
アルゴリズムにおける最適の基準
最も効率がいい、つまり最速のプログラムがアルゴリズム的に最適と思ってませんか?
違うんですか?
違います。例えば次の3パターンを見て、どれが最適だと思いますか?
Aでは無いと思いますが、BもCも判断が難しいです。
その通り。BもCも処理に問題ないなら、どちらも正解なんだ。
では、何を優先するべきでしょうか。それは目的によって代わります。
例えば先程の例が10年間継続して運用するシステムだとしましょう。
その間にアップデートや不具合修正があるでしょう。その時にメンテナンス性の優れたコードは力を発揮します。
寧ろ別の担当者が修正するかもしれません。そんな時に読解性の高いコードなら嬉しいと思いますよね。
クソコードならキレ散らかして仕事します。
エンジニアって過激派が多いの?
日々のストレスが原因。
話を戻し、別のパターンとして、競技プログラミングのような1回作りきりで、速度を重視するのが目的なら話は代わりますよね?
もしくはハードウェアのスペック制約など、プログラムの処理を変えないと望む時間で完了できない場合とかです。
この場合は速度を重視するのが最適解でしょう。要は目的に合わせて最善を選ぶ能力が求められるってことです。
代表的なアルゴリズム
せっかくなので、代表的なアルゴリズムについて触れておきましょう。
と言っても解説を始めると夜が明けてしまうので、今回は紹介のみです。
いずれ個別に解説するかもですが、気になる人は自分で調べてみましょう。
ソートアルゴリズム
複数のデータを並び替えるためのアルゴリズムです。配列やリストが所有する要素を並び替えるために使います。
- 選択ソート
- 挿入ソート
- バブルソート
- ヒープソート
- クイックソート
- マージソート
クイックソートが理論値最強です。
探索アルゴリズム
複数のデータから目的のデータを探索するためのアルゴリズムです。
- 線形探索
- 二分探索
二分探索はソートされてることが前提だけど早いです。
あとがき
実は有名なアルゴリズム、例えばクイックソートみたいなものはプログラミング言語に標準実装されてます。
それ故、現在のプログラミングはアルゴリズムをゼロから考える必要はなく、既存のロジックを駆使して自前のプログラムを作ります。
この記事は参考になりましたか?
コメント