- 博客(11)
- 收藏
- 关注
原创 哈夫曼树算法
找出存放一串字符所需的最少的二进制编码,在编码中每个字符的出现次数不同,而每个字符都可以用唯一的前缀码表示,这时我们就需要考虑根据每个字符在字符串中出现的频率(即权重)来分配长度不同的前缀码,以使得编码的总长度最小。
2023-12-27 18:57:44
361
1
原创 0-1背包问题
我们定义数组m[i][j],它表示背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。即从后i个物品中选择,且总体积<=j的最优解,即物品总价最大。给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?该问题中对每件物品来说只有被选与未被选两种状态,故称做0-1背包问题。我们可以使用动态规划来解决,首先是确定状态方程。
2023-12-27 17:01:37
354
1
原创 图像压缩算法
因此需要用3位表示b[i],如果限制1<=l[i]<=255,则需要用8位表示l[i]。因此,第i个像素段所需的存储空间为l[i]*b[i]+11位。,pn},0≤pi≤255分割成m个连续段S1,S2,…第i个像素段Si中(1≤i≤m),有l[i]个像素,且该段中每个像素都只用b[i]位表示。设l[i],b[i],是{p1,p2,…显而易见,l[1],b[1]是{p1,…,pl[1]}的最优分段,且l[i],b[i],是{pl[1]+1,…,pn}的最优分段,使得依此分段所需的存储空间最少。
2023-12-27 16:49:58
460
1
原创 线性选择算法
最开始我们将所有的元素五个一组,分为⌈n/5⌉个组(最后剩余不够5个也算一组),然后对于每组无论采用哪种排序算法进行排序,找出其中位数,最后找出共⌈n/5⌉个中位数。递归调用该算法找出这⌈n/5⌉个中位数的中位数(如果⌈n/5⌉为偶数的话,就找出其较大的中位数)。即至少判断得到⌊n/10⌋*3个数字小于基准,⌊n/10⌋*3个数字大于基准。在给定线性集中有n个元素,要求找出这n个元素中第k(1<=k<=n)小的元素。有⌊n/10⌋*3>n/4 若需要对左下区域的元素进行递归,则复杂度为为T(n/4)。
2023-12-27 16:35:04
428
1
原创 回溯法习题
现有n种不同形状的宝石,每种n颗,共n*n颗。同一形状的n颗宝石分别具有n种不同的颜色c1,c2,…,cn中的一种颜色。欲将这n*n颗宝石排列成n行n列的一个方阵,使方阵中每一行和每一列的宝石都有n种不同的形状和n种不同颜色。是设计一个算法,计算出对于给定的n,有多少种不同的宝石排列方案。
2023-11-20 18:38:02
284
1
原创 贪心法习题
【数列极差】问题描述:在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max-min。从所给出的n个点的最左端开始,以x1为第一个k区间的左端,看k区间能覆盖哪些点,不能全部覆盖,就需要再增加一个k区间,新增加的k区间以未被覆盖的点集中最左端的那个点为左端点,继续覆盖,以此类推,直到所有点全被覆盖。
2023-11-16 23:22:33
78
1
原创 凸多边形三角剖分
用多边形顶点的逆时针序列表示凸多边形,即P={v0,v1,…,vn-1表示具有n条边的凸多边形。若vi与vj是多边形上不相邻的2个顶点,则线段vivj称为多边形的一条弦。弦将多边形分割成2个多边形{vi,vi+1,…,vj和{vj,vj+1,…vi多边形的三角剖分是将多边形分割成互不相交的三角形的弦的集合T。给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。
2023-11-13 16:28:47
273
原创 算法设计与分析之最邻近点对问题
看见这个问题,我们第一时间能想出的最笨的方法就是:将每一个点与其他n-1个点的距离算出,找出最小距离,可以见得复杂度很高的,那还有什么办法呢?给定平面上的n个点,找出其中的一对点,使得在n个点组成的所有点对中,该点对的距离最小。中所有点,对排好序的点列作一次扫描,就可以找出所有最接近点对的候选者。因此,在分治法的合并步骤中最多只需要检查6×n/2=3n个候选者。的思想,用S中各点坐标的中位数来作分割点。由上面的分析可知,这种投影点最多只有。中的点,则由鸽舍原理易知至少有一个。点一起构成最接近点对候选者的。
2023-09-27 12:58:20
313
1
原创 算法设计与分析——汉诺塔问题
递归算法就是把问题大而化之,就像本题,我们把步骤分为前n-1个圆盘从A到B,再移动第n个圆盘从A到C,最后把剩余的n-1个圆盘从B到C移动,这样就可以一步步递归,从而把问题分解。当然,递归里面非常重要的前提是弄清楚边界,这道题里的边界就是最后n一步步减小最后到1时,只有一个圆盘的时候,只用移动一位,这个时候递归就结束了。
2023-09-08 00:20:15
541
原创 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。
递归算法就是把问题大而化之,就像本题,求全排列的所有情况,我们的遍历方式就是依次把每个数放在第一位,然后剩余元素继续全排列,剩余元素求全排列继续这样遍历,这里就是几乎相同的操作了,这样就可以一步步递归,从而把问题分解。当然,递归里面非常重要的前提是弄清楚边界,这道题里的边界就是km,即头尾指针相等时,只剩一个元素了,这个时候递归就结束了。
2023-09-06 13:45:54
886
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人