目录 1.矩阵相乘的朴素算法 2.矩阵相乘的strassen算法 3.完整测试代码c++ 4.性能分析 5.参考资料 内容 1.矩阵相乘的朴素算法 T(n) = Θ(n3) 朴素矩阵相乘算法,思想明了,编程实现简单.时间复杂度是Θ(n^3).伪码如下 to n to n to n do c[i][j] ← c[i][j] + a[i][k]⋅ b[k][j] 2.矩阵相乘的strassen算法 T(n)=Θ(nlog7) =Θ (n2.81) 矩阵乘法中采用分治法,第一感觉上应该能够有效的提高算…
由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix.h代码如下:(个人并不喜欢把代码全写在一块,对于阅读者是相当巨大的负担,其实自己受不了(逃)) #pragma once #include<vector> using namespace std; class Matrix { public: vector<vector<int>…
 题目 快速排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h> void PrintArr(int *pnArr, int nLen) { for (int i = 0; i < nLen; i++) { printf("%d ", pnArr[i]); } printf("\n");…
今天我们讨论的算法是最大子数组问题. 首先我定义了一个类用来保存最大子数组的开始位置索引.结束位置索引和该数组的和.代码如下: class MaximumSubArray { private: int begin; //开始位置索引 int end; //结束位置索引 int sum; //和 public: void setBegin(int Begin) { begin=Begin; } void setEnd(int End) { end=End; } void setSum(int Su…
本文兼参考自<算法导论>及<算法>. 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步. 下文将会用到的一个无向图例子如下: 深度优先搜索 迷宫搜索 在<算法>这本书中,作者写了很好的一个故事.这个故事让我马上理解了深度优先搜索的思想. 如下图1-1所示,如何在这个迷宫中找到出路呢?方法见图1-2. 图1-1 等价的迷宫模型 探索迷宫而不迷路的一种古老办法(至少可以追溯到忒修斯和米诺陶的传说)叫…
前言: 在今后的日子里,我将持续更新博客,讨论<算法导论>一书中的提到的各算法的C++实现.初来乍到,请多指教. 今日主题: 今天讨论<算法导论>第二章算法基础中的归并排序算法.下面是该算法的代码Merge.h: #include <stdlib.h> namespace dksl { /* * 归并 * numArray为整形数组 * head为要归并的数组的开始位置索引 * waist为要归并的数组的中间位置索引 * tail-1为要归并的数组的结束位置索引 */…
package chap04_Divide_And_Conquer; import static org.junit.Assert.*; import java.util.Arrays; import org.junit.Test; /** * 矩阵相乘的算法 * * @author xiaojintao * */ public class MatrixOperation { /** * 普通的矩阵相乘算法,c=a*b.其中,a.b都是n*n的方阵 * * @param a * @param b…
分治策略有一种“大事化小,小事化了”的境界,它的思想是将原问题分解成两个子问题,两个子问题的性质和原问题相同,因此这两个子问题可以再用分治策略求解,最终将两个子问题的解合并成原问题的解.有时,我们会有这样的疑惑:分治策略是将原问题分解成子问题,子问题又用分治策略求解,那分治策略到底是什么?这种感觉就像听到有人说“因为我说我没有做错事,所以我没有做错事”一样,让我们不知道他“没有做错事”的真正原因是什么. 对于上面的困惑,我本科的老师告诫过我们:“对于分治策略,当你们想不明白的时候只需记住两点:一…
在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环形式的c代码实例.可是归并排序有两个特点.一是在归并(即分治策略中的合并步骤)上花费的功夫较多,二是排序过程中须要使用额外的存储空间(异地排序算法<out of place sort>). 为了节省存储空间.出现了高速排序算法(原地排序in-place sort). 高速排序是由东尼·霍尔所发展的…
简单方阵矩乘法 SQUARE-MATRIX-MULTIPLY(A,B) n = A.rows let C be a new n*n natrix to n to n cij = to n cij=cij+aik·bkj return C 一个简单的分治算法 SQUARE-MATRIX-MULTIPLY-RECURSIVE(A,B) n = A.rows let C be a new n*n matrix c11=a11·b11 else partition A,B,and C as in equ…