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. vi查找

    /pattern<Enter> :向下查找pattern匹配字符串 ?pattern<Enter>:向上查找pattern匹配字符串 使用了查找命令之后,使用如下两个键快速查找 ...

  2. 鼠标点击DIV后,DIV的背景变色(js)

    <!DOCTYPE html> <html> <head> <script> window.onload = function(){ var divs ...

  3. ruby gems安装镜像

    由于每一个月都要升级两台gitlab server, ruby安装的源老是被墙,痛苦无比. 所以须要使用国内的镜像 在/home/git/gitlab/Gemfile文件里第一行改动为: # sour ...

  4. Swift学习——A Swift Tour 函数

    Functions and Closures  函数和封闭性(闭包) Functions  函数的使用 Swift中的函数定义和OC中有明显的差别了,使用func定义函数,在括号里定义參数和类型,用 ...

  5. AJAX的概念介绍

    AJAX学习 1.XMLHttpRequest对象创建 var request= new XMLHttpRequest(); 兼容ie6.ie5 var request; if(windoe.XMLH ...

  6. [Linux 小技巧] Ubuntu 14.04 下编译、安装、配置最新开发版 GoldenDict

    1. 背景介绍 GoldenDict 是一款非常优秀的跨平台电子词典软件,支持 StarDict.Babylon 等多种词典.其 PC 版基于 Qt 编写,完全免费.开源且没有广告.GoldenDic ...

  7. Python - SQLAlchemy之连表操作

    ORM的两种创建方式 数据库优先:指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码 代码优先:就是先写代码,然后根据代码去生成数据库结构. ...

  8. WPF控件---Border应用

    内容模型:Border 只能具有一个子元素.若要显示多个子元素, 需要将一个容器元素放置在父元素Border中. <Grid> <Border BorderBrush="B ...

  9. 【转】使用 Eclipse 调试 Java 程序的 10 个技巧

    你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...

  10. Android-为何以及如何保存Fragment实例

    在安卓开发中,由于旋转设备会造成配置改变进而导致Activity实例被摧毁(当然也包括Activity托管的Fragment).Activity或Fragment实例被摧毁自然也就让Model被摧毁, ...