アルゴリズムが世界を動かす方法を発見する
アルゴリズムは一連の命令です。 定義は本当に簡単です。 アルゴリズムは次のような指示を与えるほど簡単です:
- 通りを下る
- 最初の権利を取る
- 左に2番目の家を見つける
- ドアをノックして
- パッケージを配送します。
しかし、アルゴリズムの定義は単純ですが、実際の意味とそれが私たちの生活にどのように影響するかは非常に複雑です。
アルゴリズムの例
私たちの日常生活で使用するアルゴリズムの一般的な例はレシピです。 この一連の指示は、私たちが必要とするすべての成分と、それらの成分と何をすべきかについての指示を与えてくれます。 簡単な音ですね。
しかし、計量カップがどこに保管されているかわからない場合はどうすればいいですか? それを見つけるためのアルゴリズムが必要です。 測定カップの使用方法に関するアルゴリズムが必要な場合もあります。
したがって、アルゴリズムは一連の命令ですが、それらの命令を誰が解釈するのか、何を解釈するのかも考慮する必要があります。 たとえば、あなたの家から最寄りの食料雑貨店に行く方法を詳しく説明した友人に指示を出すと、友人はあなたの家がどこにあるのか知っていればその店に行く方法しか知りません。 彼らは、別の友人の家からその特定の食料品店を見つけることはできません(まだ)。
これは、アルゴリズムが単純で複雑になる方法です。 そして、コンピュータアルゴリズムに関して話をするとき、コンピュータができることを理解することは、アルゴリズムを策定するための基本的な部分です。
ソートアルゴリズムがどのように進化したか
作成された最も初期のアルゴリズムの1つは、バブルソートルーチンでした。 バブルソートは、データセットをループし、値の各セットを並べて比較し、必要に応じてスワップすることによって、数値、文字または単語をソートする方法です。
このループは、アルゴリズムが何かをスワップすることなくリスト全体を移動できるようになるまで繰り返されます。つまり、値が正しくソートされます。 このタイプのアルゴリズムは、タスクを完了するまで繰り返されるため、しばしば再帰アルゴリズムと呼ばれます。
アルゴリズムは次のように単純に見えるかもしれません。
- 最初の値に移動します。
- その値を次の値と比較し、必要に応じて位置を入れ替えます
- 次の値に移動し、比較を繰り返します。
- リストの最後にいる場合は、ループ中に値がスワップされた場合は先頭に戻ります。
しかし、バブルソートは、値をソートする最も効率的な方法ではないことが判明しました。 時間が経つとコンピュータが複雑なタスクを迅速に実行できるようになり、新しいソートアルゴリズムが登場しました。
このようなアルゴリズムの1つは、最初のリストをスキャンし、ソートされた値の2番目のリストを作成します。 このメソッドは、元のリストを1回だけ通過させ、各値とともに、値を配置する正しい場所が見つかるまで、2番目のリストをループします。 通常、バブルソート法を使用するより効率的です。
これはアルゴリズムが本当に夢中になるところです。 または、あなたがそれをどのように見ているかによって、本当に面白いです。
バブルソート方法は、多くの点で値をソートする最も効率の悪い方法の1つと考えられていますが、元のリストが適切にプリソートされていれば、バブルソートは最も効率的です。 その場合、バブルソートアルゴリズムは1回だけリストを通過し、正しくソートされていると判断するからです。
残念ながら、私たちはリストが事前にソートされているかどうかを常に知っているわけではありませんので、多数のリストにわたって平均で最も効率的に使用するアルゴリズムを選択する必要があります。
バブルソートから学ぶもの
- 私たちがより効率的なやり方を見つけたり、コンピュータがより複雑なタスクを実行できるようになるにつれて、アルゴリズムは時間とともに進化していきます。
- アルゴリズムは時には「より多くの」効率的な「ほとんど」の理由から選択されることがあります。
- ほとんどの場合、アルゴリズムがより効率的であるという理由だけで、個々のケースで常に最適なアルゴリズムを意味するわけではありません。
Facebookのアルゴリズムと日々の生活の中でもっと
アルゴリズムは毎日人間を助ける働きをしています。 あなたがウェブを検索するとき、最良の検索結果を見つけるためにアルゴリズムが働いています。 あなたのスマートフォンに指示を尋ね、アルゴリズムがあなたに最適なルートを決定します。 Facebookを閲覧すると、アルゴリズムによって、私たちの友人のFacebookの投稿のうちのどれが私たちにとって最も重要かが決まります。 (私たちの友達はFacebookがどちらが一番好きだと思っているのか分からないようにしましょう!)
しかし、アルゴリズム的に考えることは、私たちのコンピュータ生活をはるかに超えて私たちを助けることができる より良いサンドイッチを作るのにも役立ちます。
私は、パンの2つのスライスから始まり、1つのスライスにマスタードを広げ、別のスライスにマヨネーズを広げてみましょう。 私はマヨネーズ、その上にいくつかのハム、いくつかのレタス、トマトの2つのスライスとパンの上にチーズのスライスを入れて、それにマスタードとそのスライスとそれをキャップ。 良いサンドイッチ、そう?
間違いなく私はすぐにそれを食べる。 しかし、私がしばらくの間テーブルの上に置いておくと、パンの一番上のスライスは、そのトマトの一部を吸い取ることから激しくなるかもしれません。 それは私がかなり予想していなかった問題であり、気づく前にサンドイッチを作っていたかもしれませんが、いったん成立すれば、より良いサンドイッチを作るためにアルゴリズムを変更する方法を考え始めることができます。
たとえば、私はトマトを取り除くことができます。 しかし、私はそのトマトの味を失いたくはありません。 代わりに、パンとレタスの後にトマトをサンドイッチに置くことができます。 これにより、レタスはトマトとパンとの間に保護障壁を形成することができる。
これがアルゴリズムの進化です。 アルゴリズムはコンピュータで実行する必要はありません。 アルゴリズムはプロセスであり、プロセスはすべて私たちの周りにあります。