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. .NET基本权限管理框架源代码

    有兴趣的朋友欢迎加群讨论:312677516 1.菜单导航管理 2.操作按钮 3.角色管理 4.部门管理 5.用户管理(用户权限) 6.用户组管理(设置成员,用户组权限) 7.系统配置(动态配置系统参 ...

  2. SQLite中不支持的sql语法

    今天很自然的在写Sql语句的时候用了Top,一开始没发现问题,因为我从数据库读出的值正好是0,而我习惯变量定义的时候也都赋值0,可是到我不要0的时候我就发现问题了.后来才知道,可爱的小sqlite竟然 ...

  3. Java基础知识强化42:StringBuffer类之StringBuffer的截取功能

    1. StringBuffer的截取功能: public String subString(int Start): public String subString(int Start, int end ...

  4. 初学Pexpect

    概述 Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块 ...

  5. ComboBox( 下拉列表框)

    一. 加载方式//class 加载方式<select id="box" class="easyui-combobox" name="box&qu ...

  6. 获取checkboxlist选中的值以及绑定来自之前选中的来自数据库的值

    //////ps:一下几句都是一个意思,为的是以后有人搜索关键字的时候能定位到这里///checkboxlist绑定选中值///checkboxlist绑定来之mssql数据的值///checkbox ...

  7. HTML基础总结<文本格式>

    HTML 文本格式化标签 标签 描述 <b> 定义粗体文本 <em> 呈现为被强调的文本 <i> 定义斜体字 <small> 定义小号字 <str ...

  8. Jqgrid的用法总结与分页功能的拓展

    这是本人写的第一个与技术相关的博客,但是非挑战技术的,而是对工作的总结,另外加一点点拓展. Jqgrid的功能十分强大,强大到可以做到与数据grid相关的任何功能,同时由于在用的过程中总是不能够一气呵 ...

  9. C# Dictionary 应用

    1.字典定义并添加数据 Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add(& ...

  10. Sql Server 2008清理数据库日志的语句

    USE [master]GOALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE DNName SET RECO ...