mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-12-26 07:01:18 +08:00
assets | ||
src | ||
.babelrc | ||
.editorconfig | ||
.eslintrc | ||
.gitignore | ||
.travis.yml | ||
jest.config.js | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md |
JavaScript Algorithms and Data Structures
Code Examples
Data Structures
- Linked List
- Queue
- Stack
- Hash Table
- Heap
- Priority Queue
- Trie
- Tree
- Binary Search Tree
- AVL Tree
- B-Tree
- 2-3 Tree
- Red-Black Tree
- Suffix Tree
- Segment Tree or Interval Tree
- Binary Indexed Tree or Fenwick Tree
- Graph
Algorithms
- Math
- Fibonacci Number
- Cartesian Product
- Power Set
- Primality Test (trial division)
- Euclidean Algorithm - calculate the greatest common divisor (GCD)
- Fisher–Yates Shuffle - random permutation of a finite sequence
- Collatz Conjecture algorithm
- Greatest Difference
- Least Common Multiple
- Newton's square
- Shannon Entropy
- String
- String Permutations
- Combination
- Minimum Edit distance (Levenshtein Distance)
- Hamming
- Huffman
- Knuth Morris Pratt
- Longest common subsequence
- longest common substring
- Rabin Karp
- Search
- Sorting
- Graph
- Depth-First Search (DFS)
- Breadth-First Search (BFS)
- Detect Cycle
- Topological Sorting
- Dijkstra Algorithm to Find Shortest Path
- Eulerian path, Eulerian circuit
- Bellman Ford
- Strongly Connected Component algorithm
- Shortest Path Faster Algorithm (SPFA)
- Tree
- Depth-First Search (DFS)
- Breadth-First Search (BFS)
- Minimum Spanning Tree
- Prim’s algorithm
- Kruskal’s algorithm
- Dynamic Programming
- Increasing subsequence
- Knapsack problem
- Maximum subarray
- Maximum sum path
- Integer Partition
- Longest common Subsequence
- Longest Increasing subsequence
- Shortest common supersequence
- Uncategorized
- Union-Find
- Maze
Running Tests
Run all tests
npm test
Run tests by name
npm test -- -t 'LinkedList'
Playground
You may play with data-structures and algorithms in ./src/playground/playground.js
file and write
tests for it in ./src/playground/__test__/playground.test.js
.
Then just simply run the following command to test if your playground code works as expected:
npm test -- -t 'playground'
Useful links
- Data Structures and Algorithms on YouTube
- Algorithms
- Dynamic Programming
Useful Information
Big O Notation
Order of growth of algorithms specified in Big O notation.
Source: Big O Cheat Sheet.
Below is the list of some of the most used Big O notations and their performance comparisons against different sizes of the input data.
Big O Notation | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements |
---|---|---|---|
O(1) | 1 | 1 | 1 |
O(log N) | 3 | 6 | 9 |
O(N) | 10 | 100 | 1000 |
O(N log N) | 30 | 60 | 9000 |
O(N^2) | 100 | 10000 | 1000000 |
O(2^N) | 1024 | 1.26e+29 | 1.07e+301 |
O(N!) | 3628800 | 9.3e+157 | 4.02e+2567 |
Data Structure Operations Complexity
Data Structure | Access | Search | Insertion | Deletion |
---|---|---|---|---|
Array | 1 | n | n | n |
Stack | n | n | 1 | 1 |
Queue | n | n | 1 | 1 |
Linked List | n | n | 1 | 1 |
Hash Table | - | n | n | n |
Binary Search Tree | n | n | n | n |
B-Tree | log(n) | log(n) | log(n) | log(n) |
Red-Black Tree | log(n) | log(n) | log(n) | log(n) |
AVL Tree | log(n) | log(n) | log(n) | log(n) |
Array Sorting Algorithms Complexity
Name | Best | Average | Worst | Memory | Stable |
---|---|---|---|---|---|
Bubble sort | n | n^2 | n^2 | 1 | Yes |
Insertion sort | n | n^2 | n^2 | 1 | Yes |
Selection sort | n^2 | n^2 | n^2 | 1 | No |
Heap sort | n log(n) | n log(n) | n log(n) | 1 | No |
Merge sort | n log(n) | n log(n) | n log(n) | n | Yes |
Quick sort | n log(n) | n log(n) | n^2 | log(n) | No |
Shell sort | n log(n) | depends on gap sequence | n (log(n))^2 | 1 | No |