![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法分析与设计
文章平均质量分 51
weixin_51004880
这个作者很懒,什么都没留下…
展开
-
读书笔记——《算法图解》
《算法图解》读后感 这学期接触的算法课,对于自己来说还是存在有一定的难度。接触算法之后才明白,原来生活中很多常见的问题背后竟然都蕴含着这么深奥的算法原理,存在着许多共性。一次偶然的机会得知室友有算法书籍《算法图解》,便向她借阅。由于时间的关系,没有全部阅读。本书的作者自称是一个视觉型学习者,所以这本书也正如它的书名一样,最大的特点就是“图解”,每一部分的内容都配有生动的图示,是一本非常适合算法初学者阅读的书籍。在阅读的过程中,令我印象最深刻的一部分是讲解贪心算法的章节。贪心算法是指在对某一问题求解时,原创 2021-06-19 08:19:55 · 296 阅读 · 0 评论 -
期末大作业选题1(贪心算法思想的运用)
1.问题设有n项任务,加工时间分别表示为正整数t1,t2,…,tn.现有2台同样的机器,从0时刻开始安排对这些任务的加工。规定只要有待加工的任务,任何机器就不得闲置。如果直到时刻T所有任务都完成了,总加工时间就等于T。设计一个算法找到使得总加工时间T达到最小的调度方案。设给定的实例如下:t1=1,t2=5,t3=2,t4=10,t5=3试给出一个加工时间最少的调度方案,给出计算过程和问题的解。2.解析解决此问题时联系之前学过的0-1背包问题,0-1背包问题最重要的思想是:这个式子可以推广到其他原创 2021-06-17 01:16:07 · 812 阅读 · 0 评论 -
图的m着色问题(回溯法)
图的m着色问题原创 2021-06-04 22:46:25 · 6231 阅读 · 0 评论 -
最优前缀编码(哈夫曼算法)
最有前缀编码原创 2021-06-04 22:45:52 · 791 阅读 · 0 评论 -
装载问题(背包问题思想的运用)
1.问题2.解析3.设计实例1:原创 2021-05-23 23:02:23 · 787 阅读 · 0 评论 -
背包问题
1.问题原创 2021-05-19 10:27:57 · 54 阅读 · 0 评论 -
LCS算法(最长公共子序列问题)
1.问题2.解析3.设计实例:4.分析[算法复杂度推导]5.具体代码实现#include<iostream>using namespace std;int lcs[100][100];//记录lcschar X[100],Y[100];//两个序列 char Z[100][100];//矩阵跟踪,用于最后输出lcsvoid LCS(int m,int n){ int i,j; //初始化矩阵 for(i=0;i<=m;i++){原创 2021-05-11 15:50:41 · 502 阅读 · 0 评论 -
矩阵链乘法
1.问题原创 2021-05-01 14:59:06 · 114 阅读 · 0 评论 -
投资问题——动态规划
1.问题2.解析(1)递推公式(2)可证明满足优化原则3.设计完整推算过程核心伪代码:int MaxProfit(int F[M][N],int f[M][N],int n,int m){ //n表示项目数,m表示资金数 //f用于存放项目与投资之间的效益关系,如f[1][2],表示对第一个项目投资2万元产生的效益 //F用于存放产生的最大效益,例如F[3][2],表示有3个项目时,投资2万元产生的最大效益 //Money用于存放产生最大效益时,给第k个项原创 2021-05-01 14:56:58 · 1881 阅读 · 0 评论 -
选第k小元素:特定分治策略
1.问题原创 2021-04-24 23:07:55 · 81 阅读 · 0 评论 -
最近对问题
1.问题原创 2021-04-18 19:27:42 · 134 阅读 · 0 评论 -
二分归并排序
1.问题对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2、解析1、二分归并排序主要运用了“分治策略”,“分治策略”就是将一个大问题分解为n个规模较小而结构相似的子问题。这些子问题前提条件一样,故解决的方法都是类似的,解决掉这些小问题之后,归并子问题的结果,就得到了大问题的解。2、二分归并排序的原理:先将数据分开排序,然后再合并起来,最后形成一个排好的数组。3、分解:(1)将一个数组分成两个数组,分别对这两个数组进行排序;(2)循环第一步,直到划分出来的“小数组”只包含一个元素,只有原创 2021-03-30 00:56:49 · 1436 阅读 · 0 评论 -
二分查找
1.问题在一个排好序的数组中查找指定的值,返回其所在的下标。2.解析二分查找又称折半查找,它是一种效率较高的查找方法。基本思想:二分查找的前提条件是一个有序的数组(本次实验默认所有的数组都是升序),在查找所要查找的元素时,首先与数组中间的元素进行比较,如果大于这个元素,就在当前数组的后半部分继续查找,如果小于这个元素,就在当前数组的前半部分继续查找,直到找到相同的元素,或者所查找的数组范围为空为止。基本方法:(1)首先确定该数组的中点位置:mid=(left+right)/2;(注意本次实验数原创 2021-03-24 14:59:08 · 161 阅读 · 0 评论 -
顺序查找
1.问题在一个排好序的数组中查找指定的值,返回其所在的下标。2.解析顺序查找是一种最简单的线性查找。其基本思想是:从数组的一端开始,顺序扫描,依次将扫描到的元素关键字key相比较,若当前扫描到的元素的值与key相等,则查找成功;若扫描结束后,仍未找到元素的值等于key的记录,则查找失败。基本方法:(1)将数组中的数字从第一个元素开始,依次与输入的关键字相比较;(2)若某个元素匹配关键字,则查找成功,返回其下标(注意这里下标从1开始到n);(3)若查找到最后一个元素还未能找到关键字,则查找失败原创 2021-03-24 14:53:08 · 309 阅读 · 0 评论 -
Floyd算法
1.问题多源最短路径问题:给定一个加权连通图(无向的或有向的),要求找到从每个顶点到其他所有顶点之间的最短路径。2.解析Floyd算法又称为插点法去,其具体思想为:(1)邻接矩阵graph存储顶点之间的路径,同时最终状态代表点与点之间的最短路径。如果没有直接相连的两点则默认为一个很大的值,而自己的距离为0。如graph[1][2]=2,说明顶点1到顶点2的最短路径为2;(2)从第1个点到第n个点一次加入图中。每个点加入时会试探是否有路径长度被更改,这个长度就是说两点距离会不会因为新加入的点变得更短原创 2021-03-20 17:00:29 · 98 阅读 · 0 评论 -
Dijkstra算法
1.问题单源最短路径问题:给定一个带权有向图G=(V,E),其中每条边的权都是非负实数。另外,还给定V中的一个顶点,称为源点,求出它到所有其他顶点之间的一系列最短路径,即所经过的路径的权的和。2.解析Dijkstra算法是解决单源最短路径问题的一个贪心算法,核心思想为:设置顶点集合S,设置一个数组visit[i],其中visit[i]=0表示节点i已经被遍历,存放于集合S中,之后不断做贪心选择来扩充这个集合。初始时,S中只含有源点,设v为图中的某一顶点,另外设置数组dist[i]存放源点到顶点i的最原创 2021-03-20 16:56:17 · 200 阅读 · 0 评论 -
Kruskal算法
1.问题在实践中常常会遇到这样的问题:给定n个点,把它们按照一种代价最低的方式连接起来,使得任意两点之间都存在一条路径。2.解析用图中的顶点表示上述问题中的点,可能的连接用图的边来表示,而连接的成本则用边的权重表示,那么上述问题就可以表示成最小生成树问题。最小生成树的定义:(1)是一棵树:无回路;|V|个顶点一定有(|V|-1)条边。(2)是生成树:包含全部顶点;(|V|-1)条边都在图里。(3)边的权重和最小Kruskal算法—将森林合成树Kruskal算把一个加权连通图G=<原创 2021-03-14 09:41:40 · 171 阅读 · 0 评论 -
Prim算法
1.问题在实践中常常会遇到这样的问题:给定n个点,把它们按照一种代价最低的方式连接起来,使得任意两点之间都存在一条路径。2.解析用图中的顶点表示上述问题中的点,可能的连接用图的边来表示,而连接的成本则用边的权重表示,那么上述问题就可以表示成最小生成树问题。最小生成树的定义:(1)是一棵树:无回路;|V|个顶点一定有(|V|-1)条边。(2)是生成树:包含全部顶点;(|V|-1)条边都在图里。(3)边的权重和最小Prim算法—让一棵小树长大Prim算法通过一系列不断扩张的子树来构造一棵最原创 2021-03-14 09:40:21 · 117 阅读 · 0 评论