090213052 陈昊 计科1305 算法实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
090213052 陈昊 计科1305 算法实验报告

实验一二分查找 实验内容: 在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。此问题的输入是待查元素x和线性表L,输出为x在L中的位置或者x不在L中的信息。 实验算法: 初始化一个查找的有序数组,当待查找的数字确定以后,首先比较该数和数组中的中间的数字的大小,如果该数比中间的数子要大,则在比中间大的数组中查找,否则相反,然后递归的调用这个查找方法,知道找到这个数字相等的数字,则函数返回这个数字在数组中的位子。 实验代码: #includestdio.h #includeiostream using namespace std; int bsearch(int v){ int a[] = { 1, 2, 3, 4, 5, 6, }; int x = 0; int y = sizeof(a)-1; int m; while (xy){ m = x + (y - x) / 2; if (a[m] == v) return m; else if (a[m]v) y = m; else x = m + 1; } return -1; }//定义二分查找函数 int main(){ int c = 0; int v; cin v; bsearch(v); cout bsearch(v) +1 endl; if (bsearch(v) == -1)cout not endl; else cout yes endl; system(pause); } 实验结果: 实验二背包问题 实验内容: 背包问题 有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。 物品ABCDEFG重量35306050401025价值10403050354030实验算法: 首先建立两个数组分别存储物品的价值和重量,然后用冒泡法对物品的单价进行排序,按照从大到小的顺序往背包中塞物品,直到背包塞不下的时候,对与最后一个物品进行分割,使背包达到最大的总价值。 实验代码: #include iostream #includecstdio using namespace std; int main() { float p[7] = { 10, 40, 30, 50, 35, 40, 30 }; float w[7] = { 35, 30, 60, 50, 40, 10, 25 }; int temp; float maxp; int weight = 150; for (int i = 6; i0; i--){ for (int j = 0; ji; j++){ if ((p[j] / w[j])(p[j + 1] / w[j + 1])){ temp = p[j]; p[j] = p[j + 1]; p[j + 1] = temp; temp = w[j]; w[j] = w[j + 1]; w[j + 1] = temp; } } }//对单价进行排序; temp = 0; maxp = 0; for (int i = 6; i = 0; i--){ if ((temp + w[i])weight){ temp += w[i]; maxp += p[i]; } else if ((temp + w[i]) = weight){ maxp += (weight - temp)*(p[i] / w[i]); cout max: maxp endl; break; } } system(pause); } 实验结果: 实验三矩阵链乘法 实验内容: 在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。由该公式知计算C=AB总共需要pqr次的数乘。其标准计算公式为: 现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要求计算出这n个矩阵的连乘积A1A2…An。 递归公式: 实验算法: 首先令m[i,j]表示计算矩阵Ai,j所需要标量乘法次数的最小值。那么原问题就是求m[1,n],当i=j时矩阵链只包含唯一的矩阵,所以不需要任何标量乘法运算,若ij,设割点在矩阵Ak和Ak+1之间,那么,M[i,j] 就等于计算Ai,k和Ak+1,j的代价加上两者相乘的代价的最小值,即可以得到递归公式:

文档评论(0)

yuerang3062 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档