计算机设计第二章

递归与分治策略

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 ()

{

}

原文地址:https://www.cnblogs.com/heruonan/p/8450531.html