自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 圆排列问题

问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。解析圆排列问题的解空间是一棵排列树。按照回溯法搜索排列树的算法框架,设开始时a=[r1,r2,……rn]是所给的n个元的半径,则相应的排列树由a[1:n]的所有排列构成。 首先计算圆在当前圆排列中的横坐标,由x^2 = sqrt((r1+r2)^2-(r1-r2)^2)推导出x = 2 * sqrt(r1 * r2)。然后计算当前圆排列的长度。变量lenmin记录当前最小圆排列长度...

2020-06-12 23:39:06 354

原创 读《算法之美》有感

读《算法之美》有感算法这个词,是最近这几年越来越热的一个词,尤其是大数据、人工智能这些概念背后,都离不开一个算法。我记得有一个很流行的故事,说的是某个大哲学家让他的两个弟子去一片玉米地里,分别找一个最好的玉米带回来,条件是只能往前走,不能回头,而且一旦选好就不能再选了。于是有一个弟子很快的选了一个,但是发现其实还有很多更好的玉米;而另外一个弟子因为怕选错,一路纠结,最后走完整个玉米地却空手而回。这个故事反映的问题,在生活中经常会遇到。在做某些选择的时候,你不可能把所有的选项全部考察一遍再做决定。那么

2020-06-09 20:01:33 734

原创 图的m着色问题

问题给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。解析考虑所有的图,讨论在至多使用m种颜色的情况下,可对一给定的图着色的所有不同方法。通过回溯的方法,不断的为每一个节点着色,在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色,这时候枚举可用的m个颜色,通过和第n个节点相邻的节点的颜色,来判断这个颜色是否合法,如果找到那么一种颜色使得第n个节点能够着色,那么说明m

2020-06-09 19:35:01 253

原创 最优前缀编码

问题对于任意给定的n个频率f(x1),f(x2),…,f(xn),如何构造一棵对应于最优二元前缀码的二叉树解析每个二元前缀码对应一棵二叉树,树叶代表码字,树叶的深度表示码长,平均二进制位数相当于这棵树在给定频率下的平均深度,也称为这棵树的权对同一组频率可以构造出不同的二叉树,对应的平均二进制位数也不同。占用位数越少的压缩效率越高,即每个码字平均使用二进制位数最少的前缀码,称为最优二元前缀码如果叶片数n=2k,且每个码字的频率是1/n,那么这棵树应是一颗均衡的二叉树设计H.

2020-06-09 19:18:27 510

原创 相容问题——贪心算法

问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i=1,2,…,n定义:活动i和j相容<==>si≥fj或sj≥fi,i≠j求S最大的两两相容的活动子集A。解析定理:对于任意正整数k,使用结束时间的贪心算法,前k步选择都会有一个最优解。证明:k=1时,选择活动1,设 为问题最优解,如果

2020-06-09 19:02:35 326

原创 LCS算法最长公共子序列

