算法
sd_cx
这个作者很懒,什么都没留下…
展开
-
动态规划——矩阵连乘的问题
动态规划——矩阵连乘的问题《问题的引出》看下面一个例子,计算三个矩阵连乘{A1,A2,A3};维数分别为10*100 , 100*5 , 5*50按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次所以问题是:如何确定运算顺序,可以使计转载 2012-08-21 17:55:13 · 804 阅读 · 0 评论 -
统计数字问题
原文:http://blog.csdn.net/jcwKyl/article/details/3009244在王晓东编著的《算法设计与实验题解》中看到的这个问题,问题描述如下:这个题目有个最容易想到的n*log10(n)的算法。这是自己写的复杂度为O(n*log10(n))的代码:void statNumber(int n) {int i, t; int cou转载 2013-09-04 22:42:59 · 724 阅读 · 0 评论 -
第二章 快速排序
快速排序算法也是基于分治思想的一种排序算法,它的基本操作即为比较-交换。快速排序算法的基本思想是从待排序的序列中选取一个比较标准K(通常选取第一个元素),然后将其余元素依次跟K进行比较。在比较的过程中将大于K的元素移到K的后面,将小于K的元素移到K的前面,最后的结果是将原始序列分为两个子序列,而K元素则恰好位于两个子列中间。上述过程称为一趟快速排序,接下来依次为两个子序列进行快速排序,依次转载 2013-09-23 09:59:42 · 795 阅读 · 0 评论 -
贪心算法 Dijkstra 单源最短路径
http://zhenpengday.blog.163.com/blog/static/1659881432011458242523/单源最短路径问题定义: 给定一个图G = (V, E),其中每条边的权是一个非负实数。另外给定V中的一个顶点v,称为源。求从源v到所有其它各个顶点的最短路径。单源最短路径贪心选择策略: 选择当前从源v出发用最短的路径转载 2013-11-11 22:30:45 · 1136 阅读 · 0 评论 -
第五章【回溯法】批处理作业调度问题
http://blog.csdn.net/yuanyu5237/article/details/6595305给定n个作业的集合J=(J1,J2,...,Jn)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先由机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji;i=1,2,...n;j=1,2。对于一个确定的作业调度,设Fji是作业i在机器j上转载 2013-12-02 20:43:42 · 1868 阅读 · 1 评论 -
一些有关C++语言中的bit操作
http://blog.csdn.net/dreamXren/article/details/540245以下大多从网上和书中来,有些则加入了个人的见解~~1) 函数实现交换两个int型变量的值,要求不定义任何中间变量。C / C++ 版:void Swap(int *a, int *b){*a^=*b; *b^=*a; *a^=*b;}C++转载 2013-12-11 21:18:16 · 3271 阅读 · 0 评论 -
第6章 分支限界法
http://www.cnblogs.com/chinazhangjie/archive/2010/11/01/1866136.html分支限界法与回溯法(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。 (2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而转载 2013-12-16 08:59:37 · 774 阅读 · 0 评论 -
【分治法】循环赛事日程表
原文http://blog.csdn.net/liufeng_king/article/details/8488421问题描述: 设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能参赛一次; (3)循环赛在n-1天内结束。转载 2014-10-28 21:37:43 · 1119 阅读 · 0 评论 -
第三章 最长公共子序列
一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都是其子序列,我们可以看出子序列不见得一定是连续的,连续的那是子串。 我想大家已经了解了子序列的概念,那现在可转载 2014-11-18 15:50:06 · 536 阅读 · 0 评论 -
动态规划
动态规划方法通常用来求解最优化问题。动态规划算法设计步骤: 1.刻画一个最优解的结构特征。 2.递归定义最优解的值。 3.计算最优解的值,通常采用自底向上的方法。 4.利用计算出的信息构造一个最优解。 动态规划的实现方法: 带备忘的自顶向下法:此方法仍按自然的递归形式编写过程,但过程会保存每个子问题的解(通常保存在转载 2014-11-06 20:48:03 · 484 阅读 · 0 评论 -
回溯法--批处理作业调度
http://www.cnblogs.com/xing901022/archive/2012/10/23/2734983.html问题描述: 给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理转载 2015-12-09 16:47:14 · 1231 阅读 · 0 评论 -
第五章 回溯法-批处理作业调度
http://blog.csdn.net/wzq153308/article/details/46365177问题描述给定 n 个作业的集合 j = {j1, j2, ..., jn}。每一个作业 j[i] 都有两项任务分别在两台机器上完成。每一个作业必须先由机器1 处理,然后由机器2处理。作业 j[i] 需要机器 j 的处理时间为 t[j][i] ,其中i = 1, 2, ...转载 2015-12-09 22:56:22 · 3005 阅读 · 0 评论 -
MST性质证明
原文地址:http://blog.csdn.net/yelbosh/article/details/7647860什么是MST?MST就是Most Small Tree,应该就是最小生成树的意思吧,具体不是很清楚,MST性质就是最小生成树性质(以下简称MST性质),我们在看最小生成树的算法的时候,很多情况下都有关于这条性质的说明,比如,历史上最经典的Prim算法和Kruskal算法就是根据转载 2015-12-01 09:16:07 · 2428 阅读 · 4 评论 -
全排列问题
http://blog.csdn.net/caigen1988/article/details/7760177全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来转载 2015-12-02 21:23:14 · 448 阅读 · 0 评论 -
第五章【回溯法】最大团问题和图的m着色问题
原文:http://blog.csdn.net/liufeng_king/article/details/87815541、最大团问题 问题描述 给定无向图G=(V, E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果U∈V,且对任意两个顶点u,v∈U有(u转载 2015-12-22 13:40:09 · 3523 阅读 · 0 评论 -
尾递归
定义 - Tail Recursion如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。[1] 尾递归[1]转载 2013-09-09 22:28:43 · 707 阅读 · 0 评论 -
算法三两事
不得不说,有时候无知是福,看到一点有趣而深刻的东东,就能感觉到神奇。越是我们熟悉的东西,往往却是我们进一步理解深刻的障碍,而之所以是障碍是我们并不知道这个是我们理解问题的障碍。困惑中的每一次豁然开朗往往是从一点一滴的我们已经成为惯性思维中开始。越是深刻的原理,往往越是简单强大。就像爱因斯坦打破牛顿给我们原有的世界观一样。对于一个打破常规,让你重新理解问题的最简单的方法就是把你整个思考的前提否定。而转载 2012-12-25 13:22:15 · 520 阅读 · 0 评论 -
Huffman编码
哈夫曼编码简介2010年03月17日 |本网站遵守CC版权协议 转载请注明出自www.thecodeway.com 哈弗曼编码几乎是所有压缩算法的基础,其实这个算法并不复杂,简单的理解就是,如何用更短的bit来编码数据。 我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit:字符编码A00101001转载 2012-11-22 09:18:05 · 865 阅读 · 0 评论 -
渐近记号
渐近记号所有记号都表示一切满足条件的函数的集合。1、Θ记号 Θ(g(n)) = { f(n) : 若存在正常数c1,c2和n0,使对所有n>=n0时有0其效果相当于删除f(n)中的低阶项,并忽略最高阶项的系数。2、Ο记号 Ο(g(n)) = { f(n) : 存在正常数c和n0,使对所有n>=n0,有0Ο记号在一个常数因子内给出某函数的一个上界。f(n) = Ο(g(n))表示转载 2012-09-04 10:00:00 · 727 阅读 · 0 评论 -
3n+1问题
3n+1问题 3n+1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题(Collatz problem)也被叫做hailstone问题、3n+1问题、Hasse算法问题、Kakutani算法问题、Thwaites猜想或者Ulam问题。 问题如下: (1)输入一个正整数n; (2)如果n=1则结束; (3)转载 2012-09-03 17:22:17 · 1396 阅读 · 0 评论 -
递归算法的时间复杂度分析
在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method) 代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理。 (2转载 2012-09-26 17:14:04 · 881 阅读 · 0 评论 -
算法设计关于递归方程T(n)=aT(n/b)+f(n)之通用解法
算法设计关于递归方程T(n)=aT(n/b)+f(n)之通用解法在算法设计中经常需要通过递归方程估计算法的时间复杂度T(n),本文针对形如T(n)=aT(n/b)+f(n)的递归方程进行讨论,以期望找出通用的递归方程的求解方式。算法设计教材中给出的Master定理可以解决该类方程的绝大多数情况,根据Master定理:o-渐进上界、w-渐进下界、O-渐进确界。设a≥1,b>1为常数,f(转载 2012-09-26 17:18:25 · 7041 阅读 · 3 评论 -
线性时间选择
/*Subject:计算机算法设计与分析Title:2.9 线性时间选择Coder:HaoClass:计科0906Num:0304090614Date: Oct 2ed,2011 Programming Language:C++*/#include using namespace std;//实现功能随机的函数int Random(int转载 2012-09-29 10:38:01 · 953 阅读 · 0 评论 -
兔子繁殖问题
在700多年前,意大利有一位著名数学家斐波那契在他的《算盘全集》一书中提出了这样一道有趣的兔子繁殖问题。 如果有一对小兔,每一个月都生下一对小兔,而所生下的每一对小兔在出生后的第三个月也都生下一对小兔。那么,由一对兔子开始,满一年时一共可以繁殖成多少对兔子? 用列举的方法可以很快找出本题的答案: 第一个月,这对兔子生了一对小兔,于是这个月共有2对(1+1=2)兔子。转载 2012-09-13 10:26:51 · 4763 阅读 · 0 评论 -
整数划分算法原理与实现
整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。 如6的整数划分为 6 5 + 1 4 + 2, 4 + 1 + 1 3 + 3, 3 + 2 + 1, 3 + 1 + 1 + 1 2 + 2 + 2, 2 + 2 + 1 + 1, 2 + 1 + 1 + 1 + 1 1 +转载 2012-09-13 16:22:40 · 1428 阅读 · 0 评论 -
全排列问题(递归算法) 汇总
一。全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4转载 2012-09-13 14:44:49 · 1984 阅读 · 0 评论 -
最小生成树(普利姆算法、克鲁斯卡尔算法)
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1) 克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2) 普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续转载 2012-10-11 10:01:44 · 119096 阅读 · 9 评论 -
经典的算法
今天无意中从箱子里发现了大学时学算法的教材《算法设计与分析》,虽然工作这么几年没在什么地方用过算法,但算法的思想还是影响深刻的,可以在系统设计时提供一些思路。大致翻了翻,重温了一下几种几种经典的算法,做一下小结。分治法动态规划贪心算法回溯法分支限界法分治法 1)基本思想将一个问题分解为多个规模较小的子问题,这些子问题互相独立并与原问题解决方法相同。递归解这些子问题,然后将这各子转载 2012-10-10 22:40:21 · 1803 阅读 · 1 评论 -
二分查找代码
#include using namespace std; int BinarySearch(int a[],const int x,int n){ int left=0; int right=n-1; while(left<=right) { int middle=(left+right)/2; if(x==a[middle]) {原创 2012-10-15 23:04:36 · 724 阅读 · 0 评论 -
快速排序源代码
#include using namespace std; int a[200001],n; void swap(int &a,int &b){ int tmp = a; a = b; b = tmp; } //int partition(int p,int r){ //int rnd = rand()%(r-p+1)+p; //swap(a[rnd原创 2012-10-15 20:39:00 · 2306 阅读 · 0 评论 -
动态规划——矩阵连乘的问题
《问题的引出》看下面一个例子,计算三个矩阵连乘{A1,A2,A3};维数分别为10*100 , 100*5 , 5*50按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次所以问题是:如何确定运算顺序,可以使计算量达到最小化。枚举显然不可,如果转载 2012-10-18 11:31:11 · 696 阅读 · 0 评论 -
最小生成树之prim算法
转载地址:http://blog.chinaunix.net/uid-25324849-id-2182922.html边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小转载 2012-11-26 17:36:04 · 1016 阅读 · 0 评论 -
第五章 (回溯法)最大团问题
原文:http://www.cnblogs.com/pushing-my-way/archive/2012/08/08/2627993.html问题描述:团就是最大完全子图。给定无向图G=(V,E)。如果UV,且对任意u,vU 有(u,v) E,则称U 是G 的完全子图。G 的完全子图U是G的团当且仅当U不包含在G 的更大的完全子图中,即U就是最大完全子图。转载 2015-12-22 15:16:22 · 15266 阅读 · 0 评论