喻定 算法设计论文Word文件下载.docx

上传人:b****5 文档编号:21433363 上传时间:2023-01-30 格式:DOCX 页数:7 大小:23.51KB
下载 相关 举报
喻定 算法设计论文Word文件下载.docx_第1页
第1页 / 共7页
喻定 算法设计论文Word文件下载.docx_第2页
第2页 / 共7页
喻定 算法设计论文Word文件下载.docx_第3页
第3页 / 共7页
喻定 算法设计论文Word文件下载.docx_第4页
第4页 / 共7页
喻定 算法设计论文Word文件下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

喻定 算法设计论文Word文件下载.docx

《喻定 算法设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《喻定 算法设计论文Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。

喻定 算法设计论文Word文件下载.docx

对于计算机科学来说,算法的概念是至关重要的,例如,在一个大型软件系统的开发中,设计出有效的算法将起决定性的作用。

算法是解决问题的一种方法或一个过程。

程序是算法用某种设计语言具体实现描。

计算机的普及极大的改变了人们的生活。

目前,各行业、各领域都广泛采用了计算机信息技术,并由此产生出开发各种应用软件的需求。

为了以最小的成本、最快的速度、最好的质量开发出适合各种应用需求的软件,必须遵循软件工程的原则。

设计一个高效的程序不仅需要编程小技巧,更需要合理的数据组织和清晰高效的素算法,这正是计算机科学领域数据结构与算法设计所研究的主要内容。

二常见的算法分析设计策略介绍

1动态规划

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。

但是经分解得到的子问题往往不是互相独立的。

不同子问题的数目常常只有多项式量级。

在用分治法求解时,有些子问题被重复计算了许多次。

如果能够保存已解决的子问题的答案,而在需要时再找出已求得的

答案,就可以避免大量重复计算,从而得到多项式时间算法。

动态规划的一般步骤:

找出最优解的性质,并刻划其结构特征。

递归地定义最优值。

以自底向上的方式计算出最优值。

根据计算最优值时得到的信息,构造最优解。

2贪心算法

顾名思义,贪心算法总是作出在当前看来最好的选择。

也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。

具有最优子结构性质的问题,用贪心算法更简单、更直接且解题效率更高。

当然,希望贪心算法得到的最终结果也是整体最优的。

虽然贪心算法

不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。

如单源最短路经问题,最小生成树问题等。

在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

三解决问题的过程

10-1背包问题用动态规划算法

问题描述

0-1背包问题:

给定n种物品和一个背包。

物品i的重量是Wi,其价值为Vi,背包的容量是c。

问应如何选择装入背包中的物品,使得装入背包中的物品总价值最大。

在选择装入背包的物品时,对每种物品i只能有两种选择,装入包或者不装入。

不能物品i装入包多次,也不能只装入部分的物品i。

此问题的形式化描述是,给定c>

0,Wi>

0,Vi>

0,1≤i≤n,要求找出一个n元0-1向量(x1,x2,……xn),Xi∈{0,1},1≤i≤n,使得

<

=c,而且

达到最大。

因此0-1背包问题是一个特殊的整数规划问题:

max

=C

∈{0,1},1<

=i<

=n

算法描述:

设所给0-1背包问题的子问题max∑(Vk*Xk)k=i..n;

max∑(Vk*Xk)<

=j(k=i..n);

Xk∈{0,1},i<

=k<

=n;

的最优值为m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。

程序:

main()

{

Intm,n,i,j,r;

Intx[100],w[100],p[100],p1[100],b[100],s,max;

input(m,n);

//1.当所有物体重量和比书包的容量小,那么这些

//物体全选

for(i=1,s=0;

i<

=n;

i++)

input(w[i],p[i]);

P1[i]=p[i];

s=s+w[i];

//所有物体的重量和

}

if(s<

=m)//判断是否物体总重小于书包的容量

{print(“wholechoose”);

//全选

Return;

//2.将每个物体的利润与重量比

/

按从大到小

//排序

for(i=1;

{max=1;

For(j=2;

j++)

//逐个比较物体的利润与重量比,将较大的赋//给max

if(p1[j]/w[j]>

p1[max]/w[max])max=j;

p1[max]=0;

b[i]=max;

floatr=m;

//背包容纳总量

x[]={};

//初始化为0

{if(w[b[i]]>

r)break;

//是否物体总重小于书包//的容量

x[i]=1;

r=r-w[b[i]];

 

2部分背包问题用贪心算法

问题描述:

假定有n个物体和一个背包,物体i有质量wi,价值为pi,而背包的载荷能力为M。

若将物体i的一部分xi(1<

=n,0<

=xi<

=1)装入背包中,则有价值pi*xi。

在约束条件

(w1*x1+w2*x2+…………+wn*xn)<

=M下使目标(p1*x1+p2*x2+……+pn*xn)达到极大,此处

0<

=1,pi>

0,1<

=n.这个问题称为背包问题(Knapsackproblem)。

算法描述首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重

量价值最高的物品装入背包。

若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包。

依此策略一直地进行下去,直到背包装满为止。

程序代码:

//m为总重量,n为个体数量,w为重量,p为价//值r为剩余容量x为物体的百分数

//3.按已排好的顺序放到书包里

s<

mandi<

s=s+w[b[i]];

>

m)//当物体重量不等于书包的容量

//减去前一个物体s-w[b[i-1]的重量

w[b[i-1]]=m-(s-w[b[i-1]]);

r=m-w[b[i-1]];

x[i]=r/w[i];

//取物体的几分之几正好满足剩余

//容量

W[b[i]]=x[i]W[b[i]];

//加上最后一个

for(j=1;

j<

=i-1;

j=j+1)//逐个输出

//所选每个物体的序号和重量

print(“choose”,b[j],”weight”,w[b[j]]);

动态规划算法:

全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解。

动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解。

边界条件:

即最简单的,可以直接得出的局部最优解

贪心算法:

贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。

由前面中的介绍,可以知道贪心法正确的条件是:

每一步的最优解一定包含上一步的最优解。

四结合自身情况谈谈本课程学习体会及其影响

算法是编程最终的部分,想要把程序写的好,就要用好的算法。

不同的问题有不同的算法模型,同一个问题也可能有不同的算法描述。

每种算是都有自己的时间复杂度和空间复杂度。

并不是说时间复杂度低或者空间复杂度就是一个好的算法,这要看用来解决什么问题,还编程的环境结合起来评价的。

所以学编程的人应该把算法学好,这样才有利于编程,也有利于想出更好的算法来解决现实中的问题。

以前我写程序只是习惯性的选自己常用的一种算法,无论是什么样的问题都会去用一个算法。

从没有考虑算法是不是适合这个问题。

也不会去考虑时间复杂度和空间复杂。

可能是因为所编的程序比较短,算法的优越性体现不出。

在学完了这本书之后,我才只能算法的优越性有多么的重要。

如果一个大程序没有好的算法来支持,程序运行花费的时间和占据的空间都将是很大的。

有的可能会导致严重的错误性。

我想,通过对这门课程的学期,我以后编程的时候就会首先考了算法的问题,不再是盲目的乱写。

对以后的学习会有很大的帮助。

参考文献

[1]算法设计与分析(第二版)清华大学出版社

[2]C程序设计谭浩强著清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1