算法设计与分析[0007] Minimum Spanning Tree(最小生成树)

 本文将介绍带权图的最小生成树(Minimum Spanning Tree)算法:给定一个无向图 G,并且它的每条边均有权值,则 MST 是一个包括 G 的所有顶点及边的子集的图,这个子集保证图是连通的,并且子集中所有边的权值之和为所有子集中最小的。
 本文中介绍两种求解图的最小生成树的算法:Prim 算法和 Kruskal 算法,这两种算法都是贪心算法。一般而言,贪心策略不一定能保证找到全局最优解,但是对最小生成树问题来说,贪心策略能获得具有最小权值的生成树。

算法设计与分析[0006] Some Shortest-path Algorithms(最短路径算法)

 本文介绍几种常见的最短路径算法:

  • Breadth-first Search 无权最短路径算法;
  • Dijkstra 带权(非负权)图的单源最短路算法;
  • Bellman-Ford 带权(可负权)图的单源最短路算法;
  • Floyd-Warshall 带权(可负权)图的全源最短路算法,
     包括它们各自的使用条件&范围算法原理介绍以及代码实现

算法设计与分析[0005] Breadth First Search(广度优先搜索)

 本文主要介绍 BFSC++C 语言实现,并借助 LeetCode 上的一道题,说说基本的 BFS 在问题求解中的应用。

What’s B(readth)F(irst)S(earch)

 广度优先搜索算法(Breadth First Search),又叫宽度优先搜索,或横向优先搜索。是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。

算法设计与分析[0004] Depth First Search(深度优先搜索)

 本文主要介绍 DFSC++C 语言实现,并借助 LeetCode 上的一道题,说说基本的 DFS 在问题求解中的应用。

What’s D(epth)F(irst)S(earch)

 深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点 N 的所有边都己被探寻过,搜索将回溯到发现节点 N 的那条边的起始节点,这一过程一直进行到已发现从源节点可达的所有节点为止。
 如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

算法设计与分析[0002] Divide and Conquer——FFT(快速傅里叶变换)

 本文介绍 Divide and Conquer(分而治之) 的一种典型算法,FFT(快速傅里叶变换)。

DFT

DFT:$X[k] = \sum_{n=0}^{N-1} x[n] e^{-j \frac{2 \pi k}{N} n}, k = 0, 1, 2, …, N-1$

  • for each k: N complex mults, N-1 complex adds
  • $e^{-j \frac{2 \pi k}{N} n}$ 预计算并保存在计算机中
  • $O(N^2)$ computations for direct DFT $\Longrightarrow$ $O(N log_2 N)$ for FFT