问题: 求解X和Y的最长公共子序列解析 先处理序列的前 [公式] 个元素组成的子序列,然后再依次往上加后面的元素。即,用 [公式] 表示序列1和序列2前 [公式] 个元素的LCS长度,然后将 [公式] 用 [公式] 至 [公式] 表示。但是这个拆分有个问题:序列1和序列2的长度可能不等。这个问题很好解决,我们可以在较短序列的后面加上表示空元素的符号(比如Null),直到两个序列的长度变成一致的。设计int LCS(char *str1, char *str2, int ...

2020-06-08 10:21:56 138

原创 矩阵链乘法

问题设A1,A2,……,An为n个矩阵的序列,其中Ai为Pi-1×Pi阶矩阵,这个矩阵链的输入用向量P=<P0,P1,……,Pn>给出。给定向量P,确定一种乘法次序,使得具备运算的总次数达到最小。解析对矩阵Ai,Ai+1,其维数分别为p[i-1]*p[i],p[i]*p[i+1],Ai*Ai+1要执行乘法运算的次数为p[i-1]*p[i]*p[i+1];m[i][j]为矩阵Ai*Ai+1*...*Aj最少的执行乘法运算的次数假设我们在Ak后面加括号(i<=k<

2020-05-25 10:56:16 240

原创 动态规划求解投资问题

问题设 m 元钱,n 项投资,函数f(x)表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这m元钱,使得投资的总效益最高?解析可以设dp[i][j],cost[i][j]数组,dp代表花费j元投资前i项的所获取的最优效益,cost代表dp[i][j]情况在第i项目上花费的金额,从而可以推出dp方程,dp[i][j]=max(dp[i-1][j-x]+f[i][x]),其中f[i][x]代表第i项投资x元,进一步确定边界条件dp[i][0]=0,dp[1][j]=

2020-05-25 10:53:16 987

原创 选第k小元素:特定分治策略

问题设L是n个元素的集合,从L中选取第K小的元素,其中1<=K<=n。解析k=|S1|+1,m*就是所要找的第k小的数;以m为划分标准后,比m小的有|S1|个,如果恰巧,k=|S1|+1,则m就是所要找到第k小的数k<=|S1|,归约为在S1中找第k1小的子问题,k1在子问题中的相对位置不变,即k1=k;k>|S1|+1,归约为在S2中找k2位置的子问题,k2相对于S2子问题和k相对于S的关系,即k2=k-|S1|-1。(在S中找k,就是在S2中找k2)

2020-05-25 10:49:11 216

原创 分治法求解最近点对问题

问题设P1(x1, y1),P2(x2, y2),P3(x3, y3), P4(x4, y4) …,是平面上n个散列点构成的集合S,最近对问题就是找出集合S中距离最近的点对。解析设S中的点为平面上的点,它们都有2个坐标值x和y。为了将平面上点集S线性分割为大小大致相等的2个子集S1和S2,我们选取一垂直线l:x=m来作为分割直线。其中m为S中各点x坐标的中位数。由此将S分割为S1={p∈S|px≤m}和S2={p∈S|px>m}。从而使S1和S2分别位于直线l的左侧和右侧,且S=S1∪S2

2020-05-25 10:44:02 890

原创 二分归并排序

问题二分归并排序:对n个不同的数构成的数组A[1..n]进行排序,其中n=2^k。解析二分归并排序是经典的分治算法,分而治之,将长度为n的数组不断划分成n/2的子数组,即将n规模的问题转化成为了n/2规模的子问题,不断划分,当问题规模为1时(长度为1的数组本身就是有序的),将每一个长度为1的子序列进行归并(归并有序表),不断归并就能够实现将长度为n/2的有序表归并得到长度为n的有序表,实现排序。设计void mergeSort(element a[], int left, int ri

2020-05-25 10:39:32 1098 1

原创 顺序查找和二分查找

问题写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.解析顺序查找过程:从表中的最后一个记录开始,逐个进行记录的关键字与给定值进行比较,若某个记录的关键字与给定值相等,则查找成功,找到所查的记录;反之,若直到第一个记录,其关键字和给定值比较都不相等,则表明表中没有所查的记录,查找失败。二分查找,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前

2020-05-25 10:33:59 329

原创 Dijkstra算法求由顶点a到顶点h的最短路径

问题下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。解析Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点 s 的路径权重被赋为 0 (dis[s] = 0)。若对于顶点 s 存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。初始时,集合T只有顶点s。然后,从dis数组选择最小值,

2020-05-25 10:29:30 1919

原创 Floyd算法求解下图各个顶点的最短距离

问题用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)从任意节点i到任意节点j的最短路径不外乎2种可能:1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查dis(i,k) + dis(k, j) < dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置dis(i,j) = dis(i,k) .

2020-05-25 10:21:23 633

原创 Kruskal算法构成最小生成树

问题在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。解析假设一个图有m个顶点,n条边。首先,我们需要把m个顶点看成m个独立的树,并且把n条边按照从小到大的次序进行排列。按边的权值递增顺序依次从中选出一条边,如果该边加入后不构成回路,则继续运行,否则重新选择另一条边,直到含有n-1条边。设计in

2020-05-25 10:17:55 182

原创 算法作业1.1:Prime构造最小生成树

1、问题: 在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。2、解析 在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复...

2020-05-25 10:13:52 277

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除