- 博客(17)
- 收藏
- 关注
原创 算法分析大作业 圆排列问题
算法分析与设计圆排列问题问题描述:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。算法假设三个圆的半径分别为1,1,2。那么这种情况的圆排列长度为2+4sqrt(2)。计算r1=1,r2=2情况下的两圆心的距离为len2=(r1+r2)2-(r2-r1)^2。推广到所有情况就可以得到len=2sqrt(r1*r2)。这是n=3时,圆A,圆B,圆C的排列数的情况。ABC,ACB,BCA,BAC,CAB,CBA。圆排列问题的解空间是一颗排列树。按照回溯法
2020-06-15 21:15:12
792
原创 读书笔记
李煜东编写的《算法竞赛进阶指南》是我所读的有关算法的书籍。由于参加ACM实验室的缘故,这本书自从大一下学期开始我就时常拿出来阅读。学习新的算法,有一本好的书籍,算法学习起来要方便许多。我从这本书中学到了很多算法,比如并查集,线段树,最短路,最小生成树,LCA,搜索,二分图,网络流,概率dp,状压dp,费马小定理,博弈论等一些基本算法。 我在刚学习dp这部分内容的时候,看着代码都没有理解dp的含义,后面慢慢学习动态规划后才渐渐学会了dp,并且可以在平时的训练赛中可以解决一些简单的dp,比较明显的状压dp和.
2020-06-10 23:20:02
251
原创 算法分析与设计 M点着色问题
算法分析与设计M点着色问题问题描述:图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答”NO”。算法使用哈夫曼算法进行构造最优前缀码。核心代码:考虑所有的图,讨论在至多使用m种颜色的情况下,可对一给定的图着色的所有不同方法。通过回溯的方法,不断的为每一个节点着色,在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色,这时候枚举可用的m个颜色,通过和第n个节点相邻的节点
2020-06-02 19:20:05
996
原创 算法分析与设计 哈夫曼编码
算法分析与设计哈夫曼编码问题描述:代码(码字):Q{001,00,010,01}表示字符a,b,c,d同一序列:0100001产生两种译码(产生歧义):01 00 001;010 00 01二元前缀码:任何字符的代码不能作为其他字符代码的前缀利用二元前缀码译码:从第一个字符开始一次读入每个字符(0或1),如果发现独到的字串与某个码字相等,就将这个子串译作相应的码字:然后从下一个字符开始继续这个过程,直到读完输入的字符串为止。二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个字符的前缀码
2020-05-18 19:12:05
1578
1
原创 算法分析与设计 贪心值之最大相容子集问题
算法分析与设计最大相容子集问题问题描述:有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截至之间。如果任何两个活动不能同时进行,问如何选择这些活动,从而使得被安排的活动数量达到最多。算法按照截止时间从小到大排序,之后从前往后挑选。核心代码:int Greedy() { int num=1; sort(a+1,a+n+1,comp); int temp...
2020-05-04 22:03:44
874
原创 算法分析与设计 最长公共子序列
算法分析与设计最长公共子序列问题描述:给定两个序列X=<x1,x2,…,xm>和Y=<y1,y2,…,yn>,求X和Y长度最长的公共子序列。算法假设s1,s2两个序列s1={1,3,4,5,6,7,7,8},s2={3,5,7,4,8,6,7,8,2}下面的推导图来自网上资料。如果横竖(i,j)对应的两个元素相等,该格子的值 = c[i-1,j-1] ...
2020-04-27 21:07:18
461
原创 算法分析与设计 矩阵链乘法之动态规划
算法分析与设计矩阵链乘法之动态规划问题描述:给定n个矩阵的链<A 1 ,A 2 ,…,A n >,其中i=1,2,…,n,矩阵A i的维数为p i-1 ×p i 。求一个完全“括号化方案”,使得计算乘积A1 A2 …A n 所需的标量乘法次数最小。算法思路:假设矩阵Ai的维数是Pi-1*Pi,输入是一个序列P=<P0,P1,…,Pn>,其中length[p]=n...
2020-04-20 19:50:01
451
1
原创 算法分析与设计 投资问题之动态规划
算法分析与设计投资问题之动态规划问题描述:设有m万元钱,n项投资,函数fi(x)表示将x万元投入第i项项目所产生的效益,i=1,2,…,n问:如何分配这m元钱,使得投资的总效益最高?算法思路:递推公式优化原则:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。已知:这个序列 L1 是最优决策序列那么:这个序列任何子序列本身一定是相对于子序列的...
2020-04-13 19:14:16
681
原创 算法分析与设计 分治法之第k小问题
算法分析与设计分治法之第k小问题问题描述:对n个不同的数构成的数组A[1…n],求出第k小的元素。算法思路:利用快排的思想,每次取出一个mid,然后以mid为基准将数分为左右两个部分,根据两个部分数的个数确定第k小的元素在哪个部分,继续进行递归查找。核心代码:void select_k(int arr[],int l,int r,int k){ int i=l,j=r,mid=ar...
2020-04-06 20:00:14
851
原创 算法分析与设计 最近点对
算法分析与设计最近点对问题问题描述:已知有n个点的集合,找出其中最近的一对并返回其最近距离。算法思路:每次用分治的思想将数组进行二分操作,然后从下往上开始进行合并排序。将所有点放入到结构体中,对结构体按照x或y左边的值进行排序。根据下标进行分割,分为两个点集a,b。最近点有三种情况,分别为在a中,在b中,a,b各一个。前两种使用递归得到答案。最后一种则是在一个距离小于d的集合...
2020-03-30 19:26:33
400
原创 算法分析与设计 二分归并排序
算法分析与设计二分归并排序问题描述:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k。算法思路:每次用分治的思想将数组进行二分操作,然后从下往上开始进行合并排序。核心代码:if p<rthen q<-(p+r)/2 mergesort(a,p,q) mergesort(a,q+1,r) merge(a,p,q,r)时间复杂度:设n=...
2020-03-23 18:55:32
862
原创 算法分析与设计 检索算法
算法分析与设计检索算法问题描述:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.算法思路:朴素算法:遍历数组T中的每一个元素,当查找到x时,停止查找,输出下标。二分查找:因为当前的数组T是排好序的,所以直接可以进行二分查找,设置两个变量,l,r、l=T[1],r=T[n].每次取mid=(l+r)/2,判断的T[mid]的值与x...
2020-03-16 19:28:34
167
原创 算法分析与设计 最短路Dijkstra
算法分析与设计最短路 Dijkstra算法问题描述:给出一张带权的的图,边的权值可以理解为两点之间的距离。一张图中任意两点间会有不同的路径相连。最短路就是指连接两点的这些路径中最短的一条。算法思路:Dijkstra是求单源最短路劲问题。算法流程如下:初始化dis[1]=0,其余节点的dis值无穷大。找出一个未被标记的、dis[x]最小的节点x,然后标记节点x。扫描节点x的所有出边...
2020-03-08 20:11:04
247
原创 算法分析与设计 最短路 Floyd
算法分析与设计最短路 Floyd算法问题描述:给出一张带权的的图,边的权值可以理解为两点之间的距离。一张图中任意两点间会有不同的路径相连。最短路就是指连接两点的这些路径中最短的一条。算法思路:Floyd:一个有n个点,每次选取一个点k做为中间点,更新其他点的距离,即dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]).当每个点都作为中间点更新过所有的...
2020-03-08 19:53:09
214
原创 算法分析与设计 MST kruskal
算法分析与设计最小生成树 kruskal算法问题描述:一个带权连通图,其中顶点集合为V,边集合为E,任选一些点∈V,边∈E,这些点,边构成的新图连通性不变并且边权最小。下面是百度百科给出的描述:在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得 的 w(T...
2020-02-29 21:28:06
436
原创 算法分析与设计 MST Prim
算法分析与设计最小生成树 Prim算法问题描述:一个带权连通图,其中顶点集合为V,边集合为E,任选一些点∈V,边∈E,这些点,边构成的新图连通性不变并且边权最小。下面是百度百科给出的描述:在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得 的 w(T) 最...
2020-02-27 21:28:29
277
原创 2020 HZNU Winter Training Day 10 AE题解
2.6Molly’s Chemicals CodeForces - 776C题意:给出n个数和一个数k,问有多少个区间满足区间和等于k的幂。思路:由题目给出的范围可以知道k的幂最大不超过1e15,这题很容易想到前缀和,但是暴力公式是sum[i] - sum[j] = kt 显然会t,公式可以转化为变成sum[j] = sum[i] - kt,那么可以用map类型的数组记录到每一个前缀和su...
2020-02-07 11:02:32
402
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人