随笔分类 - 算法
KMP算法
摘要:字符串匹配中经常会用到KMP算法。它求解的问题类型是:字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 我们一般的做法是:将一个字符串(长度为n,模式串)放在另一个字符串(长度为m,主串)开始的位置,然后依次比较,如果有不匹配的字符,就将字符串往后移
阅读全文
鸡尾酒排序
摘要:鸡尾酒排序,也叫双向冒泡排序,是冒泡排序的一个变形。 使用鸡尾酒排序为一列数字进行排序的过程可以通过右图形象的展示出来: 数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到
阅读全文
二分图
摘要:所谓的二分图,就是指图中的所有顶点可以分为两个集合A和B,并且图中的每条边的两个顶点都是一个在A,一个在B,则该图是一个二分图。 下面我们来解释几个关于二分图的一些相关概念。 (1)最大匹配 在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。选择这样的边数最大的子集称
阅读全文
最小生成树-kruskal算法
摘要:连通图的一棵生成树是包含图的所有顶点的连通无环子图。 加权连通图的一棵最小生成树是图的一棵权重最小的生成树,其中,树的权重定义为所有边的权重总和。 最小生成树问题就是求一个给定的加权连通图的最小生成树问题。 最小生成树的算法主要有prim算法和kruskal算法,这篇主要讲解和实现后者。 krusk
阅读全文
全局最小割
摘要:概念 无向图的割:有无向图G=(V,E)G=(V,E),设CC为图GG中一些弧的集合,若从GG中删去CC中的所有弧能使图GG不是连通图,称CC图GG的一个割。 S−T割:使得顶点SS与顶点TT不再连通的割,称为S−T割 S−T最小割:包含的弧的权和最小的S−T割,称为S−T最小割。 全局最小割:包含
阅读全文
计数排序
摘要:计数排序是一个不需要比较的,类似于桶排序的线性时间排序算法。该算法是对已知数量范围的数组进行排序。其时间复杂度为O(n),适用于小范围集合的排序。 比如一千万个整数,每个数的范围在[-1000,1000],怎样对他们排序最快?答案应该是计数排序。因为时间复杂度为o(n),线性复杂度。 (1)基本思想
阅读全文
拓扑排序
摘要:在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件: 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。 拓扑排序常用的两个方法 1、减治技术 所以拓扑排
阅读全文
贪心算法之过河问题
摘要:题目大意是只有一艘船,能乘2人,船的运行速度为2人中较慢一人的速度,过去后还需一个人把船划回来,问把n个人运到对岸,最少需要多久。先将所有人过河所需的时间按照升序排序,我们考虑把单独过河所需要时间最多的两个旅行者送到对岸去,有两种方式:1.最快的和次快的过河,然后最快的将船划回来;次慢的和最慢的过河
阅读全文
贪心算法概述
摘要:贪心,顾名思义,就是在把一个大问题分割成无数个相类似的子结构之后,对于每一个子结构,只在乎当前,贪心考虑最优选择,无需考虑整体最优。用专业一点的术语来说,就是无后效性。 具体来说,面对一个大问题,截取当前的一小部分,在这个小部分中选择最优最好的结果。然后以一种迭代,也就是递推的方式选取相似的下一小部
阅读全文
动态规划的入门
摘要:http://www.cnblogs.com/sdjl/articles/1274312.html 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本
阅读全文
浙公网安备 33010602011771号