算法设计与分析
文章平均质量分 73
Davout_Ling
虽然很多不会,但是我愿意学
展开
-
分治法
分治法的主要思想就是,将一个规模为N的问题,将他分解为多个规模小于N的子问题,逐个的解决这些子问题,然后将这些子问题的解合并起来,构成原问题的解。分治法的步骤:1.分:将原问题分解为多个子问题,这些子问题是可以独立求解的子问题,并且分解得到的解和原问题的解有着相同的结构,便于使用递归和循环机制。2.解:求解这些子问题的解3.治:将子问题的解合并起来形成原问题的解。类型1原创 2015-05-16 19:36:56 · 1145 阅读 · 0 评论 -
分治法——非等分分治
上一篇我们讲了分治法最基本的形式——二分法,现在我们讲一讲非等分分治的情况。非等分分治顾名思义就是在分的时候,子问题的规模不是相等的,也就是分点不在中心位置。非等分分治的一个应用就是快速排序算法。现在我们看一个基于快拍算法的例子——求第k小的数。如果我们使用二分法来解决这个问题。首先将问题一分为二,化成两个同等规模的子问题。从这两个自问题中递归求解,但是,这样做会很麻烦。因此,我们采取原创 2015-05-17 19:08:00 · 1170 阅读 · 0 评论 -
贪心算法基础(一)——数列极差
贪心算法的思想就是用局部的最优解,达到最后全局的最优解。贪心算法使用是有限制的,一个问题能不能使用贪心来做,往往我们要对其进行必要的证明。贪心算法策略具有无后向性,也就是当前阶段的状态确定之后,不受后面阶段状态的影响。现在我们先将一个能使用贪心算法的问题——数列极差。问题描述:在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1原创 2015-05-27 16:46:34 · 6500 阅读 · 0 评论 -
贪心算法基础(二)
今天我们还是讲贪心算法。题目是:将一个真分数表示成若干个埃及分数的和。啥是埃及分数?例如:1/2这就是埃及分数,也就是分子为1的分数。例如:7/8=1/2+1/3+1/24。那么怎么实现这个呢?因为是加法运算,所以我们通过一项项的“拆项”来实现。1.找出最大的埃及分数,使得f>1/n。2.输出1/n.3.f=f-1/n.4.如果f是埃及分数则完成,否则继续第一步.但是先原创 2015-05-28 23:21:54 · 695 阅读 · 0 评论 -
趣味数组(一)
首先,我们来聊一聊魔方数组。1.魔方数组首先,啥事魔方数组呢?例如:6 1 87 5 32 9 4他的每一行,每一列以及对角线的和都等于一个常数,这个常数为n*(n*n+1)/2。其中,n为阶数。那么,我们应该怎么实现魔方数组呢?1.我们将1安置在第一行的中间位置,及(i,j)=(1,(n+1)/2)2.下一个数我们写到上一个数主对角线的上方,即(i原创 2015-07-31 18:55:41 · 680 阅读 · 0 评论 -
趣味数组(二)
今天,继续讲趣味数组。1.编程然后请输出这样的一个数组:这和我们线代中学的上三角矩阵有点类似。我们在处理这个问题时,我们按照层来处理,不是一般的行列。那么啥是层呢?例如:1就是第一层,2,3 就是第二层,456就是第三层,以此类推。在这里我们可以发现,层号和这个层里面所包含的元素个数是相同的。设层号是 i,每一层所包含的元素个数为 j。那么,i 的范围是 i∈[1,n],原创 2015-08-02 16:46:36 · 508 阅读 · 0 评论 -
动态规划——0-1背包
首先动态规划这里的规划是指在解决问题中解决问题的一系列的步骤和方法。动态规划往往都是解决最优化问题。其次,动态规划它有三个性质:1.最优子结构:就是问题的最优解包含了子问题的最优解。2.无后向性:就是解决当前的状态,与之前的状态和之后的状态没有关系,你只需要考虑当前的状态。3.重复子问题:当问题的各个子问题不是独立的,而是相关的,这就是重复子问题。如果各个子问题不是独立的,往往就需原创 2015-10-24 22:02:22 · 396 阅读 · 0 评论 -
动态规划——最大子段和
最大字段和这是动态规划的经典问题,上一讲我们讲了一个简单的动态规划问题,这个最大子段和也不难,我们主要通过这几个简单的问题来了解一下动态规划。还有最大子段和用分治法也能做,等到日后我们在讲。问题描述:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0。原创 2015-10-24 22:44:59 · 5395 阅读 · 0 评论