WEB开发网
开发学院软件开发数据结构 c语言算法 - 分而治之算法 阅读

c语言算法 - 分而治之算法

 2010-01-28 11:58:37 来源:WEB开发网   
核心提示:练习1.将例1 4 - 1的分而治之算法扩充到n> 1个硬币的情形,需要进行多少次重量的比较?2.考虑例1 4 - 1的伪币问题,c语言算法 - 分而治之算法(5),假设把条件“伪币比真币轻”改为“伪币与真币的重量不同”,同样假定袋中有n个硬币,以使新矩阵A'

练习

1.将例1 4 - 1的分而治之算法扩充到n> 1个硬币的情形。需要进行多少次重量的比较?

2.考虑例1 4 - 1的伪币问题。假设把条件“伪币比真币轻”改为“伪币与真币的重量不同”,同样假定袋中有n个硬币。

1)给出相应分而治之算法的形式化描述,该算法可输出信息“不存在伪币”或找出伪币。算法应递归地将大的问题划分成两个较小的问题。需要多少次比较才能找到伪币(如果存在伪币)?

2)重复1),但把大问题划分为三个较小问题。

3.1)编写一个C++ 程序,实现例1 4 - 2中寻找n个元素中最大值和最小值的两种方案。使用递归来完成分而治之方案。

2)程序2 - 2 6和2 - 2 7是另外两个寻找n个元素中最大值和最小值的代码。试分别计算出每段程序所需要的最少和最大比较次数。

3)在n 分别等于1 0 0,1 0 0 0或10 000的情况下,比较1)、2)中的程序和程序1 4 - 1的运行时间。对于程序2 - 2 7,使用平均时间和最坏情况下的时间。1)中的程序和程序2 - 2 6应具有相同的平均时间和最坏情况下的时间。

4)注意到如果比较操作的开销不是很高,分而治之算法在最坏情况下不会比其他算法优越,为什么?它的平均时间优于程序2 - 2 7吗?为什么?

4.证明直接运用公式(1 4 -2)~(1 4 - 5)得出结果的矩阵乘法的分而治之算法的复杂性为(n3)。因此相应的分而治之程序将比程序2 - 2 4要慢。

5.用迭代的方法来证明公式(1 4 - 6)的递归值为(n l og27)。

*6.编写S t r a s s e n矩阵乘法程序。利用不同的k 值(见公式(1 4 - 6))进行实验,以确定k为何值时程序性能最佳。比较程序及程序2 - 2 4的运行时间。可取n为2的幂来进行比较。

7.当n 不是2的幂时,可以通过增加矩阵的行和列来得到一个大小为2的幂的矩阵。假设使用最少的行数和列数将矩阵扩充为m阶矩阵,其中m为2的幂。

1)求m/n。

2)可使用哪些矩阵项组成新的行和列,以使新矩阵A'和B' 相乘时,原来的矩阵A和B相乘的结果会出现在C' 的左上角?

3)使用S t r a s s e n方法计算A' * B' 所需要的时间为(m2.81)。给出以n为变量的运行时间表达式。

上一页  1 2 3 4 5 

Tags:语言 算法 分而治之

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接