c语言log10n什么意思,(完整版)数据结构-习题集答案-(C语言版严蔚敏)

本文探讨了两个算法的时间复杂度问题,其中一个在10秒内执行10次基本操作,适用于n值在16到40的规模。通过比较两种算法在不同规模下的性能,得出第一种算法在大规模问题解决上更为适宜。此外,还分析了三个函数的O(n)关系,以及一元多项式计算和比赛成绩统计的算法设计。
摘要由CSDN通过智能技术生成

运算的时间为10秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)10次。试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由。

解:2n75 ?1012

10n=40

n=16

n?1012

则对于同样的循环次数n,在这个规模下,第二种算法所花费的代价要大得多。故在这个规模下,第一种算法更适宜。 1.12 设有以下三个函数:

f?n??21n4?n2?1000,g?n??15n4?500n3,h?n??500n3.5?nlogn

请判断以下断言正确与否:

(1) f(n)是O(g(n)) (2) h(n)是O(f(n)) (3) g(n)是O(h(n)) (4) h(n)是O(n) (5) h(n)是O(nlogn)

解:(1)对 (2)错 (3)错 (4)对 (5)错 1.13 试设定若干n值,比较两函数n和50nlog2大于50nlog2223.5

n的增长趋势,并确定n在什么范围内,函数n2的值

n的值。

解:n的增长趋势快。但在n较小的时候,50nlog2

当n>438时,n2n的值较大。

?50nlog2n

1.14 判断下列各对函数

f?n?和g?n?,当n??时,哪个函数增长更快?

(1) (2)

f?n??10n2?lnn!?10nf?n???ln?n!??5?2?3?,g?n??2n4?n?7

,g?n??13n2.5

2(3) (4)

f?n??n2.1?n4?1,g?n???ln?n!???n

3f?n??2?n??2n??,g?n??n?2n2??n5

解:(1)g(n)快 (2)g(n)快 (3)f(n)快 (4) f(n)快 1.15 试用数学归纳法证明:

(1)

?ii?1nn2?n?n?1??2n?1?/6 ?n?0? ?x?1,n?0?

(2)

?x??xii?0n?1?1/?x?1?

?

(3)

?2i?1nni?1?2n?1

?n?1? ?n?1?

(4)

??2i?1??ni?12

1.16 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值

解:

int max3(int x,int y,int z) { }

1.17 已知k阶斐波那契序列的定义为

if(x>y)

if(x>z) return x; else return z; if(y>z) return y; else return z;

else

f0?0,f1?0,…,fk?2?0,fk?1?1; fn?fn?1?fn?2???fn?k,n?k,k?1,?

试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

解:k>0为阶数,n为数列的第n项 int Fibonacci(int k,int n) { }

1.18 假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,并构成一张表,表中每一行的形式为

if(k<1) exit(OVERFLOW); int *p,x; p=new int[k+1]; if(!p) exit(OVERFLOW); int i,j;

for(i=0;i}

for(i=k+1;ireturn p[k];

x=p[0];

for(j=0;j项目名称 解:

typedef enum{A,B,C,D,E} SchoolName; typedef enum{Female,Male} SexType; typedef struct{

char event[3]; //项目 SexType sex; SchoolName school; int score;

性别 校名 成绩 得分 编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。

} Component; typedef struct{

int MaleSum;

//男团总分

int FemaleSum; //女团总分 int TotalSum; //团体总分

} Sum;

Sum SumScore(SchoolName sn,Component a[],int n) { }

1.19 试编写算法,计算i!*2的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=1,2,…,n)。假设计算机中允许的整数最大值为maxint,则当n>arrsize或对某个k应按出错处理。注意选择你认为较好的出错处理方法。

解:

#include#include#define MAXINT 65535 #define ArrSize 100 int fun(int i);

int main()

iSum temp; temp.MaleSum=0; temp.FemaleSum=0; temp.TotalSum=0; int i;

for(i=0;itemp.TotalSum=temp.MaleSum+temp.FemaleSum; return temp;

if(a[i].school==sn){ }

if(a[i].sex==Male) temp.MaleSum+=a[i].score; if(a[i].sex==Female) temp.FemaleSum+=a[i].score;

?1?k?n?,使k!?2k?maxint时,

{ }

1.20 试编写算法求一元多项式的值Pnint i,k; int a[ArrSize]; cout<>k;

if(k>ArrSize-1) exit(0); for(i=0;i<=k;i++){ }

for(i=0;i<=k;i++){ }

return 0;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值