算法设计与分析[0010] Longest Increasing Subsequence(最长递增子序列)

300. Longest Increasing Subsequence

Given an unsorted array of integers, find the length of longest increasing subsequence.
For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that there may be more than one LIS combination, it is only necessary for you to return the length.

  • 给出一个序列 $a_1, a_2, …, a_n$,求它的一个子序列(设为 $s_1, s_2, …, s_n$ ),使得这个子序列满足这样的性质:$ s_1 < s_2 < s_3 <…< s_n $ 并且这个子序列的长度最长,输出这个最长的长度。实际上,诸如最长下降子序列,最长不上升子序列等问题都可以看成同一个问题,仔细思考就会发现,这其实只是 $<$ 符号定义上的问题,并不影响问题的实质。

算法设计与分析[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 的那条边的起始节点,这一过程一直进行到已发现从源节点可达的所有节点为止。
 如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。