递归与分治策略
2-1Hanoi塔问题的非递归算法
证明:Hanoi塔问题的递归算法与非递归算法实际上是一回事。
分析:
递归问题算法:
void hanoi(int n,int A,int B,int C)
{
if (n>0)
{
hanoi(n-1,A,C,B);
move(n,A,B);
hanoi(n-1,C,B,A);
}
void hanoi(int n)_{
int top[3]={0,0,0};
int **tower;
Make2DArray(tower,n+1,3);
int b,bb,x,y,min=0;
for (int i=0;i<=n;i++){}
top[0]=n;
while(top[1]<n)
{
}
2-2 7个搜索算法
2-3改写二分搜索算法
设a[0:n-1]是已经排好序的数组,请改写二分搜索算法,使得当搜索元素x不在
数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在
数组中时。
2-4大整数乘法的O()算法
给定2个大整数u和v,它们分别有m和n位数字,且m<<n
2-5 5次n/3位整数的乘数
在用分治法求两个n位大整数u和v的乘积时,将u和v都分割为长度为n/3位的3段。
设计一个求两个大整数乘积的分治算法,并分析算法的计算复杂性
2-6 矩阵乘法
对于任何非零偶数,总可以找到奇数m和正整数k,使得n=m2k。使用Strassen算法
2-7多项式乘积
2-8o(1)空间子数组换位算法
设计一个算法使数组换位
算法1:循环换位算法
向前循环换位
算法2:3次反转算法
算法3:排列循环算法
2-9o(1)空间合并算法
算法一:向右循环换位合并
算法2:内部缓存算法
2-10对于所给的元素存储于数组中和存储于链表中两种情形,写出自然合并排序
算法
分析:对于存储于数组的情况,自然合并排序算法如下:
temple<class T>
void sort (T *a0,int m)
{
a=a0;
n=m;
b=new int [n];
natural mergersort();
}
void naturalmergesort ()
{
}