文章分类 -  算法

摘要:团(clique)是图论中的用语。对于给定图G=(V,E)。其中,V={1,…,n}是图G的顶点集,E是图G的边集。图G的团就是一个两两之间有边的顶点集合。简单地说,团是G的一个完全子图。如果一个团不被其他任一团所包含,即它不是其他任一团的真子集,则称该团为图G的极大团(maximal clique 阅读全文
posted @ 2021-05-31 11:51 Dazzling! 阅读(3511) 评论(0) 推荐(0) 编辑
摘要:匿名数组是什么?有什么用?怎么用?一探究竟来自内心深处的敲问! 1.是什么? 匿名数组顾名思义是隐藏(没有)名字的数组。 常规的整型数组: int array[] = {1, 2, 3}; 它等价于以下的匿名数组: (int[]){1, 2, 3} 2.有什么用? 匿名数组可以直接当作参数传递,可以 阅读全文
posted @ 2021-04-17 11:44 Dazzling! 阅读(731) 评论(0) 推荐(0) 编辑
摘要:左移 在二进制表示下把数字同时向左移动,低位以0填充,高位越界后舍弃。 1<<n=2n,n<<1=2n 算术右移 在二进制补码表示下把数字同时向右移动,高位以符号位填充,低位越界后舍弃。 \[ n >> 1 = \lfloor \frac{n}{2.0} \rf 阅读全文
posted @ 2021-04-14 12:22 Dazzling! 阅读(187) 评论(0) 推荐(0) 编辑
摘要:Fibonacci数列:F(0)=1 , F(1)=1 , F(n)=F(n-1)+F(n-2) 我们以前快速求Fibonacci数列第n项的方法是:构造常系数矩阵 (一) Fibonacci数列f[n]=f[n-1]+f[n-2],f[1]=f[2]=1的第n项快速求法(不考虑高精度) 解法: 考 阅读全文
posted @ 2021-04-05 11:35 Dazzling! 阅读(168) 评论(0) 推荐(0) 编辑
摘要:通过传递性推导出尽量多的元素之间的关系的问题被称为传递闭包。 阅读全文
posted @ 2021-04-04 17:42 Dazzling! 阅读(306) 评论(0) 推荐(0) 编辑
摘要:对于一一个序列a,若i<j且a[i]>a[j],则称a[i]与a[j] 构成逆序对。 使用归并排序可以在O(nlogn)的时间里求出一一个长度为n的序列中逆序对的个数。归并排序每次把序列二分,递归对左右两半排序,然后合并两个有序序列。 递归对左右两半排序时,可以把左右两半各自内部的逆序对数作为子 阅读全文
posted @ 2021-03-27 21:32 Dazzling! 阅读(237) 评论(0) 推荐(0) 编辑
摘要:最近公共祖先(Lowest Common Ancestors, LCA),是指在有根树中,某两个结点u和v最近的公共祖先。 u和v的公共祖先是指一个结点既是u的祖先,又是v的祖先。 u和v最近的公共祖先是指离u和v最近的公共祖先。 如果v本身就是u的祖先则u和v最近的公共祖先就是v。 可以利用LCA 阅读全文
posted @ 2021-03-12 09:53 Dazzling! 阅读(437) 评论(0) 推荐(0) 编辑
摘要:问题描述: 从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题。 栗子: 从arr[1, 12]={5,3,7,1,8,2,9,4,7,2,6,6} 这n=12个数中,找出最大的k=5个。 一、排序 排序是最容易想到的方法,将n个数排序之后,取出最大的k个,即为所得。 分析: 阅读全文
posted @ 2021-03-06 11:29 Dazzling! 阅读(122) 评论(0) 推荐(0) 编辑
摘要:拓展域并查集解决了一种多个有相互关系的并查集,放在一起考虑的问题。 一般的并查集应用一般就是判断在不在一个集合,拓展域并查集讲的是多个集合之间有相互关系,一般为相互排斥关系,判断是否在一个集合等。 首先对与最简单的并查集来说,如果两个是同一类,那么就p[pa]=pb对吧,但是对于两个相互排斥类的怎么 阅读全文
posted @ 2021-03-04 21:36 Dazzling! 阅读(464) 评论(0) 推荐(0) 编辑
摘要:lower_bound()和upper_bound()都是利用二分查找的方法在一个排好序的数组中进行查找的。需要引入头文件:algorithm。 1)在从小到大的排序数组中 lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的 阅读全文
posted @ 2021-03-02 23:06 Dazzling! 阅读(54) 评论(0) 推荐(0) 编辑
摘要:拓扑排序 如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(Directed Acyclic Graph, DAG)。 拓扑排序是将有向无环图G的所有顶点排成一个线性序列,使得对图G中的任意两个顶点u、v,如果存在边u->v,那么在序列中u一定在v前面。这个序列又被 阅读全文
posted @ 2021-03-02 16:39 Dazzling! 阅读(135) 评论(0) 推荐(0) 编辑
摘要:最小生成树 最小生成树(Minimum Spanning Tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。 最小生成树有3个性质需要掌握: 最小生成树是树,因此其边数等于顶点数减1,且树内一定不 阅读全文
posted @ 2021-03-01 14:15 Dazzling! 阅读(84) 评论(0) 推荐(0) 编辑
摘要:Dijkstra算法 Dijkstra算法(读者可以将其读作“迪杰斯特拉算法”)用来解决单源最短路问题,即给定图G和起点s,通过算法得到s到达其他每个顶点的最短距离。Dijkstra的基本思想是对图G(V,E)设置集合S存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点( 阅读全文
posted @ 2021-02-28 22:11 Dazzling! 阅读(64) 评论(0) 推荐(0) 编辑
摘要:图由顶点(Vertex)和边(Edge)组成,每条边的两端都必须是图的两个顶点(可以是相同的顶点)。而记号G(V,E)表示图G的顶点集为V、边集为E。 顶点和边都可以有一定属性,而量化的属性称为权值,顶点的权值和边的权值分别称为点权和边权。权值可以根据问题的实际背景设定,例如点权可以是城市中资源的数 阅读全文
posted @ 2021-02-28 16:52 Dazzling! 阅读(48) 评论(0) 推荐(0) 编辑
摘要:先介绍经典的合并果子问题。 有n堆果子,每堆果子的质量已知,现在需要把这些果子合并成一一堆, 但是每次只能把两堆果子合并到一起,同时会消耗与两堆果子质量之和等值的体力。显然,在进行n-1次合并之后,就只剩下一堆了。为了尽可能节省体力,请设计出合并的次序方案,使得耗费的体力最少,并给出消耗的体力值。 阅读全文
posted @ 2021-02-28 09:24 Dazzling! 阅读(337) 评论(0) 推荐(0) 编辑
摘要:堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子结点的值。 其中,如果父亲结点的值大于或等于孩子结点的值,那么称这样的堆为大顶堆,这时每个结点的值都是以它为根结点的子树的最大值,如果父亲结点的值小于或等于孩子结点的值,那么称这样的堆为小顶堆,这时每个结点的值都是以它为根结点的子树的 阅读全文
posted @ 2021-02-26 15:57 Dazzling! 阅读(46) 评论(0) 推荐(0) 编辑
摘要:并查集是一种维护集合的数据结构,它的名字中“并”“查”“集”分别取自Union(合并)、Find (查找)、Set (集合)这了3个单词。也就是说,并查集支持下面两个操作: 合并:合并两个集合。 查找:判断两个元素是否在-一个集合。 那么并查集是用什么实现的呢?其实就是用一个数组: int fath 阅读全文
posted @ 2021-02-25 12:17 Dazzling! 阅读(111) 评论(0) 推荐(0) 编辑
摘要:树的性质 由于机考的性质,读者不需要对树的许多理论知识都了如指掌,下面只给出几个比较实用的概念和性质,希望读者能把它们记住,其中性质①⑤经常被用来出边界数据: 树可以没有结点,这种情况下把树称为空树(empty tree)。 树的层次(layer) 从根结点开始算起,即根结点为第一层,根结点子树的根 阅读全文
posted @ 2021-02-23 18:33 Dazzling! 阅读(177) 评论(0) 推荐(0) 编辑
摘要:DFS 使用递归可以很好地实现深度优先搜索。这个说法并不是说深度优先搜索就是递归,只能说递归是深度优先搜索的一种实现方式,因为使用非递归也是可以实现DFS的思想的,但是一般情况下会比递归麻烦。不过,使用递归时,系统会调用一个叫系统栈的东西来存放递归中每一层的状态,因此使用递归来实现DFS的本质其实还 阅读全文
posted @ 2021-02-22 21:22 Dazzling! 阅读(84) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示