JavaScript Algorithms and Data Structures:JavaScript 实现的数据结构与算法学习仓库
该仓库收录了大量常见数据结构与算法的 JavaScript 实现,每个算法与数据结构都有独立 README,配有解释和延伸阅读链接(含 YouTube 视频),并附带 Big O 复杂度与操作复杂度对照表,适合用来系统学习、复习算法与准备技术面试。
社区作者 · zZz
它解决什么问题
项目用途
该仓库包含大量常见算法与数据结构的 JavaScript 实现示例。每个算法和数据结构都有独立的 README,附带相关解释和延伸阅读链接(包括指向 YouTube 视频的链接),README 提供简体中文、繁體中文、한국어、日本語、Polski、Français、Español、Português、Русский、Türkçe、Italiano、Bahasa Indonesia、Українська、Arabic、Tiếng Việt、Deutsch、Uzbek、עברית 等多语言版本入口。
仓库开头附有关于乌克兰局势的声明与捐助链接(Serhiy Prytula Charity Foundation、Come Back Alive Charity Foundation、National Bank of Ukraine,以及 war.ukraine.ua 与乌克兰外交部信息)。
数据结构(B 为入门,A 为进阶)
- B:Linked List、Doubly Linked List、Queue、Stack、Deque(双端队列)、Hash Table、Heap(最大堆与最小堆版本)、Priority Queue
- A:Trie、Tree、Binary Search Tree、AVL Tree、Red-Black Tree、Segment Tree(含 min/max/sum 区间查询示例)、Fenwick Tree(Binary Indexed Tree)、Graph(有向与无向)、Disjoint Set(并查集)、Bloom Filter、LRU Cache(最近最少使用缓存)
算法(按主题)
- 数学 Math:Bit Manipulation、Binary Floating Point、Factorial、Fibonacci Number(经典与闭式版本)、Prime Factors、Primality Test(试除法)、Euclidean Algorithm(GCD)、Least Common Multiple(LCM)、Sieve of Eratosthenes、Is Power of Two、Pascal's Triangle、Complex Number、Radian & Degree、Fast Powering、Horner's method、Matrices、Euclidean Distance、Integer Partition、Square Root(牛顿法)、Liu Hui π Algorithm、Discrete Fourier Transform
- 集合 Sets:Cartesian Product、Fisher–Yates Shuffle、Power Set、Permutations、Combinations、Longest Common Subsequence(LCS)、Longest Increasing Subsequence、Shortest Common Supersequence(SCS)、Knapsack Problem(0/1 与 Unbound)、Maximum Subarray、Combination Sum
- 字符串 Strings:Hamming Distance、Palindrome、Levenshtein Distance、Knuth–Morris–Pratt(KMP)、Z Algorithm、Rabin Karp、Longest Common Substring、Regular Expression Matching
- 查找 Searches:Linear Search、Jump Search(Block Search)、Binary Search、Interpolation Search
- 排序 Sorting:Bubble Sort、Selection Sort、Insertion Sort、Heap Sort、Merge Sort、Quicksort(原地与非原地实现)、Shellsort、Counting Sort、Radix Sort、Bucket Sort
- 链表 Linked Lists:Straight Traversal、Reverse Traversal
- 树 Trees:Depth-First Search(DFS)、Breadth-First Search(BFS)
- 图 Graphs:DFS、BFS、Kruskal's Algorithm(MST)、Dijkstra Algorithm、Bellman-Ford Algorithm、Floyd-Warshall Algorithm、Detect Cycle、Prim's Algorithm、Topological Sorting、Articulation Points(Tarjan)、Bridges、Eulerian Path and Eulerian Circuit(Fleury)、Hamiltonian Cycle、Strongly Connected Components(Kosaraju)、Travelling Salesman Problem
- 密码学 Cryptography:Polynomial Hash、Rail Fence Cipher、Caesar Cipher、Hill Cipher
- 机器学习 Machine Learning:NanoNeuron(7 个简单 JS 函数演示机器如何学习,含前向/反向传播)、k-NN、k-Means
- 图像处理 Image Processing:Seam Carving(内容感知图像缩放)
- 统计学 Statistics:Weighted Random
- 进化算法 Evolutionary algorithms:Genetic algorithm(以自动驾驶泊车训练为例)
- 未分类 Uncategorized:Tower of Hanoi、Square Matrix Rotation、Jump Game、Unique Paths、Rain Terraces、Recursive Staircase、Best Time To Buy Sell Stocks、Valid Parentheses、N-Queens Problem、Knight's Tour
算法(按范式)
- Brute Force:Linear Search、Rain Terraces、Recursive Staircase、Maximum Subarray、Travelling Salesman Problem、Discrete Fourier Transform
- Greedy:Jump Game、Unbound Knapsack Problem、Dijkstra、Prim's、Kruskal's
- Divide and Conquer:Binary Search、Tower of Hanoi、Pascal's Triangle、Euclidean Algorithm、Merge Sort、Quicksort、Tree DFS、Graph DFS、Matrices、Jump Game、Fast Powering、Best Time To Buy Sell Stocks、Permutations、Combinations、Maximum Subarray
- Dynamic Programming:Fibonacci Number、Jump Game、Unique Paths、Rain Terraces、Recursive Staircase、Seam Carving、Levenshtein Distance、LCS、Longest Common Substring、Longest Increasing Subsequence、SCS、0/1 Knapsack、Integer Partition、Maximum Subarray、Bellman-Ford、Floyd-Warshall、Regular Expression Matching
- Backtracking:Jump Game、Unique Paths、Power Set、Hamiltonian Cycle、N-Queens Problem、Knight's Tour、Combination Sum
- Branch & Bound:在回溯搜索各阶段记录已找到的最低代价解,并以此为下界剪除代价更大的部分解,通常结合状态空间树的 BFS 与 DFS 遍历
复杂度参考
Big O 记号用于按运行时间或空间需求随输入规模增长的方式对算法分类。配图 1(Big O graphs)展示了常见的增长阶曲线,来源标注为 Big O Cheat Sheet。
常见 Big O 在 10 / 100 / 1000 个元素下的计算量示例:O(1) 为 1/1/1;O(log N) 为 3/6/9;O(N) 为 10/100/1000;O(N log N) 为 30/600/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。
数据结构操作复杂度(Access / Search / Insertion / Deletion):Array 为 1/n/n/n;Stack 与 Queue 为 n/n/1/1;Linked List 为 n/n/1/n;Hash Table 为 -/n/n/n(完美哈希函数时可为 O(1));Binary Search Tree 为 n/n/n/n(平衡时为 O(log(n)));B-Tree、Red-Black Tree、AVL Tree 均为 log(n)/log(n)/log(n)/log(n);Bloom Filter 为 -/1/1/-(查找存在误报可能)。
数组排序算法复杂度(Best / Average / Worst / Memory / Stable):Bubble sort 为 n / n² / n² / 1 / 是;Insertion sort 为 n / n² / n² / 1 / 是;Selection sort 为 n² / n² / n² / 1 / 否;Heap sort 为 n log(n) 全部三档 / 1 / 否;Merge sort 为 n log(n) 全部三档 / n / 是;Quick sort 为 n log(n) / n log(n) / n² / log(n) / 否(通常原地实现,栈空间 O(log(n)));Shell sort 为 n log(n) / 取决于间隔序列 / n(log(n))² / 1 / 否;Counting sort 为 n+r 三档 / n+r / 是(r 为数组中最大数字);Radix sort 为 n*k 三档 / n+k / 是(k 为最长键长度)。
其他信息
作者为 @trekhleb,另有 trekhleb.dev 上的项目与文章:yesbrainer.ai(BYOK、私密、免账号的 AI 模型议事)与 okso.app(用于表达、理解与组织想法的绘画应用)。参考资料包括 YouTube 上的 Data Structures and Algorithms 以及 Data Structure Sketches。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
- 准备环境:确保已安装 Node.js,且版本 >= 16;项目使用 npm 管理依赖。如果使用 nvm 管理 Node 版本,可在项目根目录执行
nvm use,会自动选中正确的版本。
- 安装全部依赖:
npm install- 运行 ESLint(可选,用于检查代码质量):
npm run lint- 运行全部测试:
npm test- 按名称运行单个测试(例如只测 LinkedList):
npm test -- 'LinkedList'- 使用 Playground 试验:在
./src/playground/playground.js中尝试各种数据结构与算法,并在./src/playground/__test__/playground.test.js中为它编写测试,然后运行以下命令验证 Playground 代码是否符合预期:
npm test -- 'playground'- 常见问题排查:如果 lint 或测试失败,先删除 node_modules 文件夹并重新安装 npm 包:
rm -rf ./node_modules
npm i同时确认使用的 Node 版本正确(>=16);使用 nvm 时可在项目根目录执行 nvm use 以启用正确版本。
- 首次阅读:进入仓库后,可按需打开各算法/数据结构目录下的独立 README 查看解释与延伸阅读链接。