经典算法
文章平均质量分 53
RandomWW
这个作者很懒,什么都没留下…
展开
-
算法教程学习--深度优先搜索(DFS)
算法教程学习–深度优先搜索(DFS)深度优先搜索(DFS)意指从一个节点出发不断向一个方向搜索直到此方向到达终点或者不能继续搜索为止。为了可以完整地从搜索出一个节点的所有道路,需要考虑回溯的方法。简单的递归版DFS大致实现:def rec_dfs(G, s, S): # G表示图,s表示开始的节点,S表示访问的队列 S.add(s) for u in G[s]: if s in S:...原创 2018-12-14 14:06:00 · 544 阅读 · 0 评论 -
BFS和强连通分量寻找
广度优先走索(BFS)与DFS的区别还是比较明显的:后者是首先朝着一个方向始终探索,直到“死路”才回溯去探索别的路口;后者则是稳步推进的方式,有点类似水纹扩散,一步一步向外扩散。在代码思想上,主要一个是运用FIFO队列一个是FILO队列。大致实现如下:from collections import dequedef bfs(G, s, seq, ans): # G是图,s是起始点,seq是F...原创 2018-12-24 20:56:07 · 781 阅读 · 0 评论 -
算法教程学习——分治算法
分治算法的通用形式:def divide_and_conquer(S, divide, combine): if len(S) == 1: return S L, R = divide(S) A = divide_and_conquer(L, divide, combine) B = divide_and_conquer(R, divide, combine) return com...原创 2019-03-12 15:47:01 · 263 阅读 · 0 评论 -
算法教程学习——贪心算法(Kruskal算法)
贪心算法所做的每个选择都是独立的,并且是当下所有选择中的最佳决策。贪心算法相对容易实现,但是很难给出一个确切的证明,即贪心算法是合理的,是问题的最优解之一。贪心算法的证明通常涉及到两个步骤:贪心选择性最优子结构贪心选择性指的是,每次通过贪心选择得到了一个最优解决方案的一部分。而最优子结构则是,做出选择后剩下的问题和原有的问题有着同样的解决方案。最小生成树问题Kruskal算法kru...原创 2019-03-12 19:16:35 · 2205 阅读 · 0 评论