算法第3章上机实践报告
Posted yilun578663140
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第3章上机实践报告相关的知识,希望对你有一定的参考价值。
-
实践题目
-
问题描述
-
算法描述
-
算法时间及空间复杂度分析(要有分析过程)
-
心得体会(对本次实践收获及疑惑进行总结)
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章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章