摘要: 对于一个图来说,我们可以选择不同的边而产生不同的树,由于边的选择不一样,每一条边的权值不一样,那我们最后生成出来的树的权值也就不一样,Kruskal算法和prim算法就是来找怎样选择边才可以使产生的树的权值最小。 Kruskal算法思路:现在有一个集合Q,来表示图中的所有的点,有一个集合U,来表示已 阅读全文
posted @ 2019-11-03 18:48 香格里拉太子zo 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 并查集 并查集是一种非常灵活的数据结构,他是用来处理一些不相交的集合问题,如求最小的团伙数,连通子图等等。 在使用并查集的时候,首先会存在一些不相交的动态集合,s{s1,s2......},一般集合中的元素是会用整数来表示。 并查集一般包含以下几个部分。 1:设置每一个元素的父节点为自身。 2:fi 阅读全文
posted @ 2019-10-20 20:51 香格里拉太子zo 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 一:01背包 题目:有一个容量为T的背包,现有n个物品,每个物品有都有一个体积w[ i ],和自身价值v[ i ],现在要求求出背包能够装的物品的价值最大。每个物品只可以装一次。 基本思路:01背包是背包中的最基础的问题,后面很多背包问题都是01背包和完全背包延伸出来的。01背包的特点是:每一个物品 阅读全文
posted @ 2019-09-29 12:08 香格里拉太子zo 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 木桶排序(箱排序)就是将数组中的数分到有限个木桶中去。木桶排序的必要步骤是计数,记录每一个数出现的次数。 原理图展示: 我们先假设待排数组是a,数组长度为n,max代表数组中最大的数所在的范围,即[ 0,max)。木桶数组为buceks。 看上面的图,我们可以看到,在循环的时候,buckes[a[ 阅读全文
posted @ 2019-09-25 16:17 香格里拉太子zo 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 简介: vector(向量)相当于一个数组,它是在内存中分配一块连续的的存储空间。支持不指定vector的大小,当所存数据的大小超过了分配的存储空间,这时候会再次重新分配一块较大的内存。这就相当于我们可以不用指定vector的大小。反观数组的话,数组的大小就只可以开到1e6的大小,当我们的数据规模超 阅读全文
posted @ 2019-09-16 16:30 香格里拉太子zo 阅读(179) 评论(0) 推荐(0) 编辑
摘要: <queue>是STL中的队列,特点是先进先出,方便我们不用自己去构造队列,包含在头文件#include<queue>中。 定义一个队列:queue<int> q;(数据类型可以根据自己的需要来定义) 基本操作: 入队:q.push(x),将元素添加到队列的末尾。 出队:q.pop(),弹出队列的第 阅读全文
posted @ 2019-09-12 10:55 香格里拉太子zo 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 快速幂求模模板: 阅读全文
posted @ 2019-08-29 14:15 香格里拉太子zo 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 归并排序用的是分治的思想。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 这里的归并排序就是将一个序列分成多个序列,可分成每个序列只有一个元素,然后将挨着 阅读全文
posted @ 2019-08-24 09:28 香格里拉太子zo 阅读(1034) 评论(0) 推荐(0) 编辑
摘要: 一般我们求的较多的就是十进制转二进制,八进制,十六进制,这样的转换我们只需要不断的取余即可,然后输出 附上代码: 然而出了将一个数转换为正进制数,我们还有将一个数转换为负进制数。遇到了负进制数,我们取余的时候余数会出现负的情况。 我们就要处理这个负数的情况。 我们可以经过以下的变换: N/R=B.. 阅读全文
posted @ 2019-08-23 16:28 香格里拉太子zo 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸 阅读全文
posted @ 2019-08-20 17:03 香格里拉太子zo 阅读(103) 评论(0) 推荐(0) 编辑