!算法设计与分析总复习资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6、public static int binarySearch6(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle-1; else left=middle+1; } if(x==a[left]) return left; } return -1; }
4、public static int binarySearch4(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0;int right=n-1; while(left<right){ int middle=(left+right)/2; if(x<a[middle])right=middle-1; else left=middle; } if(x==a[left])return left ; } return -1; }
10、建立计算模型的目的是为了使问题的计算复杂性分 析有一个共同的客观尺度,其中最主要的三个模型是 RAM随机存储机、 ①和 ②。
9、① 一般情况下,无法有效地判定所得到的解是否肯定 正确。 ② 有时找不到解。 ③ 消除或减少问题的好坏实例间的计算复杂性差别。
10、① RASP随机存取存储程序机 ②图灵机
分析与解答:
(1)设新机器用同一算法在 t 秒内能解输入规模
为n1的问题。T(n1)=64T(n)=64*3*2n=3*2n+6因此,
解得n1=n+6 。 (2)n12=64n2=(8n)2n1=8n。 (3)由于T(n)=常数,因此算法可解任 意规模的
问题
2、硬件厂商XYZ公司宣称他们最新研制的微处理器运行速度为 竞争对手ABC公司同类产品的100倍。对于计算复杂性分析 分别为n,n2,n3和n!的各算法,若用ABC公司的计算机能在1 小时能接输入规模为n的问题,那么用XYZ公司的计算机在1 小时内分别能接输入规模为多大的问题? 供选择的答案: ①a n b 10n c 100n d 与旧机器处理相同规模 ② a 10n b 2 100 n c log10n d 与旧机器处理相同规模 ③ a 2 100n b 3 100 n c 100n d 与旧机器处理相同规模 ④ a 100n b n+log100 c 1000n d 与旧机器处理相同 规模
二、判断选择题
1、假设某算法在输入规模为n时的计算时间为T(n)=3×2n,在某 台计算机上实现并完成该算法的时间为t秒,现另有一台计算机, 其运行速度为第一台的64倍,那么在这台新机器上用同一算法在 t秒内能输入规模多大的问题? 2若上述算法的计算时间改进为T(n)=n2,其余条件不变,则在新 机器上用t秒时间能解输入规模多大的问题? 3在上述算法的计算时间进一步改进为T(n)=8,其余条件不变, 那么在新机器上用t秒时间能解输入规模多大的问题? 供选择的答案: 1 a 64n b 8n c n+6 d 与旧机器处理相同规模 2 a 8 b n+8 c 8n d 与旧机器处理相同规模 3 a 8 b 64n c 8n d 与旧机器处理相同规模
时,除了提供必须的计算公式外,还必须提供 ② 初始 值。 6、动态规划算法与分治法的基本思想都是将待求解问题分解 成若干个子问题,先求解子问题,然后从这些子问题的解 得到原问题的解。它们的主要区别是分治法求解时,对有 些子问题会 ① ,而动态规划法采用 ② 避免子问 题重复计算。 7、回溯法的求解目标是找出解空间中满足约束条件的 ① , 而分支限界法的求解目标则是找出满足约束条的 ② 或在 某种意义下的最优解。 8、回溯法以 ① 优先的方式搜索解空间树,而分支限界法则 以 ② 优先或以 ③ 优先的方式搜索解空间树。
四、算法分析理解
1、设G=<V,E>是一个带权图。图中各边的费用 (权)为正数。图的一条周游路线是包括V中的每个顶点 在内的一条回路。请画出邻接矩阵并按照解空间树,并给 出回溯法和分支限界法求第一个解的搜索路径。
30 5 6 3 20 4 4 10
1
2
A 1 2 3 F 4 L 3 M C G 4 N 4 2 H 2 O B 3 D I 3 P 4 E 2 J 2 Q K 3 4
参考答案
1、 ①输入 ② 输出 ③ 确定性 ④ 有限性 ⑤ 可行性
2、 ①有限性 3、 ① 数据模型 ② 算法构件 4、 ① 上界 ② 下界 ③ 同阶
5、 ① 递归 ② 非递归定义的 6、 ① 重复计算 ②一个表 7、 ① 全部解 ② 一个解 8、 ① 深度优先 ② 广度优先 ③ 最小耗费优先
9、概率算法可分为4类:数值算法、蒙哥特卡罗算法、拉斯 维加斯算法和舍伍德算法。 蒙哥特卡罗算法常用于求问题的准确解,其缺点是①; 拉斯维加斯算法不会得到不正确的解,其缺点是②; 使用舍伍德算法求解得好处在于,可以③。
参考答案
1、数组段左右游标left和right 的调整不正确,导致陷入 死循环。 2 数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 3、数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 4、数组段左右游标left和right 的调整不正确,导致陷入 死循环。 5、算法正确,且当数组中有重复元素时,返回满足条件 的最右元素。 6、数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 7、数组段左右游标left和right 的调整不正确,导致当 x=a[0]时陷入死循环
3、public static int binarySearch3(int[] a,int x,int n) { int left =0; int right=n-1; while(left+1!=right){ int middle=(left+right)/2 if(x>=a[middle])left=middle; else right=middle; } if(x==a[middle]) return left; else return -1; }
2、public static int binarySearch2(int[] a,int x,int n) { int left =0; int right=n-1; while(left<right-1){ int middle=(left+right)/2 if(x<a[middle])right=middle; else left=middle; } if(x==a[left]) return left; else return -1; }
《算法设计与分析》 总复习
北方民族大学 计算机科学与技术学院 白静
一、填空题
1、算法是指解决问题的方法或过程,算法所描述的指令序列必
须满足下列性质① 、② 、③ 、④ 、⑤ 。
2、程序是算法用某种程序设计语言的具体实现,程序可以不满 足算法的 ① 性质。所以像操作系统这样的软件不是算法。
3、抽象数据类型是算法设计的重要概念。严格地讲,它是算法
3、解递推关系 X(n)=X(n/3)+1 于n=3k的情况求解 x(n)=x(n/3)+1
其中
n>1,XHale Waihona Puke Baidu1)=1对
=x(n/3/3)+1+1 =x(n/32)+2 …….. =x(n/3k)+k 因为 n=3k 所以 k=㏒3n X(n)=1+㏒3n
4、下面的说法错误的是________。(可多选)
语言L是NP完全的当且仅当L∈NP,对于所有L’∈NP 有 L’∝PL。 一个问题X定义为NP完全性问题,如果:X在NP中,而 且NP中的每一个其他问题都可以在多项式时间归约到X。 根据定理的推论,一旦建立了问题L的NP完全性后,对 于L1∈NP,只要证明问题L在多项式时间内变换为L1, 即L∝p L1,就可证明L1 也是NP完全的。
分析与解答: (1)n’=100n (2)n’2=100n2=(10n)2n’=10n (3)n’3=100n3 3 100 n=4.64n
(4)n’!=100n!n’<n+log100=n+6.64
由司特林公式
n 2n ( n ) n! 2n e lim n lim lim n 0 n n n n n n e
7、public static int binarySearch7(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle; else left=middle; } if(x==a[left]) return left; } return -1; }
三、判断分析
请判别下面给出的7个二分算法java程序的正确性,若算 法不正确,说明产生错误的原因,若正确给出算法正确性 证明。 1、public static int binarySearch1(int[] a,int x,int n) { int left =0;int right=n-1; while(left<=right){ int middle=(left+right)/2 if(x==a[middle])return middle; if(x>a[middle])left=middle; else right=middle; } return -1; }
R L R G G L
L
R
G
R
L
G
L
R
G
R
L
G
R
L
R
G
G
L
R G
G L G
R L
G R R
R L
L G
R G L G G L
L R
L R G R
L R G L
L G G R
G R R L
R L R G
L L G
G L R
五、简答与证明题
1、给出NP 完全问题的定义,写出证明一问题属于NPC
问题的基本思想 。
5、public static int binarySearch5(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle-1; else left=middle; } if(x==a[left]) return left; } return -1; }
A 1 2 3 F 4 L 3 M C G 4 N 4 2 H 2 O B 3 D I 3 P 4 E 2 J 2 Q K 3 4
25
25
邻接矩阵
1 2 3 4
1 0 30 6 4
2 30 0 5 10
3 6 5 0 20
4 4 10 20 0
2、给出4个顶点的图如下: 只给出三种颜色,如何给4个顶点着色,使之有连边 关系的顶点颜色不同,一共有多少种着色方法,请绘图 说明。
a、算法原地工作的含义是指不需要任何额外的辅助
空间; b、在相同的规模n下,时间复杂度为O(n)的算法在
时间上总是优于时间复杂度为O(2n)的算法。
c、所谓时间复杂度是指最坏情况下,估算算法执行 时间的一个上界;
d、同一算法,实现语言的级别越高,执行效率越低。
参考答案 a、 d 一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外 之空间来转换资料的算法。
的一个 ① 连同定义在该模型上并作为 ② 4、设f(N)和g(N)是定义在正数集上的正函数,当N充分大时, f(N)=O(g(N))表示g(N)是f(N)的一个①; f(N)=Ω(g(N))表示g(N)是f(N)的一个②; f(N)=θ(g(N))表示g(N)是f(N)③。
的一组运算。
5、直接或间接地调用自身的算法称为 ① ,在定义该算法