① 《算法导论》第三章-思考题(参考答案)
(多项式的渐进行为) 假设 是一个关于 的 次多项式,其中 , 是一个常量。使用渐进符号的定义来证明下面的性质。
a. 若 ,则 。
b. 若 ,则 。
c. 若 ,则 。
d. 若 ,则 。
e. 若 ,则 。
已知: ,易得 。
故 。
情况 1:
,即: 。
故 。
情况 2:
,即: 。
故 。
情况 3:
,即: 。
故 。
情况 4:
,即: 。
故 。
情况 5:
,即: 。
故 。
(相对渐进增长) 为下表中的每对表达式 指出 是否是 的 或 。假设 且 均为常量。回答应以表格的形式,将“是”或“否”写在每个空格中。
a.
令 代替 ,并令 代替 a,可得:
即: 。
又:若 。故: 。
b.
故, 。
令 。故 。
c.
。又 的值为在区间 中波动,故 与 无任何关系
d.
严格递增,故对于任意正常量 ,总存在 ,使得 ,即:
也易证:故对于任意正常量 ,总存在 ,使得 ,即:
e.
。故 。
f.
故,
又, 是严格递增的函数。故,
故, ,也即
也即
(根据渐进增长率排序)
a. 根据增长的阶来排序下面的函数,即求出满足 的函数的一种排列 。把你的表划分成等价类,使得函数 和 在相同类中当且仅当 。
b.给出非负函数 的一个例子,使得对所有在(a)部分中的函数 , 既不是 也不是 。
(渐进记号的性质) 假设 和 为渐进正函数。证明或反驳下面的每个猜测。
a. 蕴含 。
错。例如: 。
b. 。
错。例如: 。
c. 蕴含 ,其中对所有足够大的 ,有 且 。
正确。
对于足够大的 ,有 ;且 ,则存在正常量 ,使得 ,有
又 ,故当 ,且 足够大,有:
故原问题成立。
d. 蕴含 。
错。例如: 。
e. 。
当 时, ;其他条件下,不成立。
f. 蕴含 。
正确。 ,即存在正常量 ,使得 ,有
,即
令 ,得 。
g. 。
错。例如: 。
h. 。
正确。
易得, ,即存在正常量 ,使得 ,都有 。
令 ,即存在正常量 ,使得 ,都有 。
令 ,则 ,有 。
即 。
( 与 的一些变形) 某些作者用一种与我们稍微不同的方式来定义 ;假设我们使用 (读作“ 无穷”)来标识这种可选的定义。若存在正常量 ,使得对无穷多个整数 ,有 ,则称 。
a. 证明:对渐进非负的任意两个函数 和 ,或者 或者 或者二者均成立,然而,如果使用 来代替 ,那么该命题并不为真。
主要缺少了 这个条件;则若 ,必然有无穷多个正整数 ,使得 成立;
若 ,则上述两者均成立;
反例: ,但 。
b. 描述用 代替 来刻画程序运行时间的潜在优点与缺点。
优点: 对下届的要求更宽松,可以兼容更多的情况;
缺点: 并非严格的渐进下界。因此实际意义并不大。
某些作者也用一种稍微不同的方式来定义 ;假设使用 来标识这种可选的定义。我们称 当且仅当 。
c. 如果使用 代替 但仍然使用 ,定理 3.1 中的“当且仅当”的每个方向将出现什么情况?
没有变化。 成立意味着 渐进非负,故 。
有些作者定义 (读作“软 ”)来意指忽略对数因子的 :
:存在正常量 和 ,使得对所有 ,有 。
d. 用一种类似的方式定义 和 。证明与定理 3.1 相对应的类似结论。
:存在正常量 和 ,使得对所有 ,有 。
:存在正常量 和 ,使得对所有 ,有 。
(多重函数) 我们可以把用于函数 中的多重操作符 * 应用于实数集上的任意单调递增函数 。对给定的常量 ,我们定义多重函数 为
该函数不必再所有情况下都是良定义的。换句话说,值 是为缩小其参数到 或更小所需函数 重复应用的数目。
对如下每个函数 和常量 ,给出 的一个尽量紧确的界。
② 给出一些基本的算法问题并给出答案
C语言算法基础
算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法
此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。
void main()
{ int a[101],x[11],i,p;
for(i=0;i<=11;i++)
x[i]=0;
for(i=1;i<=100;i++)
{ a[i]=rand() % 100;
printf("%4d",a[i]);
if(i%10==0)printf("\n");
}
for(i=1;i<=100;i++)
{ p=a[i]%10;
if(p==0) p=10;
x[p]=x[p]+1;
}
for(i=1;i<=10;i++)
{ p=i;
if(i==10) p=0;
printf("%d,%d\n",p,x[i]);
}
printf("\n");
}
二、求两个整数的最大公约数、最小公倍数
分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)
(1) 对于已知两数m,n,使得m>n;
(2) m除以n得余数r;
(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);
(4) m←n,n←r,再重复执行(2)。
例如: 求 m=14 ,n=6 的最大公约数. m n r
14 6 2
6 2 0
void main()
{ int nm,r,n,m,t;
printf("please input two numbers:\n");
scanf("%d,%d",&m,&n);
nm=n*m;
if (m<n)
{ t=n; n=m; m=t; }
r=m%n;
while (r!=0)
{ m=n; n=r; r=m%n; }
printf("最大公约数:%d\n",n);
printf("最小公倍数:%d\n",nm/n);
}
三、判断素数
只能被1或本身整除的数称为素数 基本思想:把m作为被除数,将2—INT( )作为除数,如果都除不尽,m就是素数,否则就不是。(可用以下程序段实现)
void main()
{ int m,i,k;
printf("please input a number:\n");
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<k;i++)
if(m%i==0) break;
if(i>=k)
printf("该数是素数");
else
printf("该数不是素数");
}
将其写成一函数,若为素数返回1,不是则返回0
int prime( m%)
{int i,k;
k=sqrt(m);
for(i=2;i<k;i++)
if(m%i==0) return 0;
return 1;
}
③ 《计算机算法设计与分析第5版习题及答案》pdf下载在线阅读全文,求百度网盘云资源
《计算机算法设计与分析第5版习题及答案》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1oxH2d3SdEUN0rx6LJRNBoA
④ 关于《数据结构与算法分析 java语言描述》 的课后习题答案和项目设计的答案
http://download.csdn.net/download/tangzhnju/3688376, 别人的劳动成果,我只是搬运工,我下载看了下,好像不是所有题目都有答案,不过也很有参考意义
补充:不好意思,没看清楚作者应该不是你需要的那一份
⑤ 谁有《数据结构与算法javascript描述》这本书课后练习题的答案啊
[图灵程序设计丛书].数据结构与算法:JavaScript描述
链接: https://pan..com/s/1yx4OMqQdlo-ebkMq9keN-w
通过本书的学习,读者将能自如地选择最合适的数据结构与算法,并在JavaScript开发中懂得权衡使用。此外,本书也概述了与数据结构与算法相关的JavaScript特性。