算法设计实验教程.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计实验教程

算法设计实验报告 学 号:___ xxxxxxxx__ _____ 姓 名:____ x_ x x _____ 指导教师:_______ x x _____ 2016年12月 算法设计实验成绩评定表 学生姓名xx学号Xxxxx专业Xxx同组成员Xxxx算法是解决问题的基本方法,程序的编写都要依赖它,在软件还是面向过程的阶段,就有程序=算法+数据结构这个公式。算法的学习对于培养一个人的逻辑思维能力是有极大帮助的,它可以培养我们养成思考分析问题,解决问题的能力。如果一个算法有缺陷,或不适合某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂性和时间复杂度来衡量。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。计算机系统中的操作系统、语言编译系统、数据库管理系统以及各种各样的计算机应用系统中的软件,都必须使用具体的算法来实现。算法设计与分析是计算机科学与技术的一个核心问题。 设计的算法要具有以下的特征才能有效的完成设计要求,算法的特征有:(1)有穷性。算法在执行有限步后必须终止。(2)确定性。算法的每一个步骤必须有确切的定义。(3)输入。一个算法有0个或多个输入,作为算法开始执行前的初始值,或初始状态。(4)输出。一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。(5)可行性。在有限时间内完成计算过程。 平时成绩程序及运行结果设计报告PPT及答辩总成绩备注完成时间 年 月 日 综合实验一 1.1题目要求 一个人从左上角红色房间进入,右下角黄色房间出来,可以横向或纵向通行到相邻的房间里,但不能到对角的房间或其它房间。每种颜色的房间里面存放有一种物品,这个人要收集齐八种物品有多少种路线?  HYPERLINK \l _Toc294041479 1.2问题分析 一个4x5的矩阵,矩阵对角线放了相同的物品不同的对角线不同的物品求从左上角到右下角收集到8种物品的路线。分析矩阵特点可知不管怎么从左上角到达右下角必定会经过八个不同颜色的方格,所以问题简化为求从矩阵左上角到右下角的路线有多少种。要求横向或纵向走,如果不规定方向此题有无数种路线,因此规定只能向右走和向下走。此题有2种方法。1.根据数学排列组合方法可以直接求出解(此方法较易)。2.根据动态规划来解.  HYPERLINK \l _Toc294041479 1.3算法设计 1. 迭代算法:数学中的组合问题,因为从左上角到右下角,总共需要走4+5-2步,左上角和右下角的不考虑在内,我们每次都可以选择向下走,向下走总共需要4-1步,所以在4+5-2步中选择4-1步,这是排列组合问题。根据题意可以推出数学公式: 1112 ?4+5-24-1。 111123 2.动态规划:先看一个2x2的矩阵有多少种走法 其中1代表到这个方格有少种走法可以看出到右下方 的方格的路线等于(x-1,y),(x,y-1)两个方格路线之和。 在看2x3的矩阵 可以看出到右下方 的方格的路线等于(x-1,y),(x,y-1)两个方格路线之和。因此要求出右下角的路线只需求出 (x-1,y),(x,y-1)的路线即可,把问题转换为了一个个小问题,后一个结果由这些小问题解决 我们可以用一个二位数组来记录所有已解的子问题的答案。 设该数组的第一列和第一行的值为1,因为到达这些方格的路线只有一条(向右走和向下走),即结果为二维数组最后一个元素即[4][3] 。 图1-1 程序流程图  HYPERLINK \l _Toc294041479 1.4算法实现(代码) 方法一:迭代 #includestdio.h void main() { int x=5,y=4,i; int n= x + y - 2; int k = y - 1; int a = 1; for( i=1;iy;i++) { a=a*(n-k+i)/i; } printf(%d\n,a); } 方法二:动态规划 #includestdio.h void main() { int i,j; int a[5][4]; for( i=0;i5;i++) a[i][0]=1; for( i=0;i4;i++) a[0][i]=1; for( i=1;i5;i++) for( j=1;j4;j++) a[i][j]=a[i-1][j]

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档