算法第3章上机实践报告

Posted yilun578663140

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第3章上机实践报告相关的知识,希望对你有一定的参考价值。

  1. 实践题目

  2. 问题描述

  3. 算法描述

  4. 算法时间及空间复杂度分析(要有分析过程)

  5. 心得体会(对本次实践收获及疑惑进行总结)

1.实践题目:

数字三角形:给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

技术分享图片

2.问题描述:

输入一个由n行数字组成的数字三角形,要求设计算法,计算出从三角形的顶到底的一条路径,使得该路径经过的数字总和最大。(每一步可向左下或向右下)

3.算法描述:

 代码:

#include <iostream>
using namespace std;
int m[100][100];
int main()
{
int n;
cin>>n;
cin>>m[1][1];
for(int i=2;i<=n;i++)
{
for(int j=1;i>=j;j++)
{
cin>>m[i][j];
}
}

for(int i=n-1;i>=1;i--)
for(int j=1;j<=i;j++)
{
m[i][j]=max(m[i][j]+m[i+1][j],m[i][j]+m[i+1][j+1]);
}
cout<<m[1][1]<<endl;
return 0;
}

算法描述:

输入一个数字三角形,即用一个二维数组来存储,然后自底向上开始计算,从倒数第二行开始,计算出每一行的每一个位置到三角形的底的最大路径,并将最大路径值记录在该位置,最后算到第一行时,就可以得到题目要求的结果,即输出m【1】【1】。

4.算法时间及空间复杂度分析:

对于时间复杂度,该算法的时间复杂度为O(n*n)。因为每次都要遍历整个二维数组,计算出每个位置的最大路径值,直到计算出第一行的最大路径,所以算法时间复杂度为O(n*n);对于空间复杂度,该算法的空间复杂度为O(n*n)。因为在这个算法中,除了用到一个二维数组来输入及记录外,没有其他的辅助空间,所以空间复杂度为O(n*n)。

5.心得体会:

通过这一次上机实践课,我和我的搭档对动态规划算法都有了进一步的理解,在不断发现问题、解决问题的过程中,我们收获了许多有用的知识。
























以上是关于算法第3章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告