算法导论(第三版)Exercises4.2(第四章二节)
4.2-1(计算结果)
18 14
62 66
4.2-2(Strassen算法计算矩阵乘法)
void multiplyMatrix(int a[], int b[], int n, int result[])
{
int i, j, dim=n/;
int n1=(n/) * (n/);
int a11[n1], a12[n1], a21[n1], a22[n1];
int b11[n1], b12[n1], b21[n1], b22[n1]; int s1[n1], s2[n1], s3[n1], s4[n1], s5[n1];
int s6[n1], s7[n1], s8[n1], s9[n1], s10[n1]; int p1[n1], p2[n1], p3[n1], p4[n1];
int p5[n1], p6[n1], p7[n1]; int c11[n1], c12[n1], c21[n1], c22[n1]; if(n == )
{
result[] = a[] * b[];
return;
}
if(n% != )
{
printf("wrong array!\n");
return;
} divideMatrix(a, n, a11, a12, a21, a22);
divideMatrix(b, n, b11, b12, b21, b22);
subtractMatrix(b12, b22, dim, s1);
addMatrix(a11, a12, dim, s2);
addMatrix(a21, a22, dim, s3);
subtractMatrix(b21, b11, dim, s4);
addMatrix(a11, a22, dim, s5);
addMatrix(b11, b22, dim, s6);
subtractMatrix(a12, a22, dim, s7);
addMatrix(b21, b22, dim, s8);
subtractMatrix(a11, a21, dim, s9);
addMatrix(b11, b12, dim, s10); multiplyMatrix(a11, s1, dim, p1);
multiplyMatrix(s2, b22, dim, p2);
multiplyMatrix(s3, b11, dim, p3);
multiplyMatrix(a22, s4, dim, p4);
multiplyMatrix(s5, s6, dim, p5);
multiplyMatrix(s7, s8, dim, p6);
multiplyMatrix(s9, s10, dim, p7); addMatrix(p5, p4, dim, c11);
subtractMatrix(c11, p2, dim, c11);
addMatrix(c11, p6, dim, c11);
addMatrix(p1, p2, dim, c12);
addMatrix(p3, p4, dim, c21);
addMatrix(p5, p1, dim, c22);
subtractMatrix(c22, p3, dim, c22);
subtractMatrix(c22, p7, dim, c22); combineMatrix(c11, c12, c21, c22, dim, result);
} void addMatrix(int a[], int b[], int n, int result[])
{
int i;
for(i=; i<n*n; i++) result[i] = a[i] + b[i];
} void subtractMatrix(int a[], int b[], int n, int result[])
{
int i;
for(i=; i<n*n; i++) result[i] = a[i] - b[i];
} void divideMatrix(int a[], int n, int a11[], int a12[], int a21[], int a22[])
{
int i, mid, j, k, h;
mid = n / ;
for(i=; i<mid; i++)
{
for(j=; j<mid; j++)
{
h = i * mid + j;
k = i * n + j;
a11[h] = a[k];
a12[h] = a[k+mid];
a21[h] = a[k+n*n/];
a22[h] = a[k+n*n/+mid];
}
}
} void combineMatrix(int a11[], int a12[], int a21[], int a22[], int n, int result[])
{
int i, j, h, k, dim, mid;
mid = n;
dim = mid * ;
for(i=; i<mid; i++)
{
for(j=; j<mid; j++)
{
h = i * mid + j;
k = i * dim + j;
result[k] = a11[h];
result[k+mid] = a12[h];
result[k+n*n*] = a21[h];
result[k+n*n*+mid] = a22[h];
}
}
}
4.2-3
当矩阵的n不是2的指数时,添加0补足,即可按上述算法运行
4.2-4
21
4.2-5
72x72的那个最佳,比Strassen算法好
4.2-6
当knXn矩阵时,按4.2-3的方法处理,同样nXkn也一样,可以看出nXkn计算时间短
4.2-7(用数组存储复数)
void multiplyComplex(double c1[], double c2[], double result[])
{
double p1, p2, p3;
p1 = c1[] + c1[];
p2 = c2[] + c2[];
p1 = p1 * p2;
p2 = c1[] * c2[];
p3 = c1[] * c2[];
result[] = p2 - p3;
result[] = p1 - p2 - p3;
}
算法导论(第三版)Exercises4.2(第四章二节)的更多相关文章
- 算法导论(第三版)Exercises2.3(归并排序、二分查找、计算集合中是否有和为X的2个元素)
2.3-1: 3 9 26 38 41 49 52 59 3 26 41 52 9 38 49 57 3 41 52 26 38 57 9 49 3 41 52 26 38 ...
- 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; & ...
- 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
关于练习程序的说明参见置顶的那篇. 2.1-1: 31 41 59 26 41 58 31 41 59 26 41 58 31 41 59 26 41 58 26 31 41 59 41 58 26 ...
- 《CSS权威指南(第三版)》---第四章 值和单位
本章主要讲解的是一些属性声明用的值: CSS中的值主要有数字,百分数,颜色, 1.颜色: rgb(100%,100%,100%) OR rgb(255,255,255) OR #FF0000 WE ...
- 第三周学习java第四章学习总结及体会!
第三周java 2第四章的学习总结: 一.主要内容(类与对象): 1.类: 2.构造方法与对象的创建: 3.类与程序的基本结构: 4.参数传值: 5.对象的组合: 6.实例成员与类成员: 7.方法重载 ...
- 《C++Primer》第五版习题解答--第四章【学习笔记】
[C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...
- 算法导论 第三章 and 第四章
第三章 渐进的基本O().... 常用函数 % 和 // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...
- Windows程序设计(第五版)学习:第四章 文本输出
第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域. 2,大多数 ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
随机推荐
- JSP入门:介绍什么是JSP和Servlet(转)
转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...
- jTemplates——学习(1)
这里介绍一个基于jQuery开发的模板引擎. jTemplates目前最新的版本是0.7.8,由tPython开发.官方网站:http://jtemplates.tpython.com 两个附件, 一 ...
- 好的android编码习惯
上一期分享了android内存优化的一些总结,这一期说说我认为的好的编码习惯,然后下一期会做安卓数据库优化的一些总结,逐渐的会将一些性能优化点总结分享出来,肯定是不够全面的希望不足的地方欢迎指出. 良 ...
- Movie播放Gif,完美实现屏幕适配
android播放gif 我研究过3种 第一 :GifView支持android播放gif,效果是 先加载第一帧,然后慢慢加载完其他的针,这样效果视觉很不好,是从模糊到清晰的过程:第二:是流行的把g ...
- js验证表单并提交
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#委托的回调机制
代码如下: public partial class FrmMain : Form { // 定义回调使用关键字 delegate(回调是委托的一种应用,其本质就是委托) private delega ...
- Eclipse,hadoop2.7.2 hadoop-eclipse-plugin.jar的制作
装好了hadoop后发现有装个eclipse的必要,于是参照文章A(http://www.powerxing.com/hadoop-build-project-using-eclipse/)进行安装, ...
- angularJS环境安装
第一步: 安装node.js,进入node.js官网(http://nodejs.org/)下载安装相应的node.js版本:
- JS 匿名函数
一.声明: 1. 正常函数声明: //正常函数声明 function foo(p1, p2){ return p1+p2; } 2. 匿名函数声明: //匿名函数声明 var foo= functio ...
- OpenSceneGraph FAQ
转自http://www.cnblogs.com/indif/archive/2011/04/22/2024805.html 1.地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗? ...