算法文档

Algorithm Documentation

算法学习指南

全面的算法学习资源,包含详细的理论讲解、复杂度分析和代码实现。 从基础数据结构到高级算法,帮助你建立完整的算法知识体系。

选择类别

数据结构

线性数据结构,元素在内存中连续存储

时间复杂度: O(1)空间复杂度: O(n)

线性数据结构,通过指针连接节点

时间复杂度: O(n)空间复杂度: O(n)

后进先出(LIFO)的数据结构

时间复杂度: O(1)空间复杂度: O(n)

先进先出(FIFO)的数据结构

时间复杂度: O(1)空间复杂度: O(n)

二叉树

查看 →

每个节点最多有两个子节点的树结构

时间复杂度: O(log n)空间复杂度: O(n)

完全二叉树,满足堆性质

时间复杂度: O(log n)空间复杂度: O(n)

由顶点和边组成的非线性数据结构

时间复杂度: O(V+E)空间复杂度: O(V+E)

哈希表

查看 →

通过哈希函数实现快速查找的数据结构

时间复杂度: O(1)空间复杂度: O(n)

排序算法

冒泡排序

查看 →

重复遍历数组,比较相邻元素并交换

时间复杂度: O(n²)空间复杂度: O(1)

选择排序

查看 →

每次选择最小元素放到已排序区域

时间复杂度: O(n²)空间复杂度: O(1)

插入排序

查看 →

将元素插入到已排序区域的正确位置

时间复杂度: O(n²)空间复杂度: O(1)

归并排序

查看 →

分治策略,将数组分成两半递归排序

时间复杂度: O(n log n)空间复杂度: O(n)

快速排序

查看 →

选择基准元素,将数组分为两部分

时间复杂度: O(n log n)空间复杂度: O(log n)

堆排序

查看 →

利用堆的性质进行排序

时间复杂度: O(n log n)空间复杂度: O(1)

搜索算法

线性搜索

查看 →

逐个检查数组中的每个元素

时间复杂度: O(n)空间复杂度: O(1)

二分搜索

查看 →

在有序数组中快速查找目标元素

时间复杂度: O(log n)空间复杂度: O(1)

深度优先搜索

查看 →

沿着图的深度方向遍历

时间复杂度: O(V+E)空间复杂度: O(V)

广度优先搜索

查看 →

按层次遍历图的节点

时间复杂度: O(V+E)空间复杂度: O(V)

图算法

Dijkstra算法

查看 →

寻找图中单源最短路径

时间复杂度: O(V²)空间复杂度: O(V)

Prim算法

查看 →

寻找最小生成树

时间复杂度: O(V²)空间复杂度: O(V)

Kruskal算法

查看 →

寻找最小生成树

时间复杂度: O(E log E)空间复杂度: O(V)

拓扑排序

查看 →

对有向无环图进行排序

时间复杂度: O(V+E)空间复杂度: O(V)

动态规划

斐波那契数列

查看 →

经典的动态规划问题

时间复杂度: O(n)空间复杂度: O(1)

最长公共子序列

查看 →

寻找两个序列的最长公共子序列

时间复杂度: O(mn)空间复杂度: O(mn)

背包问题

查看 →

在有限容量下选择最优物品组合

时间复杂度: O(nW)空间复杂度: O(nW)

编辑距离

查看 →

计算两个字符串的编辑距离

时间复杂度: O(mn)空间复杂度: O(mn)

学习路径

建议的学习顺序,帮助你循序渐进地掌握算法

1

基础数据结构

从数组、链表、栈、队列开始,建立对数据结构的基本认识

2

基础算法

学习排序和搜索算法,理解算法的基本思想和复杂度分析

3

高级算法

深入图算法和动态规划,掌握更复杂的算法设计技巧