- 博客(22)
- 收藏
- 关注
原创 圆排列问题
1.问题圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。2.解析但是不是每个排列都像只有两个圆需要排序时那么简单,当需要排序的圆变多的时候就会形成一个排序问题,此时我们可以这样解决问题。1.计算圆在当前圆排列中的横坐标,由cx^2 = sqrt((r1+r2)2-(r1-r2)2)推导出cx = 2sqrt(r1r2)。2.计算当前圆排列的长度。新增一个变量记录当前最小圆排列长度,以及两个数组分别用于存储所有圆的半径和记录当前圆排列中各圆的圆
2020-05-26 20:31:00 1778
原创 节点着色问题
1.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析(1)通过回溯的方法,不断的为每一个节点着色,在前面节点都合法的着色之后,开始对当前节点进行着色;(2)这时候枚举可用的m个颜色,通过和前一个节点相邻的节点的颜色对比,来判断这个颜色是否合法;(3)如果找到那么一种颜色使得当前节点能够着色,那么说明m种颜色的方案在当前是可行的。(4)节点每次迭代加1
2020-05-26 19:01:54 1101
原创 读书笔记
《算法导论(第三版)》读书笔记在参考很多算法相关的书籍之后,鉴于可读性和难度等问题,最终选择了《算法导论》这本书来作为本学期算法课程的课外阅读书籍,这本书可以说是计算机领域算法学习的经典之作。虽然到目前为止由于对很多算法的研究浅薄导致我还没有读完它,但是可以看得出相对于其他很多教材《算法导论》言简意赅,伪代码相比于c++或者java代码的呈现更加清晰明了且精简,这一点让人眼前一亮。再说回到算法本身,算法是一种将输入转化成输出的计算工具,而书中说到,一般来说,问题陈述说明了期望的输入、输出关系,而算法则用
2020-05-26 18:36:57 441
原创 哈夫曼编码
1.问题2.解析哈夫曼树的构建步骤:1、将给定的n个权值看做n棵只有根节点(无左右孩子)的二叉树,组成一个集合,每棵树的权值为该节点的权值。2、从集合中选出2棵权值最小的二叉树,组成一棵新的二叉树,其权值为这2棵二叉树的权值之和。3、将步骤2中选出的2棵二叉树从集合中删去,同时将步骤2中新得到的二叉树加入到集合中。4、重复步骤2和步骤3,直到集合中只含一棵树,这棵树便是赫夫曼树。构建完哈夫曼树就可以根据根据节点位置确定前缀码了。3.设计给定字符集C={c1,c2,...,cn},每个字符
2020-05-12 19:46:20 210
原创 贪心算法之相容问题(活动安排问题)
1.问题设有n个活动的集合A={1,2,3…,n},其中每个活动都要求使用同一资源(一个时间段只能安排一个活动)。每个活动都有一个起始时间st和一个结束时间ft。如果选择了活动i,则它在半开区间[Si,Fi)时间段内占用资源。若区间[si,fi)与区间[sj,fj)不相交,则称活动i和活动j相容不冲突。活动安排问题就是在所给的活动集合中选出最大的相容子集合。2.解析贪心策略是 选择最早结束时...
2020-04-28 19:09:41 1356
原创 动态规划求最长公共子序列
1.问题求两个序列的最长公共子序列如实验结果所示,输出矩阵为dp过程。2.解析假设有两个串S1和S2,如果S1的最后一个元素 与 S2的最后一个元素相等,那么S1和S2的LCS就等于 串{S1减去最后一个元素} 与串 {S2减去最后一个元素} 的 LCS 再加上 S1和S2相等的最后一个元素;如果S1的最后一个元素 与 S2的最后一个元素不等,那么S1和S2的LCS就等于 : 串{S1...
2020-04-21 19:16:13 167
原创 矩阵链问题(动态规划和递归)
1.问题给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。2.解析假设在第k位置上找到最优解,那么问题就变成两个子问题:(Ai,Ai+1……Ak),(Ak+1……Aj);用dp[i][j]表示矩阵连乘的最优值,那么两个子问题对应的最优值变成dp[i][k],dp[k+1...
2020-04-14 18:42:31 302
原创 动态规划——投资问题
1.问题数学语言:有n个项目,m元钱,dp(x,y)表示第x个项目投资y元钱的效益,问如何投资使效益最大。2.解析维护一个二维数组dp[i][j],表示前i个项目投资j元钱的最大利益,从第一个项目开始考虑,到第m个项目,为m分配x元钱,n-x元钱的最大效益为dp[m-1][n-x]。(实验成果,也是样例。)3.设计for (i<项目数) { for (j <总金额) {...
2020-04-07 19:00:52 702
原创 分治法查找第k小/大的数
1.问题数学语言:给无序序列集中有n个元素,查询次数m和一个整数k,1<=k<=n,找出这n个元素中第k大的元素。2.解析利用快速排序,可以从序列中取一个中点mid,然后把序列分成小于等于mid和大于等于mid的两部分,由两个部分的元素个数和k的大小关系可以确定这个数是在哪个部分,以此类推,进行递归查找。3.设计if (两边指针相交) return -1; if (两...
2020-03-31 18:35:17 1936
原创 MySQL group by用法
原始表单mysql> select 类别, sum(数量) as 数量和 ->from A ->group by 类别类别数量和a18b19c37主要用于对数据进行分组,多与聚合函数同时使用,如sum,max,count等函数。group by也常与having同时使用:having 的作用是筛选满足条件的组...
2020-03-27 20:19:30 178
原创 最近点对问题(分治法以及蛮力法的运用)
1.问题数学语言:设p1=(x1,y1),p2=(x2,y2)…pn=(xn,yn)是平面n上n个点构成的集合S,找出集合S中距离最近的点对就是集合里的最小点对,两者的距离就是最小对距离。2.解析(1)将集合S分成两个子集S1和S2,每个子集中大约有n/2个点,设集合S的最近点对是pi和pj(1<=i,j<=n)则有以下三种情况1.pi∈S1,pj∈S12.pi∈S1,pj∈...
2020-03-24 19:10:09 1443
原创 归并排序Mergesort
1.问题数学语言:对n个不同的数构成的数组A进行排序,其中n=2^k2.解析把一个无序的数组分成n个数据,每个数据本身比较合并一次,之后再和下一个数组比较并合并,以此类推。3.设计merge(int A[], int l, int r, int mid) { i = l; j = mid + 1;//新建a数组,用于归并排序 for (k = l; k <= r; k++)...
2020-03-17 19:19:05 371
原创 两个简单的查找算法-遍历查找和二分查找
1.问题数学语言:给定一个有序数组T,从里面寻找值为n的元素,并输出下标,若元素不存在就输出0。查找问题。2.解析用两种算法写这个问题,最暴力的肯定就是O(n)的遍历算法,遍历整个数组查找是否有值相等的数据;而第二种优秀很多的算法明显就是二分查找啦,精度相同的情况下查找速度提高非常大,时间复杂度仅仅是O(logn)。3.设计遍历:for (i = 1; i <= n; i++)...
2020-03-10 18:34:09 426
原创 OpenGL-第一个小程序
在网上的教程指导之下在vs2017环境下安装了OpenGL库。安装完毕之后的第一件事当然是试一下能不能用它完成炫酷的3D图像绘制(……)非常幸运的成功了,当然这么难的代码一看就不是我这个入门小白能写的出来的,于是打开了老师发的学习地址,想下载源代码开始学习,结果发现源文件下载404错误,接着又看了看教程里的代码和文字,发现这些内容对我来说还是有一些难…于是就在博客网站上找了OpenGL入门教程...
2020-03-06 15:22:57 796
原创 最短路问题:dijkstra与floyd
最短路概念:1.给定一张图G(V,E);2.e=(from,to,distance)∈E表示边集E中的边有三个参数表示起点,终点,距离;3.s,t∈V 起点终点都属于点集V,求最短距离minDistance(s,t)。Floyd:从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w...
2020-03-03 19:05:28 240
原创 最小生成树Kruskal算法与Prim算法
在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。(摘自网络百科)Kru:O(mlogn)(其中m是边数,n是点数。)以下是图解两种算法取边过程:prim:O(n²) (其中m是边数,n是点数。)源...
2020-02-25 20:13:23 219
原创 PHP代码调试方法
头铁不想装其他的编译工具,也不想用繁琐的方法调试错误找了一下发现可以通过页面直接输出代码错误直接在代码前面加上这两行代码就行了ini_set("display_errors","On");error_reporting(E_ALL);像这样,就能看到错误信息啦改完是这样的当然如果有大佬愿意分享PHPstorm注册码我就更开心了qwq...
2020-02-24 12:09:47 416
原创 codeforces 1204D2 Kirk and a Binary String (hard version)题解报告
codeforces 1204D2 Kirk and a Binary String (hard version)题意:给出一个 串 s ,求一个串 t , 要求两个串的最长上升子序列(lis)等长,并且在保证两个串对于每个l,r(1≤l≤r≤n)的lis也相同的情况下,使得串t中0的数量尽可能多。理性分析:1.假如当前位置的值是0,那么这个点一定是以它为起点的串的lis的一部分,也就是说...
2020-02-09 21:47:09 233
原创 codeforces 1291D Irreducible Anagrams题解报告
codeforces 1291D Irreducible Anagrams题意:若有两个字符串s、t,当且仅当字符串 t 可以通过字母重新排列后得到 s ,也就是两个串当中每个字符出现的次数相同,但位置可以不同,则称它们为 Anagrams ,又有一个定义是若两个字符串s、t是Reducible Anagram的,必须满足下面的条件:1.s和t互为Anagram,将s、t两个字符串分别拆成k...
2020-02-09 20:59:52 334
原创 1
期中摸的二叉树感觉功能挺全的存一下#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<iostream>using namespa...
2020-01-17 20:25:33 276
原创 Codeforces 832D题解报告
Codeforces 832D题目链接:http://codeforces.com/problemset/problem/832/D题意:在一棵生成树上,给出了三个点,求三个点之间最大的相交距离。分析:三个点没有规定起止点,所以求得就是其中两个点到第三个点的路径上的重复距离。(图有点丑 见谅)也就相当于AB,BC,AC三条路径中的公共交点到ABC三点的最大距离。分别求出距离然后取最大值再...
2020-01-16 21:28:05 330
原创 Codeforces 697C题解报告
Codeforces 697C题目链接:http://codeforces.com/problemset/problem/697/C题意:给了一棵完全二叉树,注意树的结点权值范围是1e18,需要用到long long以及map。询问中有两种操作。第一种,给定结点u,v以及一个权值w,从u到v的最短路径上所有的结点都加上这个权值;第二种,给定结点u,v,查询u到v的最短路径上的所有结点的权值和。...
2020-01-16 19:23:59 522
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人