
算法
奔跑吧猴哥
搬砖的。
展开
-
算法复杂度——时间复杂度和空间复杂度
算法复杂度——时间复杂度和空间复杂度 关键字: 算法复杂度 时间复杂度 空间复杂度 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时 间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的 语句执行次数称为语句频度或时间频度。记为T(n)。原创 2011-03-16 13:12:00 · 721 阅读 · 0 评论 -
Strassen矩阵乘法
矩阵乘法的介绍以及更多的算法可以参考:WIKI矩阵乘法是线性代数中最常见的运算之一,它在数值计算中有广泛的应用。若A和B是2个n×n的矩阵,则它们的乘积C=AB同样是一个n×n的矩阵。A和B的乘积矩阵C中的元素C[i,j]定义为: 若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素C[i,j],需要做n个乘法和n-1次加法。因此,求出矩阵C的n2个转载 2011-06-06 16:54:00 · 936 阅读 · 0 评论 -
动态规划——数组最大子数组和
<br />问题描述:<br />给定一个整数数组a[0~n],求数组a的子数组,使其元素和为最大。<br />问题分析:<br />方法一:可以用普通的方法枚举所有的子数组,然后求出最大的子数组和,时间复杂度为O(n*n)。<br />方法二:问题描述符合动态规划最优子结构的要求。<br />设b[i]表示以a[i]结尾 的子数组的最大子段和,即:<br />b[i]=max{sum(a[j~k])},其中0<=j<=i,j<=k<=i。<br />因此对于数组a[0~n]的最大字段和为max{b[i]原创 2011-06-01 19:11:00 · 3671 阅读 · 0 评论 -
用归纳法证明循环不变式的正确性。
<br />循环不变式(loop invariant)原创 2011-05-17 13:51:00 · 1044 阅读 · 0 评论 -
常用算法(1) 将排序二叉树转换双向链表
#include "stdafx.h" #include using namespace std; template struct Node { T data; Node *left; Node *right; Node(): left(NULL), right(NULL) { } }; //create binary sorted tree template void AddBstNode(Node *& node, T value) { i原创 2011-05-18 13:59:00 · 1259 阅读 · 1 评论 -
0-1背包问题--动态规划解法
问题描述: 给定n种物品和一背包,物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品(物品不能分割),使得装入背包中物品的总价值最大? 抽象描述如下: x[n]:表示物品的选择,x[i]=1表示选择放进物品i到背包中。 问题分析: 1.抽象之后背包问题转换为找到一个最优的数组,x1,x2,.....,xn的0-1序列。 2.假设最优解的序列为x1,x2,.....,xn,能使背包容量C的总价值最大.原创 2011-05-11 10:25:00 · 1878 阅读 · 0 评论 -
贪心算法的详解
一、 贪心策略的定义【定义1】 贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。 其实,从"贪心策略"一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。 二、贪心算法的特点 通过上文的介绍,可能有人会问:贪心算法有什么样的特点呢?我认为,适用于贪心算法解决的问题应具有以下2个特点:1、贪心选择性质:原创 2011-05-11 13:37:00 · 2587 阅读 · 0 评论 -
背包问题动态规划详细探究
首先是问题描述:给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,问如何选择装入背包中的物品总价值最大?可以这样理解:背包的背负有上限,因此在这个上限内尽可能多的装东西,并且价值越多越好。在这里我之想讨论动态规划解决这个问题的详细过程。动 态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。因为背包的最终最大容量未知,所以,我们得从1到 M一个一个的试,比如,刚开始任选N件物品中的一个,看对应的M的背包,能不能放进去,如果能放进去,并且转载 2011-05-11 12:27:00 · 756 阅读 · 0 评论 -
算法的复杂度
空间复杂度 空间复杂度是程序运行所以需要的额外消耗存储空间, 也用o() 来表示 比如插入排序的时间复杂度 是o(n^2), 空间复杂度是o(1) 而一般的递归算法就要有o(n) 的空间复杂度了, 因为每次递归都要存储返回信息 一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量,算法执行时 间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法 在同一台计算机上执行的时间也不原创 2011-03-16 16:44:00 · 1786 阅读 · 1 评论 -
算法分析与设计之五大常用算法
http://c.chinaitlab.com/special/algorithm/Index.html转载 2011-05-10 16:44:00 · 914 阅读 · 0 评论