摘要:
给定有向图 G = (V, E),需要判断该图中是否存在环路(Cycle)。深度优先搜索(DFS:Depth-First Search)可以用于检测图中是否存在环。DFS 会对一个连通的图构造一颗树,如果在构造树的过程中出现反向边(Back Edge),则认为图中存在环路。对于非连通图,可以对图中的不同部分分别进行 DFS 构造树结构,对于每棵树分别检测反向边的存在。在 DFS 对图进行遍历时,将遍历过的顶点放入递归栈中,如果新遍历的顶点已经存在于递归栈中,则说明存在一个反向边,即存在一个环。 阅读全文
摘要:
深度优先搜索(DFS:Depth-First Search)是一种图搜索策略,其将搜索限制到 2 种操作:(a) 访问图中的一个节点;(b) 访问该节点的子节点。对图的深度优先搜索与对树(Tree)的深度优先遍历(Depth First Traversal)是类似的,区别在于图中可能存在环,所以可能会遍历到已经遍历的节点。 阅读全文
摘要:
广度优先搜索(BFS:Breadth-First Search)是一种图搜索策略,其将搜索限制到 2 种操作:(a) 访问图中的一个节点;(b) 访问该节点的邻居节点。广度优先搜索(BFS)由 Edward F. Moore 在 1950 年发表,起初被用于在迷宫中寻找最短路径。对图的广度优先搜索与对树(Tree)的广度优先遍历(Breadth First Traversal)是类似的,区别在于图中可能存在环,所以可能会遍历到已经遍历的节点。BFS 算法的实现通常使用队列(Queue)数据结构来存储遍历图中节点的中间状态。 阅读全文
摘要:
有一个小偷在偷窃一家商店时发现有 n 件物品,第 i 件物品价值 vi 元,重 wi 磅,此处 vi 和 wi 都是整数。小偷希望带走的物品价值越高越好,但他的背包至多只能装下 W 磅的东西,W 为整数。为尽可能多的带走更多的东西,小偷可以带走物品的一部分,而不必做出 0-1 的二分选择。那么,小偷应该带走哪些物品呢? 阅读全文
摘要:
本文汇编了一些常见的字符串算法,包括字符串反转算法、字符串左旋算法、字符串右旋算法、字符串旋转匹配算法、字符串包含算法、字符串删除算法、字符串转整数算法、字符串全排列算法、字符串字典序组合算法等。 阅读全文