第1章练习题及参考答案
1.1第1章——概论
1.1.1练习题
1. 下列关于算法的说法中正确的有()个。
Ⅰ. 求解某一类问题的算法是**的
Ⅱ. 算法必须在有限步操作之后停止
Ⅲ. 算法的每一步操作必须是明确的,不能有歧义或含义模糊
Ⅳ. 算法执行后一定产生确定的结果
A. 1B. 2C. 3D. 4
2. T(n)表示当输入规模为n时的算法效率,以下算法中效率*优的是()。
A. T(n)= T(n-1)+1,T(1)=1B. T(n)= 2n2
C. T(n)= T(n/2)+1,T(1)=1D. T(n)=3nlog2n
3. 什么是算法?算法有哪些特性?
4. 判断一个大于2的正整数n是否为素数的方法有多种,给出两种算法,说明其中一种算法更好的理由。
5. 证明以下关系成立:
(1) 10n2-2n=θ(n2)
(2) 2n+1=θ(2n)
6. 证明O(f(n))+O(g(n))=O(max{f(n),g(n)})。
7. 有一个含n(n>2)个整数的数组a,判断其中是否存在出现次数超过所有元素一半的元素。
8. 一个字符串采用string对象存储,设计一个算法判断该字符串是否为回文。
9. 有一个整数序列,设计一个算法判断其中是否存在两个元素的和恰好等于给定的整数k。
10. 有两个整数序列,每个整数序列中的所有元素均不相同,设计一个算法求它们的公共元素,要求不使用STL的集合算法。
11. 正整数n(n>1)可以写成质数的乘积形式,称为整数的质因数分解。例如,12=2×2×3,18=2×3×3,11=11。设计一个算法求n这样分解后各个质因数出现的次数,采用vector向量存放结果。
12. 有一个整数序列,所有元素均不相同,设计一个算法求相差*小的元素对的个数。例如序列4,1,2,3的相差*小的元素对的个数是3,其元素对是(1,2)、(2,3)、(3,4)。
13. 有一个map容器,其中已经存放了较多元素,设计一个算法求出其中重复的value并且返回重复value的个数。
14. 重新做第10题,采用map容器存放*终结果。
15. 假设有一个含n(n>1)个元素的stack栈容器st,设计一个算法出栈从栈顶到栈底的第k(1≤k≤n)个元素,其他栈元素不变。
1.1.2练习题参考答案
1. 答: 由于算法具有有穷性、确定性和输出性,所以Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是**的。答案为C。
2. 答: 选项A的时间复杂度为O(n),选项B的时间复杂度为O(n2),选项C的时间复杂度为O(log2n),选项D的时间复杂度为O(nlog2n)。答案为C。
3. 答: 算法是求解问题的一系列计算步骤。算法具有有限性、确定性、可行性、输入性和输出性5个重要特征。