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(第四章二节)的更多相关文章

  1. 算法导论(第三版)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  ...

  2. 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)

    讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; & ...

  3. 算法导论(第三版)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 ...

  4. 《CSS权威指南(第三版)》---第四章 值和单位

    本章主要讲解的是一些属性声明用的值: CSS中的值主要有数字,百分数,颜色, 1.颜色: rgb(100%,100%,100%)  OR  rgb(255,255,255) OR #FF0000 WE ...

  5. 第三周学习java第四章学习总结及体会!

    第三周java 2第四章的学习总结: 一.主要内容(类与对象): 1.类: 2.构造方法与对象的创建: 3.类与程序的基本结构: 4.参数传值: 5.对象的组合: 6.实例成员与类成员: 7.方法重载 ...

  6. 《C++Primer》第五版习题解答--第四章【学习笔记】

    [C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...

  7. 算法导论 第三章 and 第四章

    第三章 渐进的基本O().... 常用函数 % 和  // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...

  8. Windows程序设计(第五版)学习:第四章 文本输出

    第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域.   2,大多数 ...

  9. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

随机推荐

  1. MySQL事务处理2

    MySQL5.X 都已经发布好久了,但是还有很多人认为MySQL是不支持事务处理的,这不得不怪他们是孤陋寡闻的,其实,只要你的MySQL版本支持BDB或 InnoDB表类型,那么你的MySQL就具有事 ...

  2. Android Paint之 setXfermode PorterDuffXfermode 讲解

    setXfermodePorterDuffXfermode图层混合模式android图像混合模式AvoidXfermode 尊重原创,欢迎转载,转载请注明: FROM  GA_studio   htt ...

  3. C++ lambda 表达式传递的变量默认不可变

    我遇到例如以下问题: int count=0; listener->onTouchMoved=[count](Touch* t,Event* e){ count++; log("onT ...

  4. 每天进步一点点——Linux系统时间来处理

    转载请注明出处:http://blog.csdn.net/cywosp/article/details/25839551 在程序中时间处理往往是一个麻烦的事.Linux系统提供了非常多关于时间处理的函 ...

  5. uploadify3.1 参数 中文详解

    langFile: 'http://www.static-xxx.nu/uploader/uploadifyLang_en.js',//语言包的路径,能设置所有的提示文字 swf: 'http://w ...

  6. Sybase datetime 时间转换格式 convert(varchar(10),字段名,转换格式)

    convert(varchar(10),字段名,转换格式)sybase下convert函数第三个参数(时间格式)比如:1.select user_id,convert(varchar(10),dayt ...

  7. openwrt interface

    orige : http://www.cnblogs.com/preorder69/p/3959187.html 这篇算是对openwrt网络接口的一个翻译吧,源地址:http://wiki.open ...

  8. 【nodejs学习】2.网络相关

    1.官方文档的一个小例子 //http是内置模块 var http = require('http'); http.createServer(function(request, response){ ...

  9. abstract修饰符,具体类与抽象类的区别

    abstract修饰符 abstract可以修饰类,表示一个抽象类,注意:抽象类和具体类唯一的区别:类不能创建对象,而具体类是可以创建对象的 1.具体类有构造方法,抽象类也有构造方法 2.具体类可以有 ...

  10. 关于在Java代码中写Sql语句需要注意的问题

    最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...