Skip to content

算法篇

TODO

1. 算法复杂度分析

  • 时间复杂度(Time Complexity):衡量算法执行时间随输入规模变化的增长率。常见的时间复杂度有 O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n), O(n!) 等。
  • 空间复杂度(Space Complexity):衡量算法所需的内存空间随输入规模变化的增长率。

2. 大 O 记号(Big O Notation)

  • 用于描述算法的时间复杂度和空间复杂度的上限,表示最坏情况的性能。

3. 递归(Recursion)

  • 定义:函数直接或间接调用自身。
  • 基本思想:将问题分解为规模更小的子问题来解决。
  • 基本组成部分:基例(Base Case)和递归关系(Recursive Case)。

4. 动态规划(Dynamic Programming)

  • 定义:将问题分解为子问题,通过保存子问题的解来避免重复计算。
  • 适用场景:有重叠子问题和最优子结构性质的问题。

5. 分治法(Divide and Conquer)

  • 定义:将问题分解为独立的子问题,解决这些子问题,然后合并它们的解来解决原问题。
  • 适用场景:问题可以分解为多个独立的子问题。

6. 贪心算法(Greedy Algorithm)

  • 定义:在每一步选择中都采取当前状态下的最优选择,从而希望能够导致全局最优解。
  • 适用场景:问题具有贪心选择性质和最优子结构性质。

7. 回溯算法(Backtracking)

  • 定义:通过搜索所有可能的解来解决问题,当发现某个解不满足条件时,回溯并尝试其他可能的解。
  • 适用场景:问题需要搜索所有可能的解决方案。

8. 图算法(Graph Algorithms)

  • 深度优先搜索(DFS):遍历图的一个分支,直到不能继续,然后回溯并探索其他分支。
  • 广度优先搜索(BFS):逐层遍历图中的节点。
  • 最短路径算法:如 Dijkstra 算法、Bellman-Ford 算法。
  • 最小生成树算法:如 Prim 算法、Kruskal 算法。

9. 排序算法(Sorting Algorithms)

  • 冒泡排序(Bubble Sort):O(n^2)
  • 选择排序(Selection Sort):O(n^2)
  • 插入排序(Insertion Sort):O(n^2)
  • 快速排序(Quick Sort):平均 O(n log n)
  • 归并排序(Merge Sort):O(n log n)
  • 堆排序(Heap Sort):O(n log n)

10. 查找算法(Search Algorithms)

  • 线性查找(Linear Search):O(n)
  • 二分查找(Binary Search):O(log n)

11. 树和二叉树(Trees and Binary Trees)

  • 树的基本概念:根节点、叶节点、子节点、父节点。
  • 二叉树遍历:前序遍历、中序遍历、后序遍历。
  • 二叉搜索树(BST):具有特定性质的二叉树,左子树所有节点的值小于根节点的值,右子树所有节点的值大于根节点的值。

12. 哈希表(Hash Table)

  • 定义:一种根据关键码值(Key Value)直接进行访问的数据结构。
  • 常见哈希函数:将关键码映射到数组索引的函数。
  • 处理冲突的方法:如链地址法、开放地址法。

13. 字符串算法(String Algorithms)

  • 字符串匹配算法:如 KMP 算法、Boyer-Moore 算法。
  • 字符串哈希:将字符串映射为整数以便快速比较。