7アルゴリズムとデータ構造すべてのプログラマが知っている必要があります

Facebooktwittergoogle_plusredditpinterestpinterestpinterestpinterestpinterestpinterest/div>linkedinのメール

codingsec-algo

彼らはプログラミングの世界に出て行くと、いくつかのドルを作りたい場合は、プログ 今日、私たちは彼らが何をしているのか、そしてどこで最も簡単な例で使われているのかを見ていきます。 このリストは、競争力のあるプログラミングと現在の開発慣行での使用を念頭に置いて準備されています。

ソートアルゴリズム

ソートは、コンピュータサイエンスで最も研究されている概念です。 アイデアは、特定の順序でリストの項目を配置することです。 すべての主要なプログラミング言語にはソートライブラリが組み込まれていますが、どのように機能するかを知っていれば便利です。 要件に応じて、これらのいずれかを使用することができます。P>

  • マージソート
  • クイックソート
  • バケットソート
  • ヒープソート
  • カウントソート

もっと重要なのは、いつ、どこでそれらを使用するかを知 ソート技術の直接適用を見つけることができるいくつかの例は次のとおりです。

  • 電子商取引ウェブサイトでの価格、人気などでソート

検索アルゴ 時間の複雑さはO(log2n)です。 アイデアは、アイテムを含む可能性のあるリストの半分の部分を、1つの可能なアイテムに絞り込むまで繰り返し分割することです。 いくつかのアプリケーションは次のとおりです。

  • ソートされた曲のリストで曲の名前を検索すると、バイナリ検索と文字列一致を実行して結果を
  • git bisectを介してgitでデバッグするために使用されます

深さ/幅の最初の検索(グラフデータ構造内)

DFSとBFSは、ツリー/グラフのトラバースとデータ構造の検索です。 DFS/BFSがどのように機能するかについては詳しく説明しませんが、次のアニメーションでどのように異なるかを確認します。

dfs-bfs-codingsec

アプリケーション:

  • webクロールのための検索エンジンで使用されます
  • 例えば、チェスのボットを構築するために人工知能で使用されます
  • マップ内の二つの都市と他の多くのアプリケーション間の最短経路を見つける

ハッシュ

ハッシュ検索は、現在、キーまたはidで適切なデータを見つけるために最も広く使用されている技術です。 私たちは、そのインデックスによってデータにアクセスします。 以前はインデックスを探すためにソート+バイナリ検索に依存していましたが、今はハッシュを使用しています。データ構造は、キーを値に効率的にマップするHash-MapまたはHash-TableまたはDictionaryと呼ばれます。 キーを使用して値の検索を実行できます。 アイデアは、キーを実行する適切なハッシュ関数を使用することです->値マッピング。 適切なハッシュ関数を選択することは、シナリオに依存します。

アプリケーション:

  • ルータでは、IPアドレスを格納する->ルーティングメカニズムのパスペア
  • 値がすでにリストに存在するかどうかのチェッ 線形検索は高価になります。 また、この操作にSet data structureを使用することもできます。

動的計画法

動的計画法(DP)は、複雑な問題をより単純なサブ問題に分解することによって解決する方法です。 私たちは、サブ問題を解決し、その結果を覚えて、それらを使用して、我々はすぐに、複雑な問題を解決するために私たちの方法を作ります。

*書き込みを停止します”1+1+1+1+1+1+1+1 =” 一枚の紙の上に*それは何に等しいですか?
*カウント*エイト!
*左に別の”1+”を書き留めます*それはどうですか?
*すぐに*ナイン!
どうしてそんなに速いと分かったの?
もう一つ追加した
だから再集計する必要はなかった八つがあったことを覚えていたから! 動的プログラミングは、”後で時間を節約するためにものを覚えている”と言うだけの派手な方法です

アプリケーション:

  • 多くのDPアルゴリズムとア

二乗によるべき乗

232を計算したいとします。 通常、32回繰り返して結果を見つけます。 私はそれが5回の反復で行うことができますあなたに言った場合はどうなりますか?2乗または2進数によるべき乗は、O(log2n)内の数値の大きな正の整数べき乗を高速に計算するための一般的な方法です。

2乗または2進数によるべき乗は、O(log2n)内の数値の大きな正の整数べき乗を高速に計算する方法です。 これだけでなく、この方法は多項式と正方行列のべき乗の計算にも使用されます。

アプリケーション:

  • RSA暗号化では、大規模な数の累乗の計算が主に必要です。 RSAはまた、バイナリ累乗と一緒にモジュラー算術を使用しています。

文字列のマッチングと解析

パターンマッチング/検索は、コンピュータサイエンスにおける最も重要な問題の一つです。 このトピックについては多くの研究が行われていますが、プログラマにとっては基本的な必需品は2つだけです。

Kmpアルゴリズム(文字列マッチング)

Knuth-Morris-Prattアルゴリズムは、長い文字列の短いパターンと一致する必要がある場合に使用されます。 たとえば、文書内のキーワードをCtrl+Fすると、文書全体でパターンマッチングを実行します。

正規表現(文字列解析)

何度も、定義済みの制限を解析して文字列を検証する必要があります。 これは、URLの解析と一致のためにweb開発で頻繁に使用されます。

素数検定アルゴリズム

与えられた数が素数であるかどうかを決定する決定論的および確率的な方法があります。 決定論的方法と確率的(非決定論的)方法の両方が表示されます。数字の範囲に一定の制限がある場合は、100から1000の範囲内のすべての素数を決定するとします。Sieveは行く方法です。

Sieve of Eratosthenes(deterministic)

Sieve of Eratosthenes(deterministic)

Sieve of Eratosthenes(deterministic)

Sieve of 範囲に応じて一定量のメモリを割り当てる必要があるため、範囲の長さは重要な要素です。任意の数nについて、sqrt(n)(決定的)まで段階的にテストします。

長い範囲(1から1012など)にまばらに広がっている数を確認したい場合、Sieveは十分なメモリ Sqrt(n)までのみ走査することによって各数nをチェックし、nに対して分割可能性チェックを実行できます。

Fermat primality testとMiller–Rabin primality test(どちらも非決定性)

これらはどちらも合成性テストです。 数が合成であることが証明されている場合、それは確かに素数ではありません。 事実、Miller-Rabinには決定論的な変種もありますが、時間の複雑さとアルゴリズムの精度との間の取引のゲームです。

アプリケーション:

  • 素数の最も重要な使用法は暗号化です。 より正確には、公開鍵暗号システムの最初の実装であったRSAアルゴリズムの暗号化と復号化に使用されています
  • 別の用途は、ハッシュテーブルで使用されているハッシュ関数です

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です