1.熟悉算法设计的基本思想
2.掌握Dynamic table的方法
有一个公司想开发一个关于花卉的百科全书,用户只要输入花卉的名称,就能够输出花卉的详细信息。花卉包括:牡丹、芍药、茶花、菊花、梅花、兰花、月季、杜鹃花、郁金香、茉莉花、海棠、荷花、栀子花、莲花、百合、康乃馨、玫瑰、格桑花等1000种。这个公司想提升花卉检索和存储效率,打算采用动态表(dynamic table)来实现。由于花卉的数量可能会增加,也可能会减少,所实现的动态表需要有如下功能:
推荐使用C/C++集成编译环境。
1、分别画出各个实验结果的折线图(存储效率和查询效率)
#include<bits/stdc++.h> using namespace std; #define N 18 int main() { int i,j,l,r; double t; double p[19]={0,0.112,0.094,0.094,0.075,0.075,0.075,0.057,0.057,0.057,0.057,0.038,0.038,0.038,0.038,0.038,0.019,0.019,0.019}; double q[19]={0}; double e[N+2][N+1]={0}; double w[N+2][N+1]={0}; int root[N+1][N+1]={0}; for (i=1;i<=N+1;i++) { e[i][i-1]=q[i-1]; w[i][i-1]=q[i-1]; } for (l=1;l<=N;l++) { for (i=1;i<=N-l+1;i++) { j=i+l-1; e[i][j]=1000; w[i][j]=w[i][j-1]+p[j]+q[j]; for (r=i;r<=j;r++) { t=e[i][r-1]+e[r+1][j]+w[i][j]; if (t<e[i][j]) { e[i][j]=t; root[i][j]=r; } } } } cout<<endl; for (i=1;i<=N+1;i++) { for (j=0;j<=N;j++) { cout<<e[i][j]<<" "; } cout<<endl; } cout<<endl; for (i=1;i<=N+1;i++) { for (j=0;j<=N;j++) { cout<<w[i][j]<<" "; } cout<<endl; } cout<<endl; for (i=1;i<=N;i++) { for (j=1;j<=N;j++) { cout<<root[i][j]<<" "; } cout<<endl; } return 0; }