Back to Javascript Algorithms

JavaScriptアルゴリズムとデータ構造

README.ja-JP.md

latest22.8 KB
Original Source

JavaScriptアルゴリズムとデータ構造

このリポジトリには、JavaScriptベースの一般的なアルゴリズムとデータ構造に関する多数のサンプルが含まれています。

各アルゴリズムとデータ構造には独自のREADMEがあります。 関連する説明、そして参考資料 (YouTube動画)も含まれています。

Read this in other languages: English, 简体中文, 繁體中文, 한국어, Polski, Français, Español, Português, Русский, Türk, Italiana, Bahasa Indonesia, Українська, Arabic, Tiếng Việt, Deutsch, Uzbek עברית

データ構造

データ構造は、データ値、データ値との間の関係、 そして、データを扱うことができる関数と演算の集合で、 データを特定の方法で構成して保存することで、より効率的に アクセスして変更することができます。

B - 初心者, A - 上級

アルゴリズム

アルゴリズムとは、問題のクラスをどのように解決するかの明確な仕様です。 一連の操作を正確に定義する一連のルールです。

B - 初心者, A - 上級

トピック別アルゴリズム

Paradigmによるアルゴリズム

アルゴリズムパラダイムは、あるクラスのアルゴリズムの設計の基礎をなす一般的な方法またはアプローチである。それは、アルゴリズムがコンピュータプログラムよりも高い抽象であるのと同様に、アルゴリズムの概念よりも高い抽象である。

このリポジトリの使い方

すべての依存関係をインストールする

npm install

ESLintを実行する

これを実行してコードの品質をチェックすることができます。

npm run lint

すべてのテストを実行する

npm test

名前でテストを実行する

npm test -- 'LinkedList'

playground

データ構造とアルゴリズムを ./src/playground/playground.js ファイルで再生し、 それに対するテストを書くことができ ./src/playground/__test__/playground.test.js.

次に、次のコマンドを実行して、遊び場コードが正常に動作するかどうかをテストします。

npm test -- 'playground'

有用な情報

参考文献

▶ データ構造とアルゴリズム on YouTube

ビッグO表記

Big O表記法は 入力サイズが大きくなるにつれて実行時間やスペース要件がどのように増加するかに応じてアルゴリズムを分類するために使用されます。下のチャートでは、Big O表記で指定されたアルゴリズムの成長の最も一般的な順序を見つけることができます。

出典: Big Oチートシート.

以下は、最も使用されているBig O表記のリストと、入力データのさまざまなサイズに対するパフォーマンス比較です。

Big O NotationComputations for 10 elementsComputations for 100 elementsComputations for 1000 elements
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

データ構造操作の複雑さ

Data StructureAccessSearchInsertionDeletionComments
Array1nnn
Stacknn11
Queuenn11
Linked Listnn11
Hash Table-nnnIn case of perfect hash function costs would be O(1)
Binary Search TreennnnIn case of balanced tree costs would be O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Treelog(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-False positives are possible while searching

配列の並べ替えアルゴリズムの複雑さ

NameBestAverageWorstMemoryStableComments
Bubble sortnn<sup>2</sup>n<sup>2</sup>1Yes
Insertion sortnn<sup>2</sup>n<sup>2</sup>1Yes
Selection sortn<sup>2</sup>n<sup>2</sup>n<sup>2</sup>1No
Heap sortn log(n)n log(n)n log(n)1No
Merge sortn log(n)n log(n)n log(n)nYes
Quick sortn log(n)n log(n)n<sup>2</sup>log(n)NoQuicksort is usually done in-place with O(log(n)) stack space
Shell sortn log(n)depends on gap sequencen (log(n))<sup>2</sup>1No
Counting sortn + rn + rn + rn + rYesr - biggest number in array
Radix sortn * kn * kn * kn + kYesk - length of longest key

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev