- 88
- 0
- 约15.55万字
- 约 183页
- 2019-06-14 发布于江西
- 举报
1.2 典型习题解析
[例1.1] 设n为正整数,分析一下程序段中各语句的频度。
for (i=0;in;i++) /*语句 eq \o\ac(○,1)*/
for (j=0;jn;j++) /*语句 eq \o\ac(○,2)*/
{
C[i][j]=0; /*语句 eq \o\ac(○,3)*/
For (k=0;kn;k++) /*语句 eq \o\ac(○,4)*/
C[i][j]= C[i][j]+a[i][k]=b[k][j] ; /*语句 eq \o\ac(○,5)*/
}
解:语句 eq \o\ac(○,1)的频度为n+1(i从0到n+1,共计n次,当i=n时还要执行一次in的比较,记一次,故总共n+1次);语句 eq \o\ac(○,2)的频度i=0n-1n+1=n(n+1); 语句 eq \o\ac(○,3)的频度为i=0n-1j=0n-11=n2; 语句 eq \o\ac(○,4)的频度i=0n-1j=0n-1(n+1)=n3+n2; 语句 eq \o\ac(○,5)的频度为i=0n-1j=0n-1k=0n-11=n3
[例1.2] 分析一下算法的时间复杂度。
Void fun(int n)
{
Int i=0,j;
do
{ for (j=0;jn;j++)
i+=j;
}while (in+1);
}
解:该算法中的基本运算是i+=j语句,设for循环语句共执行k次。
K=1 时,i=j=0n-1j
K=2 时,i=n(n-1)2+j=0n-1j=n(n-1)2+
K=3 时,i=2(n(n-1)2)+ j=0n-1j=2(n(n-1)2
因此,i=k(nn-12)n+1,即k(
而基本运算是i+=j语句,执行的次数=n*k≤2nn-1=o(1)。本算法的时间复杂度为o(1)
[例1.3]设n为3的倍数,分析一下算法的时间复杂度。
void fun (int n)
Int I , j , x , y;
For (i=1;i=n;i++)
If (3*i=n)
for (j=3*I;j=n;j++)
{
x++;y=3*x+2;
}
}
解:该算法中的基本运算是x++和y=3*x+2语句。对于最外层的for循环?,其执行频度为n+1,但对于里层的for循环,只在3i≤n即i≤n3时才执行,故基本运算的执行频度为i=0n3j=3in1=i=1n3(n-3i+1)=
[例1.4] 分析以下算法的时间复杂度。
Int fun(int m,int n)
{
If (m==0)
return n;
else if(n==0)
else if(mn)
return (fun(m,n-1)+1);
else
return (fun(m-1,n)+1);
}
解:这是一个递归算法,其思路是对于输入的m和n中的较小者(不妨设为n),一直地推减1,直到为0,此时返回m,并回过来进行加1运算,这种地推和加1运算均为n次。因此,本算法的时间复杂度为o(min(m,n)), min(m,n)为两个数中最小者。
[例1.5] 分析以下算法的时间复杂度。
void fun(ElemType A[],int i,int j, ElemType,max, ElemTypemax)
{
Int mid;
ElemType,gmax,gmin,hmax,hmin;
If (i==j)
{ max=min=A[i];
Return;
}
if (i==j-1)
{ if (A[i] A[i])
{ max=A[j];min=A[i];}
else
{ max=A[i];min=A[j];}
Return;
}
mid=(i+j)/2;
fun(A,i,mid,gmax,gmin);
fun(A,mid+1,j,hmax,hmin);
max=(
您可能关注的文档
最近下载
- E英语教程第二版3智慧版2024版教师用书共6个单元.pdf VIP
- GB50013-2018 室外给水设计标准.pdf VIP
- API SPEC 2H-2006 中文版 海洋结构用碳锰钢板.pdf VIP
- 大理药业股份有限公司盈利能力评价研究.docx VIP
- 业务联络函样板.pdf VIP
- 领导班子2025年度民主生活会“五个带头”对照检查材料(范文).docx VIP
- 2026年春学期人教版小学数学二年级下册教学计划.docx VIP
- 项目管理:项目管理过程PPT教学课件.pptx
- 企业员工入职登记表.pdf VIP
- 2025年度领导班子“五个带头”对照检查材料的写法及范文参考.docx VIP
原创力文档

文档评论(0)